Описание интерфейса сервиса Idram

advertisement
Описание интерфейса сервиса Idram Merchant Interface
Данный документ описывает схему взaимодействия магазина с системой Idram Merchant
Interface.
Для любого магазина, работающего через систему Idram, устанавливаются 3 адреса(URL) ,
один секретный ключ и один email адрес.





SUCCESS_URL
FAIL_URL
RESULT_URL
SECRET_KEY
EMAIL
На данный момент эти 4 параметра устанавливаются техническим персоналом платежной
системы Idram, при заключении договора с владельцем магазина.
URL скрипта или html страницы, на которую нужно
SUCCESS_URL перенаправить пользователя в том случае если
операция успешна завершена
URL скрипта или html страницы, на которую нужно
перенаправить пользователя в том случае если не
FAIL_URL
удалось произвести операцию
RESULT_URL URL скрипта-оброботчика запросов системы Idram.
Секретный ключ, известный только магазину
SECRET_KEY
продавца и системе Idram
Email адрес, на который будет высылаться
подверждение платежа, в том случае если не получен
EMAIL
ответ "OK" от магазина во время процедуры
подтверждения факта оплаты
Магазин должен сгенерировать html форму, содержащую следующие hidden поля :
Поле
Описание
(RU,EN,AM)
EDP_LANGUAGE
В этом поле продавец выбирает язык
интерфейса Idram.
IdramID продавца, на который покупатель
EDP_REC_ACCOUNT
должен совершить платеж.
Описание товара или услуги. Формируется
продавцом.
EDP_DESCRIPTION
Если присутствует, добавляется в назначение
платежа в операцию перевода Idram.
Сумма платежа, которую продавец желает
получить от покупателя. Сумма должна быть
EDP_AMOUNT
больше нуля, дробная часть отделяется
точкой.
EDP_BILL_NO
EDP_EMAIL
Дополнительные
параметры продавца
В этом поле продавец задает номер покупки
в соответствии со своей системой учета.
Email адрес, на который будет высылаться
подверждение платежа, в том случае если не
получен ответ "OK" от магазина во время
процедуры подтверждения факта оплаты.
Если присутствует, переопределяет значение
EMAIL для данной операции.
Все поля формы, не имеющие в названии
префикса "EDP_", обрабатываются
сервисом Idram автоматически и передаются
на веб-сайт продавца после выполнения
платежа.
Форма должна отправлять запрос на URL https://money.idram.am/payment.aspx (параметр
action) используя метод POST. Интерфейс Idram использует кодировку utf-8. Это означает,
что поле EDP_DESCRIPTION должно содержать текст в кодировке utf-8. Если магазин
продавца использует кодировку win1251, то нужно направлять форму на URL
https://money.idram.am/1251/payment.aspx. Ниже приведен пример html формы запроса
платежа.
<form action="https://money.idram.am/payment.aspx" method="POST">
<input type="hidden" name="EDP_LANGUAGE" value="RU">
<input type="hidden" name="EDP_REC_ACCOUNT" value="100000114">
<input type="hidden" name="EDP_DESCRIPTION" value="Описание товара">
<input type="hidden" name="EDP_AMOUNT" value="1900">
<input type="hidden" name="EDP_BILL_NO" value="1806">
<input type="submit" value="submit">
</form>
После того, как пользователь нажимает на кнопку "Submit", он перенаправляется на страницу
платежной системы Idram и проходит аутентификацию. После этого система Idram дважды
направляет запрос по указанному URL (RESULT_URL, см. выше), в первый раз (а) для
подтверждения подлинности заказа, во второй раз (б) для подтверждения факта оплаты.
(а) Подтверждение подлинности заказа(предварительный запрос)
До того, как перечислить средства со IdramID покупателя на IdramID продaвца, система Idram
Merchant Interface инициирует http запрос на URL RESULT_URL(см. выше). Этот запрос
проверяет подлинность представленного к оплате счета. Эта форма передает продавцу
параметры выполняемого платежа непосредственно перед его выполнением. Она имеет
следующие поля:
значение - "YES". Этот параметр указывает,
EDP_PRECHECK
что запрос предварительный
В этом поле передается номер покупки в
соответствии с системой учета продавца,
EDP_BILL_NO
полученный сервисом с веб-сайта продавца.
IdramID продавца(в системе Idram), на который
EDP_REC_ACCOUNT
покупатель совершил платеж
Сумма, которую должен заплатить покупатель.
Дробная часть отделяется точкой.
Магазин должен проверить все полученные данные, и в случае если данные соответстуют
действительности(т.е. такой заказ действительно имел место) отправить сообщение "OK" (без
html!). Если система не получит "OK", Idram не позволит покупателю уплатить
счет, т.е. деньги перечислены не будут, и система перенаправит покупателя на URL
FAIL_URL.
EDP_AMOUNT
(б)Подтверждения факта оплаты
Этот http запрос передает продавцу реквизиты выполненного платежа в момент его
совершения. Она имеет следующие поля:
В этом поле передается номер покупки в
соответствии с системой учета продавца,
EDP_BILL_NO
полученный сервисом с веб-сайта продавца.
IdramID продавца(в системе Idram), на
EDP_REC_ACCOUNT
который покупатель совершил платеж
IdramID покупателя(в системе Idram), с
EDP_PAYER_ACCOUNT
которого был произведен платеж
EDP_AMOUNT
Сумма, которую заплатил покупатель.
Дробная часть отделяется точкой.
(format-0.00)
Номер операции выполненого платежа в
EDP_TRANS_ID
системе Idram. Является уникальным в
системе Idram.
format - char(14)
EDP_TRANS_DATE
Дата операции выполненого платежа.
format -dd/mm/yyyy
Контрольная подпись оповещения о
выполнении платежа, которая используется
для проверки целостности полученной
EDP_CHECKSUM
информации и однозначной идентификации
отправителя.(подробное описание см. ниже)
EDP_CHECKSUM : Контрольная подпись данных о платеже позволяет продавцу проверять
как источник данных, так и целостность данных, переданных на RESULT_URL через запрос
"Подтверждения факта оплаты".
При формировании контрольной подписи сервис Idram Merchant Interface "склеивает"
значения следующих полей :







