@dieugene/tochka-api-public
v1.1.0
Published
Node.js client and webhook processor for Tochka Bank API
Maintainers
Readme
Tochka API client (payment links) with DB integration
Installation
npm installUsage
const { TochkaApiClient } = require('./src/TochkaApiClient');
const { webhook_processor } = require('./src/webhook_processor');
const connect = require('@dieugene/payments-db/lib/connect');
const create_invoices_repo = require('@dieugene/payments-db/lib/invoices');
const client = new TochkaApiClient({
base_url: process.env.TOCHKA_BASE_URL, // e.g. https://enter.tochka.com
access_token: process.env.TOCHKA_ACCESS_TOKEN, // permanent JWT
default_customer_code: process.env.TOCHKA_CUSTOMER_CODE
});
// Provide your DB client adapter with execute/upsert_struct (e.g., YDB)
const ydb = /* init your DB client */;
const connection = connect({ client: ydb });
const invoices = create_invoices_repo(connection);
// Create invoice in DB, then create payment link with Tochka
const invoice = await invoices.make_invoice({
domain: 'example.com',
amount: 1000,
data: { callback_data: { url: 'https://merchant/callback', payload: { invoiceId: '...' }}}
});
const resp = await client.create_payment_operation({
amount: 1000,
customer_code: 'your_business_customer_code',
purpose: 'Оплата заказа #123',
payment_mode: ['card', 'sbp'],
redirect_url: 'https://merchant/success',
fail_redirect_url: 'https://merchant/fail'
});
console.log(resp);Webhook processing (with JWT verification)
Serverless-friendly helper
const { webhook_processor } = require('./src/webhook_processor');
const connect = require('@dieugene/payments-db/lib/connect');
const create_payments_repo = require('@dieugene/payments-db/lib/payments');
const create_invoices_repo = require('@dieugene/payments-db/lib/invoices');
// Generic handler (AWS Lambda style)
exports.handler = async (event) => {
try {
const payload = await webhook_processor.decode_webhook({
body: event.body,
isBase64Encoded: event.isBase64Encoded
});
// Resolve invoice and run callback
const connection = connect({ client: ydb });
const payments = create_payments_repo(connection);
const invoices = create_invoices_repo(connection);
const invoice = await invoices.get_invoice(payload.operationId || payload.InvId);
const { url = '', payload: cb_payload = {} } = invoice?.data?.callback_data || {};
if (url) {
await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(cb_payload)
});
}
return { statusCode: 200, body: '' };
} catch {
return { statusCode: 400, body: '' };
}
};Endpoints
This client targets Tochka payment links API per docs:
- Работа с платёжными ссылками: https://developers.tochka.com/docs/tochka-api/api/rabota-s-platyozhnymi-ssylkami
- Redoc tag: https://enter.tochka.com/doc/v2/redoc/tag/Rabota-s-platyozhnymi-ssylkami
Note: Base URL is typically https://enter.tochka.com with endpoints under /uapi/acquiring/v1.0. You can override endpoints in the client options if your environment differs. Endpoints use payments (plural) per docs.
Testing
# Fill TOCHKA_BASE_URL and TOCHKA_ACCESS_TOKEN for integration tests
npm test