Перейти к содержимому
ZeroKYC Pay

SDK: PHP, Python, Node.js

Официальные SDK для PHP, Python и Node.js: установка, создание инвойсов с идемпотентными ключами и проверка подписи вебхуков одним вызовом.

Официальные SDK оборачивают REST API ZeroKYC Pay: создание инвойсов, проверка подписи вебхуков, идемпотентность и нормализация статусов уже реализованы. Все три — под лицензией MIT, без лишних зависимостей, с единым контрактом и тест-векторами.

Установка

PHP

composer require zerokyc/zkp-sdk-php

Репозиторий на GitHub: github.com/zerokyc-payments/zkp-sdk-php

Python

pip install zkp-sdk-python

Репозиторий на GitHub: github.com/zerokyc-payments/zkp-sdk-python

Node.js

npm install zkp-sdk-node

Репозиторий на GitHub: github.com/zerokyc-payments/zkp-sdk-node

npm / PyPI / Packagist: Если пакета ещё нет в реестре вашей экосистемы, ставьте напрямую из GitHub-репозитория — в README каждого SDK есть однострочный fallback.

Создание инвойса

Один вызов создаёт инвойс и возвращает URL hosted-чекаута. Передавайте idempotency key, чтобы таймаут + повтор вернули тот же инвойс, а не дубликат:

PHP

$zkp = new ZeroKYC(['api_key' => getenv('ZEROKYC_API_KEY'),
    'environment' => 'sandbox']);

$response = $zkp->createInvoice(
    CreateInvoiceRequest::make('19.90', 'USD')->withOrderId('INV-1042'),
    IdempotencyKey::make('myshop', 'invoice', 1042)
);
echo $response->invoice->checkoutUrl;

Python

zkp = ZeroKYC(api_key=os.environ["ZEROKYC_API_KEY"],
         environment="sandbox")

response = zkp.create_invoice(
    "19.90", "USD", order_id="INV-1042",
    idempotency_key=idempotency_key("myshop", "order", 1042))
print(response.invoice.checkout_url)

Node.js

const zkp = new ZeroKYC({
  apiKey: process.env.ZEROKYC_API_KEY,
  environment: "sandbox",
});

const response = await zkp.createInvoice({
  amount: "19.90",
  currency: "USD",
  orderId: "INV-1042",
  idempotencyKey: idempotencyKey("myshop", "order", 1042),
});
console.log(response.invoice.checkoutUrl);

Проверка вебхуков

В каждом SDK есть верификатор с постоянным временем сравнения для заголовка X-ZKP-Signature, тем же окном ±300 секунд и байт-в-байт одинаковыми тест-векторами:

PHP

$event = $zkp->verifyWebhook($rawBody, $_SERVER['HTTP_X_ZKP_SIGNATURE'] ?? '');

Python

event = zkp.verify_webhook(request.body,
                           request.headers["X-ZKP-Signature"])

Node.js

const event = zkp.verifyWebhook(rawBody,
  req.header("X-ZKP-Signature") ?? "");

Никогда не доверяйте браузеру: Success-URL — не доказательство оплаты. Закрывайте заказ только после проверенного вебхука или серверного getInvoice(), сначала сверив id инвойса, сумму и актив.

Что дальше