EDP_REC_ACCOUNT
EDP_AMOUNT
SECRET_KEY
EDP_BILL_NO
EDP_PAYER_ACCOUNT
EDP_TRANS_ID
EDP_TRANS_DATE
В качестве разделителя берется знак двоеточия(":").
Далее берется md5 от сформировавшейся строки, и полученное значение приписывается
параметру EDP_CHECKSUM. Магазин должен произвести те же действия для того чтобы
проверить источник и целостность данных.
Ниже приводиться пример php скрипта, который обеспечивает работу RESULT_URL:
<?php
define("SECRET_KEY", "FakeKey"); // Idram Payment System provide it
define("EDP_REC_ACCOUNT", "FakeID");
// Idram Payment System provide it
if(isset($_REQUEST['EDP_PRECHECK']) && isset($_REQUEST['EDP_BILL_NO']) &&
isset($_REQUEST['EDP_REC_ACCOUNT']) && isset($_REQUEST['EDP_AMOUNT']))
{
if($_REQUEST['EDP_PRECHECK'] == "YES")
{
if($_REQUEST['EDP_REC_ACCOUNT'] == EDP_REC_ACCOUNT)
{
$bill_no = $_REQUEST['EDP_BILL_NO'];
// check if $bill_no exists in your system orders if
exists then echo OK otherwise nothing
echo("OK");
}
}
}
if(isset($_REQUEST['EDP_PAYER_ACCOUNT']) && isset($_REQUEST['EDP_BILL_NO']) &&
isset($_REQUEST['EDP_REC_ACCOUNT']) && isset($_REQUEST['EDP_AMOUNT'])
&& isset($_REQUEST['EDP_TRANS_ID']) && isset($_REQUEST['EDP_CHECKSUM']))
{
$txtToHash =
EDP_REC_ACCOUNT . ":" .
$_REQUEST['EDP_AMOUNT'] . ":" .
SECRET_KEY . ":" .
$_REQUEST['EDP_BILL_NO'] . ":" .
$_REQUEST['EDP_PAYER_ACCOUNT'] . ":" .
$_REQUEST['EDP_TRANS_ID'] . ":" .
$_REQUEST['EDP_TRANS_DATE'];
if(strtoupper($_REQUEST['EDP_CHECKSUM']) != strtoupper(md5($txtToHash)))
{
// code to handling payment fail
}
else
{
// code to handling payment success
echo("OK");
}
}
Download