Интерфейс обработки платежей - Мерчант
Сервис Мерчант функционирует следующим образом:
- Продавец создает на своем сайте форму запроса платежа.
- На сайте продавца покупатель нажимает на кнопку подтверждения отправки формы и перенаправляется на адрес веб-сервиса Мерчант методом POST.
- Веб-сервис Мерчант создает в аккаунте пользователя системы счет на оплату и перенаправляет покупателя на страницу оплаты счета на сайте системы.
- В процессе оплаты сервис Мерчант отправляет уведомления о состояниях счета на обработчик по адресу <ResultURL>, при этом при получении уведомления типа verify обрабочик должен подтвердить или опровергнуть корретность счета, а при получении уведомлений типа pay или reject - выполнить операции по изменению состояния счета в своей системе учета. Список отправленных уведомлений можно увидеть нажав на номер счета на странице исходящих счетов.
- После оплаты покупатель перенаправляется на страницу сайта продавца, расположенную по адресу <SuccessURL>.
- Если в процессе оплаты произошла ошибка, либо покупатель отказался от совершения платежа, он перенаправляется на страницу сайта продавца, расположенную по адресу <FailURL>.
Технические документация
-
POST /Merchant/Pay
Форма запроса платежа - выставление счета пользователю системы
Эта форма передает запрос с веб-сайта продавца в интерфес Мерчант через веб-браузер пользователя.Параметры
- Api (Int32): Идентификатор API-интерфейса.
- Timestamp (String): Время формирования запроса по UTC в формате YYYY-MM-dd HH:mm:ss.
- Sig (String): Подпись запроса, образованная путем вычисления MD5-хэша от результата склеивания через два двоеточия параметров Api, Timestamp, Key и остальных, отсортированных в алфавитном порядке обязательных параметров.
- InvId (Int32): Уникальный номер счета в системе учета вашей платформы.
- Payer (Int32): Идентификатор аккаунта пользователя системы, которому выставляется счет.
- Payee (Int32): Идентификатор аккаунта получателя платежа (ID владельца API интерфейса).
- Currency (BalanceCurrency): Валюта, в которой выставляется счет (Credits).
- Amount (Decimal): Cумма оплаты, не более 2-х цифр после точки, не менее 0.01.
- Note (String): Описание товара или услуги, за которую выставляется счет.
- ExpirationTimeout (Int32): Время действительности счета в секундах: минимум 300 (5 минут) максимум 2592000 (30 дней). После истечения срока пользователь не сможет оплатить счет.
- UserData[DataKey] (String): Дополнительные параметры, определяемые создателем счета, которые будут переданы скрипту обработки уведомлений в процессе уведомления об обработке счета. Если дополнительный параметры присутствуют, то они входят в подпись запроса в виде значений параметров в порядке, отсортированном по ключу DataKey.
Если после оплаты счета требуется отправить пользователя на адреса, отличные от тех, которые указаны в настройках API, адреса страниц возврата для успешного и неуспешного платежей можно передать в параметрах UserData[SuccessUrl] и UserData[FailUrl] соответственно.Формирование подписи
md5(Api::Timestamp::Key::Amount::Currency::ExpirationTimeout::InvId::Note::Payee::Payer)
При наличии дополнительных параметров, например, UserData[SuccessUrl] и UserData[FailUrl]:md5(Api::Timestamp::Key::Amount::Currency::ExpirationTimeout::InvId::Note::Payee::Payer::UserData[FailUrl]::UserData[SuccessUrl])
Пример формы запроса платежа
<form action="http://api.webisida.com/Merchant/Pay" method="POST"> <input type="hidden" name="Api" value="0"/> <input type="hidden" name="Timestamp" value="2011-05-25 12:34:56"/> <input type="hidden" name="InvId" value="1"/> <input type="hidden" name="Payee" value="0"/> <input type="hidden" name="Payer" value="1"/> <input type="hidden" name="Amount" value="100"/> <input type="hidden" name="Currency" value="Credits"/> <input type="hidden" name="ExpirationTimeout" value="900"/> <input type="hidden" name="Note" value="Счет за услугу"/> <input type="hidden" name="Sig" value="8c629fcbdd886a340bef01e8fc92273b"/> <input type="submit" value="Перейти к оплате счета"/> </form>
-
POST <ResultURL>
Форма уведомления об обработке платежа
По мере обработки счета система будет уведомлять вашу платформу о состоянии счета. Уведомления отправляются на обработчик по адресу <ResultURL> (задается в настройках API). При попытке оплаты счета обработчик сначала получит уведомление типа verify. После успешного получения положительного ответа от вашего обработчика и списания средств, отправляется уведомление типа pay. При любой ошибке или отклонении счета отправляется уведомление типа reject.
В случае, если после положительного ответа и оплаты счета ваш обработчик станет не доступен, уведомление pay может быть отправлено до 5 раз.Параметры, передаваемые обработчику
- api (Int32): Идентификатор API-интерфейса.
- timestamp (String): Время формирования запроса по UTC в формате YYYY-MM-dd HH:mm:ss.
- sig (String): Подпись запроса, образованная путем вычисления MD5-хэша от результата склеивания через два двоеточия параметров Api, Timestamp, Key и остальных, отсортированных в алфавитном порядке обязательных параметров.
- method (String): Тип уведомления: verify - проверка действительности счета, pay - уведомление об оплате, reject - уведомление об отклонении счета.
- invId (Int32): Уникальный номер счета в системе учета вашей платформы.
- payer (Int32): Идентификатор аккаунта пользователя системы, которому выставляется счет.
- payee (Int32): Идентификатор аккаунта получателя платежа (ID владельца API интерфейса).
- currency (String): Валюта, в которой выставляется счет (Credits).
- amount (Decimal): Сумма платежа, не более 2-х цифр после точки, не менее 0.01.
- note (String): Описание товара или услуги, за которую выставляется счет.
- payeeTransactionId (Int32): Идентификатор транзакции, в результате которой произошло зачисление средств. Очень важно!!! При получении повторных уведомлений методом pay с одним и тем же payeeTransactionId необходимо вернуть результат выполнения предыдущего запроса, ничего не отправляя повторно пользователю, оплатившему счет.
- userData[DataKey] (String): Дополнительные параметры, переданные форме создания платежа.
Формирование подписи
Подпись уведомлений формируется с помощью ключа для подписи уведомлений, заданного в настройках мерчанта.md5(api::timestamp::Key::amount::currency::invId::method::note::payee::payeeTransactionId::payer)
При наличии дополнительных параметров, например, UserData[SuccessUrl] и UserData[FailUrl]:md5(api::timestamp::Key::amount::currency::invId::method::note::payee::payeeTransactionId::payer::userData[FailUrl]::userData[SuccessUrl])
Ответы для уведомлений
Ответы на уведомления ожидаются в формате JSON (application/json) в кодировке UTF-8, длиной до 1000 символов. В случае прихода отрицательного ответа текст из поля message может быть показан пользователю, а код ошибки будет отправлен на страницу неуспешного платежа вашей платформы. Код ошибки должен быть отрицательным чилом. Рекомендуется использовать числа в пределах -32000 to -32099.{"result": {"message": "Запрос успешно обработан"}}
{"error": {"code": -32000, "message": "Товар закончился."}}
-
GET <SuccessURL>
Форма выполненного платежа
После выполения успешной оплаты пользователь будет перенаправлен на страницу вашего сайта по адресу <SuccessURL> (задается в настройках API).Параметры, передаваемые обработчику
- invId (Int32): Уникальный номер счета в системе учета вашей платформы.
- amount (Decimal): Сумма платежа, не более 2-х цифр после точки, не менее 0.01.
Данный запрос не подписывается. Не следует использовать этот запрос для изменения состояния счета в вашей системе учета. -
GET <FailURL>
Форма невыполненного платежа
После отклонения счета пользователь будет перенаправлен на страницу вашего сайта по адресу <FailURL> (задается в настройках API).Параметры, передаваемые обработчику
- invId (Int32): Уникальный номер счета в системе учета вашей платформы.
- amount (Decimal): Сумма платежа, не более 2-х цифр после точки, не менее 0.01.
- errcode (String): Код ошибки.
- 0 (None) - нет ошибки.
- 1 (Reject) - счет отклонен.
- 2 (Generic) - неизвестная ошибка.
- 3 (InactiveApi) - мерчант не активен.
- 4 (InvalidTimestamp) - недопустимое время формирования запроса (Timestamp).
- 5 (InvalidSignature) - неверная подпись.
- 6 (DuplicateInvId) - счет с таким же ID уже создан.
- 7 (InvalidPayee) - пользователь (продавец) не существует.
- 8 (InvalidPayer) - пользователь не существует.
- 9 (InvalidAmount) - недопустимая сумма платежа.
- 10 (InvalidCurrency) - недопустимая валюта счета.
- 11 (InvalidExpiration) - недопустимое время жизни счета.
- 12 (TooLongNote) - описание счета длиннее 1000 символов.
- 13 (Expired) - счет просрочен.
- любой другой положительный код - ошибка (коды зарезервированы для бущих изменений).
- любой другой отрицательный код - ошибка (код получен от вашего обработчика).
Данный запрос не подписывается. Не следует использовать этот запрос для изменения состояния счета в вашей системе учета.