invoice
endpoint
https://sci.any.money/invoice.
Модуль invoice предназначен для обработки операций пополнения балансов
мерчанта клиентами. Им выставляется сгенерированный счет,
который они могут оплатить двумя путями:
- в валюте счета полностью;
- произвольными частями, в различных валютах, с конвертацией в валюту
зачисления баланса мерчанта.
Клиенты могут вернуть сумму переплаты или недостаточный для оплаты счета
базовый платеж, если не планируют производить доплату.
Пополнение баланса мерчанта производится системой только после
поступлении суммы равной или превышающей ту, что передана в
выставленном счете.
Комиссия за базовый платеж взимается с мерчанта, но операционные расходы
по доплатам или возвращению средств несут уже клиенты-плательщики.
Форма запроса содержит следующие параметры:
Внимание!
Для типизированных мерчантов передаваемая платежная система должна совпадать с типом мерчанта, иначе метод возвратит ошибку
Внимание!
Обратите внимание, что для булевского параметра is_multipay значения передаются именно в строчном (!) формате, строчными буквами. И передача значения "true" равнозначна True, а "false" - False.
Входящие параметры метода создания ордера invoice
| param | required | example | description |
|---|---|---|---|
| amount | yes | "1000,25" | сумма invoice-платежа |
| callback_url | no | "https://callback_example.com" | url-адрес для сервер-серверных сообщений про изменения состояния ордера. Формат сообщений |
| client_email | no | "[email protected]" | email-адрес плательщика для уведомлений об изменении состояния invoice-платежа |
| externalid | yes | "123" | уникальный идентификатор, заданный мерчантом |
| in_curr | yes | "UAH" | валюта пополнения |
| is_multipay | no | "false" | флаг, обеспечивающий возможность совершения доплаты и получения возврата ("true" = доплата и возврат возможны, "false" = блокированы). default="false" |
| lifetime | no | "1d12h" | "время жизни" ордера, в секундах или в формате timedelta (строка формата "1w1d1h1m1s1ms"). Допустимый диапазон значений: "7d".."3600s". default="7d" |
| merchant | yes | "13" | строчное отображение локального идентификатора мерчанта в системе |
| merchant_payfee | no | "0,35" | доля общей суммы комиссии за поступления, которую оплачивает мерчант (значение в интервале [0..1] c точностью до двух знаков после запятой) |
| out_curr | no | "USD" | опциональная валюта зачисления invoice-платежа |
| payway | no | "card" | платежная система, через которую проводится пополнение (возможные варианты: "btc", "perfect", "qiwi"... и т.д.). Для мерчанта, имеющего привязку к ПС, доступна только ПС привязки |
| redirect_url | no | "https://example.com/order_page/" | url-адрес для перенаправления пользователя по завершению работы или нажатия им кнопки "Назад" |
| sign | yes | 128-знаковая цифро-буквенная последовательность | уникальная хеш-подпись SCI-запроса |
Для параметра lifetime по умолчанию применяется значение "7d".
Если в запросе не указано значение payway, то пользователю будут доступны все активированные в настройках мерчанта
методы оплаты.
Значения отрезков времени в формате timedelta передаются в парах: <значение><ключ><значение><ключ>…<значение><ключ>
без пробелов между парами.
Возможна передача только секунд в виде значения без ключа. Но, если в строке формата
timedelta применён хоть один ключ, то она обязана завершаться ключом, а не цифрой, иначе будет возвращена ошибка.
В случае возникновения ошибки пользователь будет перенаправлен на страницу информации о ней.
web form
<form name="payment" method="post" action="https://sci.any.money/invoice" accept-charset="UTF-8">
<input type="hidden" name="sign" value=""/>
<input type="hidden" name="merchant" value=""/>
<input type="hidden" name="amount" value="100.25"/>
<input type="hidden" name="in_curr" value="UAH"/>
<input type="hidden" name="payway" value="card"/>
<input type="hidden" name="externalid" value="123"/>
<input type="hidden" name="expiry" value="600"/>
<input type="hidden" name="client_email" value="[email protected]"/>
<input type="hidden" name="callback_url" value="https://example.com/order_handler"/>
<input type="hidden" name="redirect_url" value="https://example.com/order_page/"/>
<input type="submit" value="Pay">
</form>
signnature
Каждый SCI-запрос, направляемый в модуль invoice, заверяется подписью, которая формируется по алгоритму
HEX(HMAC-SHA512(data, sci_key)), где:
- data - строка, составленная из значений параметров.
Они добавляются в запрос в порядке следования ключей, отсортированных по
алфавиту;
- sci_key - invoice-ключ мерчанта.
Пример формирования подписи
import hashlib
import hmac
def sign_form_data(key: str, data: dict) -> str:
if data: sorted_data = sorted(data.items())
else: sorted_data = {}
msg = ''.join(
str(v) for k, v in sorted_data
if not isinstance(v, (dict, list, type(None)))
)
msg = msg.lower()
return hmac.new(key.encode(), msg.encode(), hashlib.sha512).hexdigest()
<?php
function sign_form_data(string $key, array $data) : string {
ksort($data);
$s = '';
foreach($data as $k=>$value) {
if (in_array(gettype($value), array('array', 'object', 'NULL')) ){
continue;
}
if(is_bool($value)){
$s .= $value ? "true" : "false";
} else {
$s .= $value;
}
}
return hash_hmac('sha512', strtolower($s), $key);
}
?>