Skip to content

Возврат покупателя в мерчант в случае успеха и неудачи

Редирект покупателя

Производим редирект покупателя на ваши URL успеха и неудачи.
URL успеха и неудачи подтягиваются из настроек мерчанта.
В случае если URL были указаны при создания заказа, то они будут в приоретете вне зависимости от значений в настройках мерчанта.
Метод запроса: GET

INFO

Важно! Данный метод не предназначен для провередения операций. Т.е проводить зачисление средств по данному методу не безопасно.
Используйте данные из Webhook или API

Параметры запроса

Данные передаются в формате application/x-www-form-urlencoded, т.е в виде ключ-значение query1=value1&query2=value2

Имя поляТип поляОписание
invoice_idstring
format: uuid
required
ID операции в нашей системе
order_idstring
min: 1
max: 100
required
ID платежа в вашей системе
amountnumber
format: double
required
Сумма к оплате. (Если в сумме есть копейки, то отправляйте их с разделителем ".")
Пример: 10.28
currencystring
enum: [RUB, UAH, USD, EUR]
required
Валюта платежа
merchant_idstring
format: uuid
required
Идентификатор мерчанта
custom_fieldsobject
optional
Дополнительные параметры пользователя
Важно: При генерации подписи ключи объекта сортируются лексикографически (ksort), и в подписываемую строку добавляются только значения (не ключи).
Формат передачи в URL:
custom_fields[key1]=value1
signaturestring
format: hex
length: 64
required
Цифровая подпись запроса.
Алгоритм: HMAC-SHA256
Формирование подписи:
1. invoice_id
2. order_id
3. amount (как строка, значение не округлять)
4. currency
5. merchant_id
6. Если есть custom_fields: значения,
отсортированные по ключам
Разделитель: ":" (двоеточие)
Пример: `a1b2c3...f64`

Секретный ключ для подписи находится тут:
Настроить Webhook и секрет

Базовые примеры кода для проверки подлинности:

php
<?php
// Секретный ключ для проверки подлинности
$secret = 'example';

$sign_parts = [];

// Обязательные параметры в строгом порядке
$sign_parts[] = $_GET['invoice_id'];
$sign_parts[] = $_GET['order_id'];
$sign_parts[] = $_GET['amount'];
$sign_parts[] = $_GET['currency'];
$sign_parts[] = $_GET['merchant_id'];

// Обработка custom_fields
if(!empty($_GET['custom_fields']) && is_array($_GET['custom_fields'])) {
    $custom_fields = $_GET['custom_fields'];
    
    ksort($custom_fields);
    
    // Добавляем только значения
    foreach($custom_fields as $value) {
        if(is_string($value)) {
            $sign_parts[] = $value;
        }
    }
}

// Формируем строку для подписи
$sign_string = implode(':', $sign_parts);

// Генерируем подпись
$calculated_sign = hash_hmac('sha256', $sign_string, $secret);

// Получаем подпись из запроса
$received_sign = $_GET['signature'];

if(hash_equals($calculated_sign, $received_sign)) {
    echo 'Подпись верна';
} else {
    echo 'Подпись неверная';
}
?>