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 инвойса, сумму и актив.
Что дальше
- Гайд по подключению — полный путь: ключи, первый инвойс, чекоут, вебхуки, запуск.
- Быстрый старт — Первый инвойс менее чем за 10 минут.
- Справочник вебхуков — События вебхуков, схема payload и правила ретраев.
- Проверка HMAC-подписи — Низкоуровневая проверка подписи и тест-векторы.