API Documentation

Редирект пользователя на платёжное окно

Сформируйте подпись и соберите URL

  • Создайте проект, и получите ключи
  • Посчитайте подпись (sha256 → base64)
  • Сделайте редирект на https://payment.twizzygate.tech/

Базовый URL и параметры

Базовый URL:
Copied!
https://payment.twizzygate.tech/
ПараметрТипОбязат.ПримерОписание
orderNumstringДа456ID заказа на стороне мерчанта
amountnumberДа100.00Сумма (с двумя знаками или целое)
currencystringДаRUBВалюта
clientstringДаpub_123Публичный ключ клиента
signstringДа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_secret
base: amount=100.00&currency=RUB&orderNum=456&my_secret
sign: KhizMnxNLB/XuSSoLhLZJz/+oq4nwLr3UVTeOYNOWlo=
params: { amount: "1200.50", currency: "RUB", orderNum: "ORD-1001" }, secret: sec_abc
base: amount=1200.50&currency=RUB&orderNum=ORD-1001&sec_abc
sign: xrgISoNmltwflMXLOvLIgqK6omiLIY9F2I6aXASo0MI=
Советы: используйте стабильный формат суммы (например 100.00), не включайте пустые поля в подпись, храните секрет только на бекенде.

Примеры

Готовый URL
Copied!
https://payment.twizzygate.tech/?orderNum=456&amount=100.00&currency=RUB&client=pub_123&sign=KhizMnxNLB%2FXuSSoLhLZJz%2F%2Boq4nwLr3UVTeOYNOWlo%3D
cURL
Copied!
curl -L
  "https://payment.twizzygate.tech/?orderNum=456&amount=100.00&currency=RUB&client=pub_123&sign=KhizMnxNLB%2FXuSSoLhLZJz%2F%2Boq4nwLr3UVTeOYNOWlo%3D"

Ошибки

При некорректной подписи пользователь увидит ошибку.