API Documentation
Редирект пользователя на платёжное окно
Сформируйте подпись и соберите URL
- Создайте проект, и получите ключи
- Посчитайте подпись (sha256 → base64)
- Сделайте редирект на https://payment.twizzygate.tech/
Базовый URL и параметры
Базовый URL:
Copied!
https://payment.twizzygate.tech/
| Параметр | Тип | Обязат. | Пример | Описание |
|---|---|---|---|---|
| orderNum | string | Да | 456 | ID заказа на стороне мерчанта |
| amount | number | Да | 100.00 | Сумма (с двумя знаками или целое) |
| currency | string | Да | RUB | Валюта |
| client | string | Да | pub_123 | Публичный ключ клиента |
| sign | string | Да | Base64 | Подпись (см. ниже) |
Важно! Из набора для подписи исключите client и sign. Сортируйте ключи, склейте key=value через & и добавьте в конец secret без имени.
Подпись запроса
- Исключите client и sign из запроса.
- Отсортируйте ключи по алфавиту (ASCII).
- Соберите строку: k1=v1&k2=v2&...&secret.
- Вычислите sha256 → base64.
Copied!
// ⚠️ Считайте подпись на сервере. Секрет не уходит на фронт.
import crypto from "node:crypto";
type Params = Record<string, string | number | undefined>;
function makeSign(params: Params, secret: string): string {
const entries = Object.entries(params)
.filter(([k, v]) => k !== 'client' && k !== 'sign' && v !== undefined)
.sort(([a], [b]) => a.localeCompare(b));
const base = entries.map(([k, v]) => `${k}=${v}`).join('&') + `&${secret}`;
const digest = crypto.createHash('sha256').update(base, 'utf8').digest();
return Buffer.from(digest).toString("base64");
}
const params = { orderNum: "456", amount: "100.00", currency: "RUB", client: "pub_123" };
const secret = "my_secret";
const sign = makeSign(params, secret);
console.log(sign);Тест-векторы
params: {amount: "100.00", currency: "RUB", orderNum: "456"}, secret:
my_secretbase:
amount=100.00¤cy=RUB&orderNum=456&my_secretsign:
KhizMnxNLB/XuSSoLhLZJz/+oq4nwLr3UVTeOYNOWlo=params: { amount: "1200.50", currency: "RUB", orderNum: "ORD-1001" }, secret:
sec_abcbase:
amount=1200.50¤cy=RUB&orderNum=ORD-1001&sec_abcsign:
xrgISoNmltwflMXLOvLIgqK6omiLIY9F2I6aXASo0MI=Советы: используйте стабильный формат суммы (например 100.00), не включайте пустые поля в подпись, храните секрет только на бекенде.
Примеры
Готовый URL
Copied!
https://payment.twizzygate.tech/?orderNum=456&amount=100.00¤cy=RUB&client=pub_123&sign=KhizMnxNLB%2FXuSSoLhLZJz%2F%2Boq4nwLr3UVTeOYNOWlo%3DcURL
Copied!
curl -L
"https://payment.twizzygate.tech/?orderNum=456&amount=100.00¤cy=RUB&client=pub_123&sign=KhizMnxNLB%2FXuSSoLhLZJz%2F%2Boq4nwLr3UVTeOYNOWlo%3D"Ошибки
При некорректной подписи пользователь увидит ошибку.