Подпись платежа и ошибки sign

Эта страница помогает быстро проверить формирование подписи для ссылки оплаты и избежать ошибки error sign.

Алгоритм подписи

  1. Возьмите параметры: shop_id, amount, currency, order_id.
  2. Если передаёте test=1, добавьте test в подпись.
  3. Отсортируйте по ключу (как PHP ksort).
  4. Соберите строку как в PHP http_build_query.
  5. Подпись: md5(query + SECRET).

PHP пример (эталон)

<?php
$secret = 'YOUR_SECRET';
$data = [
    'shop_id' => 'SHOP_HASH',
    'amount' => '3000',
    'currency' => 'RUB',
    'order_id' => 'ef4c6d4e-660b-4ec8-b32a-31ea523ee758',
    // 'test' => '1', // только если реально отправляете test=1
];
ksort($data);
$query = http_build_query($data);
$sign = md5($query . $secret);
?>

Python пример (совместимый с сервером)

import hashlib
from urllib.parse import urlencode

def make_sign(params: dict, secret: str) -> str:
    sorted_params = dict(sorted(params.items(), key=lambda x: x[0]))
    query = urlencode(sorted_params)  # аналогично http_build_query для простых строк/чисел
    return hashlib.md5((query + secret).encode("utf-8")).hexdigest()

Частые причины error sign

  • amount подписали как 3000, а отправили 3000.0 (или наоборот).
  • Параметр test учли в подписи, но не отправили в URL (или наоборот).
  • Подпись считается с другим секретом/магазином.
  • Параметры подписаны в другом порядке.
  • В подпись попали другие ключи, которые сервер не ожидает.

Быстрая проверка на проде

В админке раздела заказов доступна диагностика ошибок подписи. Там можно отфильтровать по shop_id и увидеть последние входящие значения для проблемных запросов.

Основная документация по созданию платежа: /docs/payments/create-payment/.