Skip to main content

Официальный TypeScript SDK

loveandpay-sdk

Официальный SDK для TypeScript/JavaScript — установите через npm, yarn или pnpm.

Установка

npm install loveandpay-sdk

Быстрый старт

import { LoveAndPay } from 'loveandpay-sdk';

// Инициализация клиента
const client = new LoveAndPay({
  apiKey: process.env.LOVEANDPAY_API_KEY!,
});

// Создание счёта
const invoice = await client.invoices.create({
  amount: 1500,
  currency: 'RUB',
  description: 'Оплата заказа #12345',
});

console.log(`Ссылка для оплаты: ${invoice.paymentLink}`);

Возможности SDK

Полная типизация

TypeScript типы для всех методов и параметров

Автодополнение

IDE подсказки для быстрой разработки

Без зависимостей

Нет внешних зависимостей, только встроенный fetch

ESM и CommonJS

Поддержка обоих форматов модулей

API Reference

Инициализация

import { LoveAndPay } from 'loveandpay-sdk';

const client = new LoveAndPay({
  apiKey: 'pk_live_xxx',           // Обязательно
  baseUrl: 'https://loveandpay.io/api/v1', // Опционально
  timeout: 30000,                  // Опционально, мс
});

Счета (Invoices)

// Создание счёта
const invoice = await client.invoices.create({
  amount: 1500,
  currency: 'RUB',
  description: 'Оплата заказа',
  customer: {
    email: '[email protected]',
    name: 'Иван Иванов',
    phone: '+79991234567',
  },
  metadata: {
    orderId: '12345',
  },
});

// Получение счёта по ID
const invoice = await client.invoices.get('invoice-id');

// Получение списка счетов
const { data: invoices, pagination } = await client.invoices.list({
  status: 'PAID',
  limit: 10,
});

// Получение QR-кода
const qr = await client.invoices.getQRCode('invoice-id', {
  size: 300,
  format: 'png',
});

// Отмена счёта
const cancelled = await client.invoices.cancel('invoice-id', 'Причина отмены');

Вебхуки (Webhooks)

// Создание вебхука
const webhook = await client.webhooks.create({
  url: 'https://yoursite.com/webhook',
  events: ['INVOICE_PAID', 'INVOICE_EXPIRED'],
});

console.log(`Секрет: ${webhook.secret}`); // Сохраните!

// Список вебхуков
const { data: webhooks } = await client.webhooks.list();

// Получение вебхука по ID
const webhook = await client.webhooks.get('webhook-id');

// Удаление вебхука
await client.webhooks.delete('webhook-id');

Верификация подписи вебхука

import express from 'express';
import { LoveAndPay } from 'loveandpay-sdk';

const app = express();
const client = new LoveAndPay({ apiKey: 'your-api-key' });

app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['x-webhook-signature'] as string;
  const rawBody = req.body.toString();

  // Верификация подписи
  const isValid = client.webhooks.verifySignature(
    rawBody,
    signature,
    process.env.WEBHOOK_SECRET!
  );

  if (!isValid) {
    return res.status(401).json({ error: 'Invalid signature' });
  }

  // Парсинг payload
  const payload = client.webhooks.parsePayload(rawBody);

  switch (payload.event) {
    case 'INVOICE_PAID':
      console.log(`Счёт ${payload.data.id} оплачен!`);
      break;
    case 'INVOICE_EXPIRED':
      console.log(`Счёт ${payload.data.id} истёк`);
      break;
  }

  res.json({ success: true });
});

// Или всё в одном шаге с verifyAndParse:
app.post('/webhook2', express.raw({ type: 'application/json' }), (req, res) => {
  try {
    const payload = client.webhooks.verifyAndParse(
      req.body.toString(),
      req.headers['x-webhook-signature'] as string,
      process.env.WEBHOOK_SECRET!
    );

    // payload уже проверен и распарсен
    console.log(payload.event, payload.data);
    res.json({ success: true });
  } catch (error) {
    res.status(401).json({ error: 'Invalid signature' });
  }
});

Асинхронная верификация (для браузера)

// Для браузерных окружений без Node.js crypto
const isValid = await client.webhooks.verifySignatureAsync(
  rawBody,
  signature,
  secret
);

KYC Верификация

// Создание сессии
const session = await client.kyc.createSession({
  level: 'basic',
  redirectUrl: 'https://yoursite.com/kyc-complete',
  metadata: { userId: 'user-123' },
});

console.log(`Ссылка для верификации: ${session.verificationUrl}`);

// Проверка статуса
const status = await client.kyc.getSession('session-id');

if (status.status === 'COMPLETED') {
  console.log('Верификация пройдена!');
}

// Список всех сессий
const { data: sessions, pagination } = await client.kyc.listSessions({
  limit: 10,
  status: 'COMPLETED',
});

Аналитика

// Аналитика за период
const analytics = await client.analytics.get({
  from: '2024-01-01',
  to: '2024-01-31',
});

console.log(`Всего счетов: ${analytics.summary.totalInvoices}`);
console.log(`Оплачено: ${analytics.summary.totalAmount} RUB`);
console.log(`Конверсия: ${analytics.summary.conversionRate}%`);

// Быстрые методы
const today = await client.analytics.today();
const week = await client.analytics.lastWeek();
const month = await client.analytics.lastMonth();

Batch операции

// Создание нескольких счетов
const result = await client.batch.createInvoices([
  { amount: 1000, description: 'Заказ 1' },
  { amount: 2000, description: 'Заказ 2' },
  { amount: 3000, description: 'Заказ 3' },
]);

console.log(`Успешно: ${result.successful.length}`);
console.log(`Ошибки: ${result.failed.length}`);

Identy (AI Валидация подписей)

Identy API работает на отдельном домене https://identy.loveandpay.io и не требует аутентификации.
// Получение категорий
const categories = await client.identy.getCategories();

// Валидация подписи (Base64)
const result = await client.identy.validate(imageBase64, 'image/png');

if (result.isValid && result.confidenceScore > 80) {
  console.log('Подпись подлинная!');
} else {
  console.log(`Проблема: ${result.description}`);
  console.log('Рекомендации:', result.recommendations);
}

// Валидация файла (Node.js)
import { readFileSync } from 'fs';
const file = new Blob([readFileSync('signature.png')]);
const result = await client.identy.validateFile(file);

Обработка ошибок

import { LoveAndPay, LoveAndPayError } from 'loveandpay-sdk';

try {
  const invoice = await client.invoices.get('invalid-id');
} catch (error) {
  if (error instanceof LoveAndPayError) {
    console.log('Код ошибки:', error.statusCode);
    console.log('Тип:', error.error);
    console.log('Сообщение:', error.message);
  }
}

Типы

Все типы экспортируются из пакета:
import type {
  Invoice,
  InvoiceStatus,
  CreateInvoiceParams,
  Webhook,
  WebhookEvent,
  WebhookPayload,
  KYCSession,
  AnalyticsSummary,
  SignatureValidationResult,
  LoveAndPayConfig,
  LoveAndPayError,
} from 'loveandpay-sdk';

Поддерживаемые платформы

ПлатформаПоддержка
Node.js 18+
Bun
Deno
Edge Functions (Vercel, Cloudflare)
Браузер⚠️ Только Identy API

Планы по SDK

1

TypeScript SDK

Статус: Доступен ✅Первый официальный SDK с полной типизацией
2

Python SDK

Статус: Планируется 📋Для интеграции с Django, FastAPI, Flask
3

PHP SDK

Статус: Планируется 📋Для Laravel, Symfony и других фреймворков
4

Go SDK

Статус: Рассматривается 💭Для высоконагруженных систем

Ссылки