Проект ориентирован на хранение и поиск узкоспециализированных данных, которые редко индексируются поисковыми системами

Robokassa, описание интерфейсов

Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ROBOKASSA

(Описание интерфейсов)

Общее описание

Интерфейсы сервиса ROBOKASSA предоставляют возможность получения Клиентом сервиса (магазином) средств от Покупателя в предпочитаемой им электронной валюте в заданном им количестве (объеме).

Покупатель выбирает в он-лайн магазине Клиента товар, магазин подсчитывает сумму Заказа в предпочитаемой Продавцом валюте и посылает запрос к серверу, на котором расположен сервис ROBOKASSA. Система возвращает серверу Клиента html код формы выбора валюты оплаты или кнопки оплаты, который используется на странице его сайта.

Покупатель выбирает на сайте Клиента или на странице Сервиса ROBOKASSA валюту платежа и приступает к платежу, нажав на кнопку оплаты. Сразу после оплаты Заказа Покупателем в выбранной им валюте производится конвертация полученных средств в валюту, предпочитаемую Продавцом и исходящий платеж в этой валюте на его счет в соответствующей платежной системе, указанный при регистрации.

После завершения операции в зависимости от ее исхода Покупатель перенаправляется на страницу исполненного платежа (в случае если он осуществил оплату), либо на страницу неисполненного (если он отказался от оплаты).

Сервис ROBOKASSA построен таким образом, что, в отличие от случая «подключения» непосредственно к серверу платежной системы, отпадает необходимость в усиленной защите данных в процессе обмена. Для интеграции кассы в сайт магазина, он-лайн казино или сайт предоставляющий платный доступ к контенту нет необходимости в установлении исходящих SSL соединений, подключении дополнительных компонент на сервере Клиента и т. п.. В этом заключено главное преимущество применения системы ROBOKASSA.

НЕ нашли? Не то? Что вы ищете?

Номер счета Клиента (магазина) на который будет поступать оплата товаров и/или услуг Продавца защищен от изменения, он задается только один раз – в момент регистрации Продавца в Сервисе. Это позволяет избежать одновременно и краж выручки посторонними лицами и любых злоупотреблений с денежными средствами со стороны обслуживающего персонала магазина.

Нежелательна возможность самостоятельной инициализации процедуры оплаты (путем ввода url с параметрами), иначе говоря, прежде чем пользователь станет оплачивать товар магазин должен сформировать у себя запись о начале процедуры оплаты (Заказ), определить требуемую сумму и отправить пользователя на оплату именно этого Заказа, с конкретной суммой. Реализовано это путем формирования MD5-контрольной суммы (подписи) параметров счета, и добавления подписи в URL системы, куда перенаправляется Покупатель для оплаты заказа. Подпись формируется по параметрам счета и паролю №1 магазина (устанавливается в интерфейсе администрирования).

Продавец может узнать у системы ROBOKASSA состояние операции оплаты, а также действующие в системе курсы обмена. Для этого используются XML интерфейсы, описанные в соответствующем разделе данного документа.

После оплаты обменный пункт отправляет сообщение магазину путем вызова ResultURL и передачей ему методом GET/POST/email параметров совершенного платежа, а также подписи, сформированной по параметрам оплаченного Заказа и паролю №2 магазина.

Запросы к XML-интерфейсам, информирующим о состоянии обменной операции, производятся с указанием контрольной суммы, сформированной по параметрам запроса + пароль2 магазина.

Примечание: Если не оговорено конкретно, понятия входяший/исходящий подразумеваются относительно системы ROBOKASSA.

Состав системы ROBOKASSA

Регистрационные данные Продавца

Online регистрация

Продавец (владелец магазина или сервиса) должен указать логин (далее sMerchantLogin), пароль для входа в Личный кабинет и внести в форму он-лайн регистрации следующие данные:

язык общения с администратором магазина;

-  наименование магазина;

-  URL сайта магазина (url главной страницы сайта)

-  e-mail адрес технического администратора магазина для связи;

-  пароль 1 (используется интерфейсом инициализации оплаты);

-  пароль 2 (используется интерфейсом оповещения о платеже, XML-интерфейсах);

-  Result URL (используется интерфейсом оповещения о платеже);

-  POST/GET/email метод отсылки данных в Result URL;

-  Success URL (используется в случае успешного проведения платежа);

-  POST/GET метод отсылки данных в Success URL;

-  Fail URL (используется в случае отказа проведения платежа);

-  POST/GET метод отсылки данных в Fail URL;

-  валюту, которую желает получать;

-  аккаунт в выбранной валюте, на который будут перечисляться средства.

Изменение регистрационной информации

После активации мерчанта изменение любых данных будет невозможно.

Интерфейс оплаты

Код встраиваемой кассы со списком возможных валют оплаты

При использовании как источник JScript-кода в HTML-тексте выводит окошко кассы с выбором сумм в различных валютах.

URL: http://merchant. roboxchange. local/Handler/MrchSumPreview. ashx

Параметры запроса (метод GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Culture=sCulture&

Encoding=sEncoding

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Если параметр не указан (пустая строка), то пользователю предоставляется возможность ввести сумму самостоятельно. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValueконтрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

sEncoding – кодировка, в которой возвращается HTML-код кассы. По умолчанию: windows-1251.

2. Инициализация оплаты

Магазин отправляет пользователя по данному адресу для произведения им оплаты. Предварительно магазин должен у себя запомнить счет (номер, сумма, дата формирования).

URL: https://merchant. /Index. aspx

Параметры запроса (метод POST либо GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Email=sEmail&

Culture=sCulture

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sEmail – опционально, e-mail пользователя. Пользователь может изменить его в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

Покупательатель отправляется на сайт оплату ROBOKASSA, после чего платеж в выбранной Продавцом валюте перечисляется (поступает) на его счет в выбранной им платежной системе. Промежуток времени между «началом операции» - «получением оплаты системой ROBOKASSA» ограничено одним часом, время завершения операции не ограничено. После оплаты сам Покупатель не заинтересован в затормаживании операции (ожидание завершения операции вполне можно прекратить через сутки).

3. Оповещение об оплате (ResultURL)

В случае успешного проведения оплаты робот системы проводит запрос по Result URL, с указанием следующих параметров (методом, выбранным в настройках):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue

[&пользовательские_параметры]

nOutSum – полученная магазином сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 - (устанавливается через интерфейс администрирования) т. е.

nOutSum:nInvId:sMerchantPass2[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy, то подпись формируется из строки

...:sMerchantPass2:shpa=yyy:shpb=xxx

Скрипт, находящийся по Result URL должен проверить правильность контрольной суммы и соответствия суммы платежа ожидаемой сумме. При формировании строки подписи учтите формат представления суммы (в строку при проверке подписи вставляйте именно полученное значение, без какого-либо форматирования).

Данный запрос производится после получения денег.

Факт успешности сообщения магазину об исполнении операции определяется по результату, возвращаемому обменному пункту. Результат должен содержать “OKnInvId”, т. е. для счета #5 должен быть возвращен текст “OK5”.

В случае невозможности связаться со скриптом по адресу Result URL (связь прерывается по time-out-у либо по отсутствию DNS-записи, либо получен не ожидаемый ответ) на email-адрес администратора магазина отправляется письмо и запрос Result URL считается завершенным успешно. В случае системаческого отсутствия связи между серверами магазина и обменного пункта лучше использовать метод определения оплаты с применением интерфейсов XML, а самый желательный и защищенный способ - совмещенный.

4. Переадресация пользователя при успешной оплате (SuccessURL)

В случае успешного исполнения платежа Покупатель может перейти по данному адресу.

Методом, выбранным при регистрации будет передан следующих параметр («чек» об оплате):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 (указывается при регистрации) т. е.

nOutSum:nInvID:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy то подпись формируется из строки

…:sMerchantPass1:shpa=yyy:shpb=xxx

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение по email-адресу, установленному в качестве Success URL через интерфейс администрирования.

Переход пользователя по данному адресу с корректными параметрами (соответствия CRC) означает, что платеж по реквизитам Продавца выполнен успешно. Сервис несет финансовую ответственность перед Продавцом в соответствии с Соглашением за достоверность такого подтверждения.

Однако для дополнительной защиты желательно, чтобы факт оплаты платежа проверялся скриптом исполняемым при переходе на Result URL, или путем запроса XML-интерфейса о результате данной платежной операции, и только при реальном наличии счета с номером nInvId в БД магазина.

5. Переадресация пользователя при отказе от оплаты (FailURL)

В случае отказа от исполнения платежа Покупатель перенаправляется по данному адресу.

Для того, чтобы Продавец мог разблокировать заказанный товар на складе при отказе от его оплаты методом, выбранным при регистрации, будет переданы параметры:

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение об отказе Покупателя от оплаты Заказа по email-адресу, находящемуся в Fail URL.

Переход пользователя по данному адресу вообще говоря не означает окончательного отказа Покупателя от оплаты, нажав кнопку «Back» в броузере он может вернуться на страницы ROBOKASSA. Поэтому в случае блокировки товара на складе под заказ для его разблокировки желательно проверять факт отказа от платежа запросом запроса XML-интерфейса о результате данной платежной операции используя в запросе номер счета nInvId имеющийся в БД магазина (Продавца).

XML интерфейсы

1. Список валют обменного пункта.

По данному запросу Сервисом предоставляется полный список наименований электронных валют

URL: http://merchant. /Handler/Xml/CurrList. ashx

Параметров нет.

Ответ:

<robox. currlist. resp>

<item>

<curr>sCurrLabel</curr>

<curr_name>sCurrName</curr_name>

</item>

</robox. currlist. resp>

Тегов <item> может быть несколько, каждый из них описывает 1 валюту.

sCurrLabel – метка входящей валюты

sCurrName – имя входящей валюты (это наименование можно показывать пользователю).

2. Получение списка курсов обмена

URL: http://merchant. /Handler/Xml/Rate. ashx

Параметры запроса (метод POST):

<robox. rate. req>

<in_curr>sIncCurrLabel</in_curr>

<out_curr>sOutCurrLabel</out_curr>

<merchant_login>sMerchantLogin</merchant_login>

<out_cnt>nOutCount</out_cnt>

</robox. rate. req>

sIncCurrLabel – метка входящей валюты, если не указана будут возвращены курсы по всем возможным валютам

sOutCurrLabel – метка исходящей валюты

sMerchantLogin – login магазина в обменном пункте

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков. По умолчанию принимается 1.

Исходящая валюта определяется либо по параметру sOutCurrLabel, либо по sMerchantLogin-у (в качестве исходящей берется валюта, выбранная при регистрации). sMerchantLogin имеет приоритет

Ответ:

<robox. rate. resp>

<retval>nRetCode</retval>

<out_curr>sOutCurrLabelr</out_curr>

<out_cnt>nOutCount</out_cnt>

<date>sDateODBC120</date>

<ratelist>

<rate>

<in_curr>sIncCurrLabelr</in_curr>

<in_curr_name>sIncCurrName</in_curr_name>

<value>nValuet</value>

<ins_per_Xout>nInCount</ins_per_Xout>

</rate>

...

</ratelist>

</robox. rate. resp>

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

0 - нет ошибки.

1 - sIncCurrLabel задан неверно

2 - sOutCurrLabel задан неверно

3 - sMerchantLogin не найден

4 - nOutCnt задан неверно

sOutCurrLabel – метка исходящей валюты

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков

sDateODBC120 – дата, на которую возвращено состояние курсов. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”), GMT.

Тегов <rate> может быть несколько (особенно если в запросе не указан <in_curr>), каждый из них описывает 1 курс.

sIncCurrLabel – метка входящей валюты

sIncCurrName – имя входящей валюты (это наименование можно показывать пользователю).

nValue – количество денежных знаков входящей валюты, приходящиеся на 1 денежный знак исходящей валюты (sOutCurr), без округлений до элементарных единиц входящей валюты.

nInCount – количество денежных знаков входящей валюты, которые пользователь должен оплатить для получения магазином nOutCount - денежных знаков исходящей валюты (sOutCurrLabel). Округлено до элементарных единиц входящей валюты.

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

3. Интерфейс получения состояния операций

URL: https://merchant. /Handler/Xml/OpState. ashx

Параметры запроса (метод POST):

<robox. opstate. req>

<merchant_login>sMerchantLogin</merchant_login>

<merchant_invid>sInvId</merchant_invid>

<crc>sSignatureValue</crc>

</robox. opstate. req>

sMerchantLogin – login магазина в обменном пункте

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 16-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 (указывается при регистрации) т. е.

sMerchantLogin:nInvId:sMerchantPass2

Ответ:

<robox. opstate. resp>

<retval>nRetCode</retval>

<date>sDateODBC120</date>

<out_curr>sOutCurrLabel</out_curr>

<opstate>

<out_cnt>nOutCount</out_cnt>

<state>nState</state>

</opstate>

</robox. opstate. resp>

sDateODBC120 – дата, на которую возвращено состояние операции. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”).

sOutCurrLabel – метка исходящей валюты

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

-9 - sSignatureValue не указана, либо неверного вида (длина должна быть 32

символа)

-2 - sInvId не задан либо не является числом

0 - нет ошибки. При этом присутствует тег <opstate>.

1 - указанный sMerchantLogin не найден

9 - неверно задана контрольная сумма

10 - операция с данным sInvId не найдена (возможно еще не инициирована)

nOutCount – количество денежных знаков исходящей валюты данной операции

nState - состояние операции :

5 - только инициирована, деньги не получены

10 - деньги не были получены, операция отменена

50 - деньги от пользователя получены, производится зачисление денег на счет магазина

60 - деньги после получения были возвращены пользователю

80 - исполнение операции приостановлено

100 - операция завершена успешно

Необходимо помнить, что операция инициируется не в момент ухода пользователя на оплату, а позже - после подтверждения его платежных реквизитов, т. е. вы вполне можете не находить операцию, которая по вашему мнению уже должна начаться.

Описание методов построения магазинов

Простейший магазин без формирования уникального номера счета.

Поскольку ваш сайт не может как-либо контролировать процесс, вам скорее всего придется самостоятельно отправлять товар.

Основная схема работы магазина:

·  сформировав подпись вы направляете пользователя на оплату, используя JScript-код кассы, в результате чего на странице появляется касса с выбором валюты оплаты, либо ссылку на оплату.

·  пользователь, выбрав валюту, и нажав кнопку "оплатить" попадает на страницы ROBOKASSA, и производит оплату (на кошелек магазина при этом поступают средства в вашей валюте).

·  по окончании процесса на email-адрес оператора магазина посылается сообщение о произведенной операции, а пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL. Вашему SuccessURL скрипту передаются те же параметры, что и при инициализации оплаты.

На этой странице вы можете расположить текст вида "В ближайшее время оператор отошлет вам купленный товар".
Либо можете расположить сам товар, в случае, если ваш скрипт получает переданные ему параметры и проверяет правильность подписи. В противном случае пользователь может самостоятельно, без оплаты, перейти на этот URL.

Для формирования/проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект

Если вы имеете в магазине несколько товаров либо несколько товаров с одинаковой ценой, то для их идентификации используйте пользовательские параметры - параметры магазина, начинающиеся с префикса 'shp'. Пользовательские параметры передаются наряду с другими в момент инициализации оплаты и должны быть учтены при формировании подписи.

При регистрации :

·  «ResultURL» - email-адрес оператора магазина, метод отправки данных - email,

·  «SuccessURL» - адрес страницы с товаром, куда отправится пользователь после оплаты, метод отправки данных не имеет значения

·  «FailURL» - адрес вашего магазина, метод отправки данных не имеет значения

Магазин, формирующий уникальный номера счета, но без формирования запросов

Схема работы магазина следующая:

·  скрипт магазина направляет пользователя на оплату, используя JScript-код кассы, либо URL калькулятора, при этом он может запретить произвольную инициализацию оплаты, закрыв данный URL подписью.

·  после оплаты, ROBOKASSA уведомляет магазин о том, что платеж совершен, вызывая скрипт, находящийся по адресу ResultURL - скрипту передаются параметры платежа, подписанные ROBOKASSA с использованием пароля#2. Скрипт, указанному заказу устанавливает в БД магазина состояние «оплачено». Если в момент оповещение между ROBOKASSA и магазином отсутствует связь - администратору магазина отправляется email-сообщение.

·  После оплаты, и после сообщения магазину, пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL - скрипту передаются те же параметры, но подписанные с использованием пароля#1. Скрипт анализирует данные, сверяет их с данными, ранее полученными скриптом ResultURL (однако, магазин может вовсе и не использовать скрипт ResultURL, полагаясь только на данные SuccessURL) и выдает товар.

Для формирования / проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект.

Вы можете вовсе не формировать сверять подпись, если считаете это уместным уровнем безопасности. В таком случае скрипт ResultURL должен сверять корректность данных только по ip-адресу, и URL скрипта ResultURL не должен быть известем третьим лицам. SuccessURL при этом должен лишь брать состояние заказа, устанавливаемое скриптом ResultURL и в случае состояние «оплачено» выдавать товар.

Магазин с применением всех интерфейсов

В случае если конфигурация вашего сервера позволяет производить исходящие http и https запросы на сервер ROBOKASSA, то вы можете дополнительно усложнить ваш магазин, используя XML-интерфейсы.

Они позволяют предварительно считывать курсы обмена ROBOKASSA, список принимаемых валют. Что значительно расширяет ваши возможности по построению удобного пользовательского интерфейса вашего сайта.

Также вы можете в любой момент времени проверить состояние оплаты вашего заказа - большая стабильность, повышенная безопасность. К примеру, ваша система может не использовать ResultURL, а скрипт SuccessURL перед выдачей товара может проверять состояние оплаты заказа непосредственно у ROBOKASSA.

Методы формирования страниц отправки на оплату

Как можно увидеть из спецификации интерфейсов при отправке пользователя на оплату магазин должен сформировать уникальный (в пределах магазина) номер счета, по которому будет производиться последующий контроль операции оплаты.

Соответственно инициировать 2 операции с одним и тем же номером счета нельзя.

С этим связано несколько особенностей.

Если вы будете предоставлять URL калькулятора с уникальным номером счета на HTML-странице, пользователь должен переходить по данному URL только 1 раз (если он зайдет первый раз, начнет операцию, вернется, и попытается начать операцию заново - его уже не пустят).

Из этого следует, что если вы, например, резервируете товар на складе под каждый номер счета, то может сложиться такая ситуация, что вскоре некоторая часть товара окажется зарезервированной, но не оплаченной.

Поэтому если кнопка оплаты находится в таких местах, где пользователь еще не готов покупать, а может лишь пробовать процесс - ввод конкретного номера счета явно нежелателен.

Вариант 1 - не указывайте номера счета - при этом в момент инициализации операции оплаты будет сформирован уникальный счет. Естественно вы не сможете тогда контролировать операцию оплату по номеру счета - вы его просто не знаете, однако для определения пренадлежности платежа к заказу вы можете использовать свободные поля SHPxxx=yyy, где xxx и yyy - произвольные строки.

Например, вы формируете в магазине заказ, резервируете под него товар и сохраняете.

Этот заказ вы передаете пользовательским параметром при инициализации операции оплаты.

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

Вариант 2 - при нажатии на кнопку «оплатить» пользователь реально будет переходить на ваш скрипт, который уже и будет формировать уникальный номер счета, запоминать его, и перенаправлять пользователя на оплату этого счета.

Это естественные ограничения, однако, о них необходимо знать и помнить.

Примеры

Perl

Формирование URL переадресации пользователя на оплату

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# order properties

my $inv_id = 5; ### shop's invoice number

### (unique for shop's lifetime)

my $inv_desc = "desc"; ### invoice desc

my $out_summ = "5.12"; ### invoice summ

# build CRC value

my $crc = md5_hex("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

# build URL

my $url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&". "OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

# print URL if you need

print "Content-type: text/html\n\n";

print "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

# as a part of ResultURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass2");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# OK state

# print OK signature

print "Content-type: text/html\n\nOK$q{InvId}\n";

# perform some action (change order state to paid)

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

# as a part of SuccessURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass1");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# you can check here, that resultURL was called

# (for better security)

# OK, payment proceeds

print "Content-type: text/html\n\n";

echo "Thank you for using our service\n";

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Запрос состояния операции

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# connect module for requesting data via https

use Net::SSLeay;

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# order properties

my $inv_id = "5"; ### put your order number here

# build CRC

my $crc = md5_hex("$mrh_login:$inv_id:$mrh_pass2");

# make request

my $data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

my ($page) = Net::SSLeay::post_https("merchant. ", 443,

"/Handler/Xml/OpState. ashx", "", $data);

# analyze data

print "Content-type: text/xml\n\n";

print $page;

PHP

Формирование URL переадресации пользователя на оплату

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass1 = "securepass2"; // merchant pass1 here

// order properties

$inv_id = 5; // shop's invoice number

// (unique for shop's lifetime)

$inv_desc = "desc"; // invoice desc

$out_summ = "5.12"; // invoice summ

// build CRC value

$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

// build URL

$url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&".

"OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

// print URL if you need

echo "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

// as a part of ResultURL script

// your registration data

$mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters:

$out_summ = Robokassa, описание интерфейсов | Контент-платформа Pandia.ru

Проект ориентирован на хранение и поиск узкоспециализированных данных, которые редко индексируются поисковыми системами

Robokassa, описание интерфейсов

Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ROBOKASSA

(Описание интерфейсов)

Общее описание

Интерфейсы сервиса ROBOKASSA предоставляют возможность получения Клиентом сервиса (магазином) средств от Покупателя в предпочитаемой им электронной валюте в заданном им количестве (объеме).

Покупатель выбирает в он-лайн магазине Клиента товар, магазин подсчитывает сумму Заказа в предпочитаемой Продавцом валюте и посылает запрос к серверу, на котором расположен сервис ROBOKASSA. Система возвращает серверу Клиента html код формы выбора валюты оплаты или кнопки оплаты, который используется на странице его сайта.

Покупатель выбирает на сайте Клиента или на странице Сервиса ROBOKASSA валюту платежа и приступает к платежу, нажав на кнопку оплаты. Сразу после оплаты Заказа Покупателем в выбранной им валюте производится конвертация полученных средств в валюту, предпочитаемую Продавцом и исходящий платеж в этой валюте на его счет в соответствующей платежной системе, указанный при регистрации.

После завершения операции в зависимости от ее исхода Покупатель перенаправляется на страницу исполненного платежа (в случае если он осуществил оплату), либо на страницу неисполненного (если он отказался от оплаты).

Сервис ROBOKASSA построен таким образом, что, в отличие от случая «подключения» непосредственно к серверу платежной системы, отпадает необходимость в усиленной защите данных в процессе обмена. Для интеграции кассы в сайт магазина, он-лайн казино или сайт предоставляющий платный доступ к контенту нет необходимости в установлении исходящих SSL соединений, подключении дополнительных компонент на сервере Клиента и т. п.. В этом заключено главное преимущество применения системы ROBOKASSA.

НЕ нашли? Не то? Что вы ищете?

Номер счета Клиента (магазина) на который будет поступать оплата товаров и/или услуг Продавца защищен от изменения, он задается только один раз – в момент регистрации Продавца в Сервисе. Это позволяет избежать одновременно и краж выручки посторонними лицами и любых злоупотреблений с денежными средствами со стороны обслуживающего персонала магазина.

Нежелательна возможность самостоятельной инициализации процедуры оплаты (путем ввода url с параметрами), иначе говоря, прежде чем пользователь станет оплачивать товар магазин должен сформировать у себя запись о начале процедуры оплаты (Заказ), определить требуемую сумму и отправить пользователя на оплату именно этого Заказа, с конкретной суммой. Реализовано это путем формирования MD5-контрольной суммы (подписи) параметров счета, и добавления подписи в URL системы, куда перенаправляется Покупатель для оплаты заказа. Подпись формируется по параметрам счета и паролю №1 магазина (устанавливается в интерфейсе администрирования).

Продавец может узнать у системы ROBOKASSA состояние операции оплаты, а также действующие в системе курсы обмена. Для этого используются XML интерфейсы, описанные в соответствующем разделе данного документа.

После оплаты обменный пункт отправляет сообщение магазину путем вызова ResultURL и передачей ему методом GET/POST/email параметров совершенного платежа, а также подписи, сформированной по параметрам оплаченного Заказа и паролю №2 магазина.

Запросы к XML-интерфейсам, информирующим о состоянии обменной операции, производятся с указанием контрольной суммы, сформированной по параметрам запроса + пароль2 магазина.

Примечание: Если не оговорено конкретно, понятия входяший/исходящий подразумеваются относительно системы ROBOKASSA.

Состав системы ROBOKASSA

Регистрационные данные Продавца

Online регистрация

Продавец (владелец магазина или сервиса) должен указать логин (далее sMerchantLogin), пароль для входа в Личный кабинет и внести в форму он-лайн регистрации следующие данные:

-  язык общения с администратором магазина;

-  наименование магазина;

-  URL сайта магазина (url главной страницы сайта)

-  e-mail адрес технического администратора магазина для связи;

-  пароль 1 (используется интерфейсом инициализации оплаты);

-  пароль 2 (используется интерфейсом оповещения о платеже, XML-интерфейсах);

-  Result URL (используется интерфейсом оповещения о платеже);

-  POST/GET/email метод отсылки данных в Result URL;

-  Success URL (используется в случае успешного проведения платежа);

-  POST/GET метод отсылки данных в Success URL;

-  Fail URL (используется в случае отказа проведения платежа);

-  POST/GET метод отсылки данных в Fail URL;

-  валюту, которую желает получать;

-  аккаунт в выбранной валюте, на который будут перечисляться средства.

Изменение регистрационной информации

После активации мерчанта изменение любых данных будет невозможно.

Интерфейс оплаты

Код встраиваемой кассы со списком возможных валют оплаты

При использовании как источник JScript-кода в HTML-тексте выводит окошко кассы с выбором сумм в различных валютах.

URL: http://merchant. roboxchange. local/Handler/MrchSumPreview. ashx

Параметры запроса (метод GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Culture=sCulture&

Encoding=sEncoding

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Если параметр не указан (пустая строка), то пользователю предоставляется возможность ввести сумму самостоятельно. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

sEncoding – кодировка, в которой возвращается HTML-код кассы. По умолчанию: windows-1251.

2. Инициализация оплаты

Магазин отправляет пользователя по данному адресу для произведения им оплаты. Предварительно магазин должен у себя запомнить счет (номер, сумма, дата формирования).

URL: https://merchant. /Index. aspx

Параметры запроса (метод POST либо GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Email=sEmail&

Culture=sCulture

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sEmail – опционально, e-mail пользователя. Пользователь может изменить его в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

Покупательатель отправляется на сайт оплату ROBOKASSA, после чего платеж в выбранной Продавцом валюте перечисляется (поступает) на его счет в выбранной им платежной системе. Промежуток времени между «началом операции» - «получением оплаты системой ROBOKASSA» ограничено одним часом, время завершения операции не ограничено. После оплаты сам Покупатель не заинтересован в затормаживании операции (ожидание завершения операции вполне можно прекратить через сутки).

3. Оповещение об оплате (ResultURL)

В случае успешного проведения оплаты робот системы проводит запрос по Result URL, с указанием следующих параметров (методом, выбранным в настройках):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue

[&пользовательские_параметры]

nOutSum – полученная магазином сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 - (устанавливается через интерфейс администрирования) т. е.

nOutSum:nInvId:sMerchantPass2[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy, то подпись формируется из строки

...:sMerchantPass2:shpa=yyy:shpb=xxx

Скрипт, находящийся по Result URL должен проверить правильность контрольной суммы и соответствия суммы платежа ожидаемой сумме. При формировании строки подписи учтите формат представления суммы (в строку при проверке подписи вставляйте именно полученное значение, без какого-либо форматирования).

Данный запрос производится после получения денег.

Факт успешности сообщения магазину об исполнении операции определяется по результату, возвращаемому обменному пункту. Результат должен содержать “OKnInvId”, т. е. для счета #5 должен быть возвращен текст “OK5”.

В случае невозможности связаться со скриптом по адресу Result URL (связь прерывается по time-out-у либо по отсутствию DNS-записи, либо получен не ожидаемый ответ) на email-адрес администратора магазина отправляется письмо и запрос Result URL считается завершенным успешно. В случае системаческого отсутствия связи между серверами магазина и обменного пункта лучше использовать метод определения оплаты с применением интерфейсов XML, а самый желательный и защищенный способ - совмещенный.

4. Переадресация пользователя при успешной оплате (SuccessURL)

В случае успешного исполнения платежа Покупатель может перейти по данному адресу.

Методом, выбранным при регистрации будет передан следующих параметр («чек» об оплате):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 (указывается при регистрации) т. е.

nOutSum:nInvID:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy то подпись формируется из строки

…:sMerchantPass1:shpa=yyy:shpb=xxx

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение по email-адресу, установленному в качестве Success URL через интерфейс администрирования.

Переход пользователя по данному адресу с корректными параметрами (соответствия CRC) означает, что платеж по реквизитам Продавца выполнен успешно. Сервис несет финансовую ответственность перед Продавцом в соответствии с Соглашением за достоверность такого подтверждения.

Однако для дополнительной защиты желательно, чтобы факт оплаты платежа проверялся скриптом исполняемым при переходе на Result URL, или путем запроса XML-интерфейса о результате данной платежной операции, и только при реальном наличии счета с номером nInvId в БД магазина.

5. Переадресация пользователя при отказе от оплаты (FailURL)

В случае отказа от исполнения платежа Покупатель перенаправляется по данному адресу.

Для того, чтобы Продавец мог разблокировать заказанный товар на складе при отказе от его оплаты методом, выбранным при регистрации, будет переданы параметры:

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение об отказе Покупателя от оплаты Заказа по email-адресу, находящемуся в Fail URL.

Переход пользователя по данному адресу вообще говоря не означает окончательного отказа Покупателя от оплаты, нажав кнопку «Back» в броузере он может вернуться на страницы ROBOKASSA. Поэтому в случае блокировки товара на складе под заказ для его разблокировки желательно проверять факт отказа от платежа запросом запроса XML-интерфейса о результате данной платежной операции используя в запросе номер счета nInvId имеющийся в БД магазина (Продавца).

XML интерфейсы

1. Список валют обменного пункта.

По данному запросу Сервисом предоставляется полный список наименований электронных валют

URL: http://merchant. /Handler/Xml/CurrList. ashx

Параметров нет.

Ответ:

<robox. currlist. resp>

<item>

<curr>sCurrLabel</curr>

<curr_name>sCurrName</curr_name>

</item>

</robox. currlist. resp>

Тегов <item> может быть несколько, каждый из них описывает 1 валюту.

sCurrLabel – метка входящей валюты

sCurrName – имя входящей валюты (это наименование можно показывать пользователю).

2. Получение списка курсов обмена

URL: http://merchant. /Handler/Xml/Rate. ashx

Параметры запроса (метод POST):

<robox. rate. req>

<in_curr>sIncCurrLabel</in_curr>

<out_curr>sOutCurrLabel</out_curr>

<merchant_login>sMerchantLogin</merchant_login>

<out_cnt>nOutCount</out_cnt>

</robox. rate. req>

sIncCurrLabel – метка входящей валюты, если не указана будут возвращены курсы по всем возможным валютам

sOutCurrLabel – метка исходящей валюты

sMerchantLogin – login магазина в обменном пункте

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков. По умолчанию принимается 1.

Исходящая валюта определяется либо по параметру sOutCurrLabel, либо по sMerchantLogin-у (в качестве исходящей берется валюта, выбранная при регистрации). sMerchantLogin имеет приоритет

Ответ:

<robox. rate. resp>

<retval>nRetCode</retval>

<out_curr>sOutCurrLabelr</out_curr>

<out_cnt>nOutCount</out_cnt>

<date>sDateODBC120</date>

<ratelist>

<rate>

<in_curr>sIncCurrLabelr</in_curr>

<in_curr_name>sIncCurrName</in_curr_name>

<value>nValuet</value>

<ins_per_Xout>nInCount</ins_per_Xout>

</rate>

...

</ratelist>

</robox. rate. resp>

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

0 - нет ошибки.

1 - sIncCurrLabel задан неверно

2 - sOutCurrLabel задан неверно

3 - sMerchantLogin не найден

4 - nOutCnt задан неверно

sOutCurrLabel – метка исходящей валюты

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков

sDateODBC120 – дата, на которую возвращено состояние курсов. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”), GMT.

Тегов <rate> может быть несколько (особенно если в запросе не указан <in_curr>), каждый из них описывает 1 курс.

sIncCurrLabel – метка входящей валюты

sIncCurrName – имя входящей валюты (это наименование можно показывать пользователю).

nValue – количество денежных знаков входящей валюты, приходящиеся на 1 денежный знак исходящей валюты (sOutCurr), без округлений до элементарных единиц входящей валюты.

nInCount – количество денежных знаков входящей валюты, которые пользователь должен оплатить для получения магазином nOutCount - денежных знаков исходящей валюты (sOutCurrLabel). Округлено до элементарных единиц входящей валюты.

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

3. Интерфейс получения состояния операций

URL: https://merchant. /Handler/Xml/OpState. ashx

Параметры запроса (метод POST):

<robox. opstate. req>

<merchant_login>sMerchantLogin</merchant_login>

<merchant_invid>sInvId</merchant_invid>

<crc>sSignatureValue</crc>

</robox. opstate. req>

sMerchantLogin – login магазина в обменном пункте

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 16-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 (указывается при регистрации) т. е.

sMerchantLogin:nInvId:sMerchantPass2

Ответ:

<robox. opstate. resp>

<retval>nRetCode</retval>

<date>sDateODBC120</date>

<out_curr>sOutCurrLabel</out_curr>

<opstate>

<out_cnt>nOutCount</out_cnt>

<state>nState</state>

</opstate>

</robox. opstate. resp>

sDateODBC120 – дата, на которую возвращено состояние операции. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”).

sOutCurrLabel – метка исходящей валюты

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

-9 - sSignatureValue не указана, либо неверного вида (длина должна быть 32

символа)

-2 - sInvId не задан либо не является числом

0 - нет ошибки. При этом присутствует тег <opstate>.

1 - указанный sMerchantLogin не найден

9 - неверно задана контрольная сумма

10 - операция с данным sInvId не найдена (возможно еще не инициирована)

nOutCount – количество денежных знаков исходящей валюты данной операции

nState - состояние операции :

5 - только инициирована, деньги не получены

10 - деньги не были получены, операция отменена

50 - деньги от пользователя получены, производится зачисление денег на счет магазина

60 - деньги после получения были возвращены пользователю

80 - исполнение операции приостановлено

100 - операция завершена успешно

Необходимо помнить, что операция инициируется не в момент ухода пользователя на оплату, а позже - после подтверждения его платежных реквизитов, т. е. вы вполне можете не находить операцию, которая по вашему мнению уже должна начаться.

Описание методов построения магазинов

Простейший магазин без формирования уникального номера счета.

Поскольку ваш сайт не может как-либо контролировать процесс, вам скорее всего придется самостоятельно отправлять товар.

Основная схема работы магазина:

·  сформировав подпись вы направляете пользователя на оплату, используя JScript-код кассы, в результате чего на странице появляется касса с выбором валюты оплаты, либо ссылку на оплату.

·  пользователь, выбрав валюту, и нажав кнопку "оплатить" попадает на страницы ROBOKASSA, и производит оплату (на кошелек магазина при этом поступают средства в вашей валюте).

·  по окончании процесса на email-адрес оператора магазина посылается сообщение о произведенной операции, а пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL. Вашему SuccessURL скрипту передаются те же параметры, что и при инициализации оплаты.

На этой странице вы можете расположить текст вида "В ближайшее время оператор отошлет вам купленный товар".
Либо можете расположить сам товар, в случае, если ваш скрипт получает переданные ему параметры и проверяет правильность подписи. В противном случае пользователь может самостоятельно, без оплаты, перейти на этот URL.

Для формирования/проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект

Если вы имеете в магазине несколько товаров либо несколько товаров с одинаковой ценой, то для их идентификации используйте пользовательские параметры - параметры магазина, начинающиеся с префикса 'shp'. Пользовательские параметры передаются наряду с другими в момент инициализации оплаты и должны быть учтены при формировании подписи.

При регистрации :

·  «ResultURL» - email-адрес оператора магазина, метод отправки данных - email,

·  «SuccessURL» - адрес страницы с товаром, куда отправится пользователь после оплаты, метод отправки данных не имеет значения

·  «FailURL» - адрес вашего магазина, метод отправки данных не имеет значения

Магазин, формирующий уникальный номера счета, но без формирования запросов

Схема работы магазина следующая:

·  скрипт магазина направляет пользователя на оплату, используя JScript-код кассы, либо URL калькулятора, при этом он может запретить произвольную инициализацию оплаты, закрыв данный URL подписью.

·  после оплаты, ROBOKASSA уведомляет магазин о том, что платеж совершен, вызывая скрипт, находящийся по адресу ResultURL - скрипту передаются параметры платежа, подписанные ROBOKASSA с использованием пароля#2. Скрипт, указанному заказу устанавливает в БД магазина состояние «оплачено». Если в момент оповещение между ROBOKASSA и магазином отсутствует связь - администратору магазина отправляется email-сообщение.

·  После оплаты, и после сообщения магазину, пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL - скрипту передаются те же параметры, но подписанные с использованием пароля#1. Скрипт анализирует данные, сверяет их с данными, ранее полученными скриптом ResultURL (однако, магазин может вовсе и не использовать скрипт ResultURL, полагаясь только на данные SuccessURL) и выдает товар.

Для формирования / проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект.

Вы можете вовсе не формировать сверять подпись, если считаете это уместным уровнем безопасности. В таком случае скрипт ResultURL должен сверять корректность данных только по ip-адресу, и URL скрипта ResultURL не должен быть известем третьим лицам. SuccessURL при этом должен лишь брать состояние заказа, устанавливаемое скриптом ResultURL и в случае состояние «оплачено» выдавать товар.

Магазин с применением всех интерфейсов

В случае если конфигурация вашего сервера позволяет производить исходящие http и https запросы на сервер ROBOKASSA, то вы можете дополнительно усложнить ваш магазин, используя XML-интерфейсы.

Они позволяют предварительно считывать курсы обмена ROBOKASSA, список принимаемых валют. Что значительно расширяет ваши возможности по построению удобного пользовательского интерфейса вашего сайта.

Также вы можете в любой момент времени проверить состояние оплаты вашего заказа - большая стабильность, повышенная безопасность. К примеру, ваша система может не использовать ResultURL, а скрипт SuccessURL перед выдачей товара может проверять состояние оплаты заказа непосредственно у ROBOKASSA.

Методы формирования страниц отправки на оплату

Как можно увидеть из спецификации интерфейсов при отправке пользователя на оплату магазин должен сформировать уникальный (в пределах магазина) номер счета, по которому будет производиться последующий контроль операции оплаты.

Соответственно инициировать 2 операции с одним и тем же номером счета нельзя.

С этим связано несколько особенностей.

Если вы будете предоставлять URL калькулятора с уникальным номером счета на HTML-странице, пользователь должен переходить по данному URL только 1 раз (если он зайдет первый раз, начнет операцию, вернется, и попытается начать операцию заново - его уже не пустят).

Из этого следует, что если вы, например, резервируете товар на складе под каждый номер счета, то может сложиться такая ситуация, что вскоре некоторая часть товара окажется зарезервированной, но не оплаченной.

Поэтому если кнопка оплаты находится в таких местах, где пользователь еще не готов покупать, а может лишь пробовать процесс - ввод конкретного номера счета явно нежелателен.

Вариант 1 - не указывайте номера счета - при этом в момент инициализации операции оплаты будет сформирован уникальный счет. Естественно вы не сможете тогда контролировать операцию оплату по номеру счета - вы его просто не знаете, однако для определения пренадлежности платежа к заказу вы можете использовать свободные поля SHPxxx=yyy, где xxx и yyy - произвольные строки.

Например, вы формируете в магазине заказ, резервируете под него товар и сохраняете.

Этот заказ вы передаете пользовательским параметром при инициализации операции оплаты.

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

Вариант 2 - при нажатии на кнопку «оплатить» пользователь реально будет переходить на ваш скрипт, который уже и будет формировать уникальный номер счета, запоминать его, и перенаправлять пользователя на оплату этого счета.

Это естественные ограничения, однако, о них необходимо знать и помнить.

Примеры

Perl

Формирование URL переадресации пользователя на оплату

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# order properties

my $inv_id = 5; ### shop's invoice number

### (unique for shop's lifetime)

my $inv_desc = "desc"; ### invoice desc

my $out_summ = "5.12"; ### invoice summ

# build CRC value

my $crc = md5_hex("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

# build URL

my $url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&". "OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

# print URL if you need

print "Content-type: text/html\n\n";

print "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

# as a part of ResultURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass2");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# OK state

# print OK signature

print "Content-type: text/html\n\nOK$q{InvId}\n";

# perform some action (change order state to paid)

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

# as a part of SuccessURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass1");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# you can check here, that resultURL was called

# (for better security)

# OK, payment proceeds

print "Content-type: text/html\n\n";

echo "Thank you for using our service\n";

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Запрос состояния операции

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# connect module for requesting data via https

use Net::SSLeay;

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# order properties

my $inv_id = "5"; ### put your order number here

# build CRC

my $crc = md5_hex("$mrh_login:$inv_id:$mrh_pass2");

# make request

my $data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

my ($page) = Net::SSLeay::post_https("merchant. ", 443,

"/Handler/Xml/OpState. ashx", "", $data);

# analyze data

print "Content-type: text/xml\n\n";

print $page;

PHP

Формирование URL переадресации пользователя на оплату

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass1 = "securepass2"; // merchant pass1 here

// order properties

$inv_id = 5; // shop's invoice number

// (unique for shop's lifetime)

$inv_desc = "desc"; // invoice desc

$out_summ = "5.12"; // invoice summ

// build CRC value

$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

// build URL

$url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&".

"OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

// print URL if you need

echo "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

// as a part of ResultURL script

// your registration data

$mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

// HTTP parameters: $out_summ, $inv_id, $crc

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// print OK signature

echo "OK$inv_id\n";

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// as a part of SuccessURL script

// your registration data

$mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

echo "Thank you for using our service\n";

Запрос состояния операции

// you must have Curl module with HTTPS support installed

// to run this code

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

$inv_id = "5"; // put your order number here

// build CRC

$crc = md5("$mrh_login:$inv_id:$mrh_pass2");

// make request

$data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,

"https://merchant. /Handler/Xml/OpState. ashx");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// CURLOPT_RETURNTRANSFER doesn't work

$fp = tmpfile();

curl_setopt ($ch, CURLOPT_FILE, $fp);

if (!curl_exec($ch))

{

echo curl_error($ch);

}

curl_close($ch);

fseek($fp,0,SEEK_SET);

$page = fread($fp,1024);

fclose($fp);

// analyze data

echo $page;

ASP - JScript

Формирование URL переадресации пользователя на оплату

// install ASPHash. GenHash COM-object first

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass1 = "securepass1"; // merchant pass1 here

// order properties

var inv_id = 51; // shop's invoice number

// (unique for shop's lifetime)

var inv_desc = "desc"; // invoice desc

var out_summ = "5.12"; // invoice summ

// build CRC value

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+out_summ+":"+inv_id+":"+

mrh_pass1);

// build URL

var url = "https://merchant. /Index. aspx? MrchLogin="+mrh_login+"&"+

"OutSum="+out_summ+"&InvId="+inv_id+

"&Desc="+inv_desc+"&SignatureValue="+crc;

// print URL if you need

Response. Write("<a href='"+url+"'>Payment link</a>");

Получение уведомления об исполнении операции (ResultURL)

// install ASPHash. GenHash COM-object first

// as a part of ResultURL script

// your registration data

var mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters: out_summ, inv_id, crc

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass2);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// print OK signature

Response. Write("OK"+inv_id+"\n");

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// install ASPHash. GenHash COM-object first

// as a part of SuccessURL script

// your registration data

var mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass1);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service\n");

Запрос состояния операции

// install ASPHash. GenHash COM-object first

// install WinHttp. WinHttpRequest COM-object (from Microsoft site)

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

var inv_id = "5"; // put your order number here

// build CRC

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+inv_id+":"+mrh_pass2);

// make request

var data =

"<robox. opstate. req>"+

" <merchant_login>"+mrh_login+"</merchant_login>"+

" <merchant_invid>"+inv_id+"</merchant_invid>"+

" <crc>"+crc+"</crc>"+

"</robox. opstate. req>";

var sResponse = "";

try

{

var req = new ActiveXObject("WinHttp. WinHttpRequest");

req. SetTimeouts(10000, 10000, 15000, 15000);

req. Open("POST", "https://merchant. /Handler/Xml/OpState. ashx",

false);

req. SetRequestHeader(

"Content-Type",

"application/x-www-form-urlencoded");

req. Send(data);

sResponse = req. ResponseText;

}

catch(e)

{}

// analyze

Response. Write(sResponse);

Формирование URL переадресации пользователя на оплату

using System;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Init : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchLogin = "test";

string sMrchPass1 = "securepass1";

// order properties

decimal nOutSum = 5.12M;

int nInvId = 5;

string sDesc = "desc";

string sOutSum = nOutSum. ToString("0.00", CultureInfo. InvariantCulture);

string sCrcBase = string. Format("{0}:{1}:{2}:{3}",

sMrchLogin, sOutSum, nInvId, sMrchPass1);

// build CRC value

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sCrc = sbSignature. ToString();

// LinkButtonPay is System. Web. UI. WebControls. LinkButton;

LinkButtonPay. Text = "Payment link";

// build URL

LinkButtonPay. PostBackUrl = "https://merchant. /Index. aspx?" +

"MrchLogin=" + sMrchLogin +

"&OutSum=" + sOutSum +

"&InvId=" + nInvId +

"&Desc=" + sDesc +

"&SignatureValue=" + sCrc;

}

}

Получение уведомления об исполнении операции (ResultURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Result : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass2 = "securepass2";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass2);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

Response. Write(string. Format("OK{0}", sInvId));

// perform some action (change order state to paid)

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Success : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass1 = "securepass1";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass1);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

// you can check here, that ResultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service");

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

НЕ нашли? Не то? Что вы ищете?
Просмотр
REQUEST["OutSum"];

$inv_id = Robokassa, описание интерфейсов | Контент-платформа Pandia.ru

Проект ориентирован на хранение и поиск узкоспециализированных данных, которые редко индексируются поисковыми системами

Robokassa, описание интерфейсов

Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ROBOKASSA

(Описание интерфейсов)

Общее описание

Интерфейсы сервиса ROBOKASSA предоставляют возможность получения Клиентом сервиса (магазином) средств от Покупателя в предпочитаемой им электронной валюте в заданном им количестве (объеме).

Покупатель выбирает в он-лайн магазине Клиента товар, магазин подсчитывает сумму Заказа в предпочитаемой Продавцом валюте и посылает запрос к серверу, на котором расположен сервис ROBOKASSA. Система возвращает серверу Клиента html код формы выбора валюты оплаты или кнопки оплаты, который используется на странице его сайта.

Покупатель выбирает на сайте Клиента или на странице Сервиса ROBOKASSA валюту платежа и приступает к платежу, нажав на кнопку оплаты. Сразу после оплаты Заказа Покупателем в выбранной им валюте производится конвертация полученных средств в валюту, предпочитаемую Продавцом и исходящий платеж в этой валюте на его счет в соответствующей платежной системе, указанный при регистрации.

После завершения операции в зависимости от ее исхода Покупатель перенаправляется на страницу исполненного платежа (в случае если он осуществил оплату), либо на страницу неисполненного (если он отказался от оплаты).

Сервис ROBOKASSA построен таким образом, что, в отличие от случая «подключения» непосредственно к серверу платежной системы, отпадает необходимость в усиленной защите данных в процессе обмена. Для интеграции кассы в сайт магазина, он-лайн казино или сайт предоставляющий платный доступ к контенту нет необходимости в установлении исходящих SSL соединений, подключении дополнительных компонент на сервере Клиента и т. п.. В этом заключено главное преимущество применения системы ROBOKASSA.

НЕ нашли? Не то? Что вы ищете?

Номер счета Клиента (магазина) на который будет поступать оплата товаров и/или услуг Продавца защищен от изменения, он задается только один раз – в момент регистрации Продавца в Сервисе. Это позволяет избежать одновременно и краж выручки посторонними лицами и любых злоупотреблений с денежными средствами со стороны обслуживающего персонала магазина.

Нежелательна возможность самостоятельной инициализации процедуры оплаты (путем ввода url с параметрами), иначе говоря, прежде чем пользователь станет оплачивать товар магазин должен сформировать у себя запись о начале процедуры оплаты (Заказ), определить требуемую сумму и отправить пользователя на оплату именно этого Заказа, с конкретной суммой. Реализовано это путем формирования MD5-контрольной суммы (подписи) параметров счета, и добавления подписи в URL системы, куда перенаправляется Покупатель для оплаты заказа. Подпись формируется по параметрам счета и паролю №1 магазина (устанавливается в интерфейсе администрирования).

Продавец может узнать у системы ROBOKASSA состояние операции оплаты, а также действующие в системе курсы обмена. Для этого используются XML интерфейсы, описанные в соответствующем разделе данного документа.

После оплаты обменный пункт отправляет сообщение магазину путем вызова ResultURL и передачей ему методом GET/POST/email параметров совершенного платежа, а также подписи, сформированной по параметрам оплаченного Заказа и паролю №2 магазина.

Запросы к XML-интерфейсам, информирующим о состоянии обменной операции, производятся с указанием контрольной суммы, сформированной по параметрам запроса + пароль2 магазина.

Примечание: Если не оговорено конкретно, понятия входяший/исходящий подразумеваются относительно системы ROBOKASSA.

Состав системы ROBOKASSA

Регистрационные данные Продавца

Online регистрация

Продавец (владелец магазина или сервиса) должен указать логин (далее sMerchantLogin), пароль для входа в Личный кабинет и внести в форму он-лайн регистрации следующие данные:

-  язык общения с администратором магазина;

-  наименование магазина;

-  URL сайта магазина (url главной страницы сайта)

-  e-mail адрес технического администратора магазина для связи;

-  пароль 1 (используется интерфейсом инициализации оплаты);

-  пароль 2 (используется интерфейсом оповещения о платеже, XML-интерфейсах);

-  Result URL (используется интерфейсом оповещения о платеже);

-  POST/GET/email метод отсылки данных в Result URL;

-  Success URL (используется в случае успешного проведения платежа);

-  POST/GET метод отсылки данных в Success URL;

-  Fail URL (используется в случае отказа проведения платежа);

-  POST/GET метод отсылки данных в Fail URL;

-  валюту, которую желает получать;

-  аккаунт в выбранной валюте, на который будут перечисляться средства.

Изменение регистрационной информации

После активации мерчанта изменение любых данных будет невозможно.

Интерфейс оплаты

Код встраиваемой кассы со списком возможных валют оплаты

При использовании как источник JScript-кода в HTML-тексте выводит окошко кассы с выбором сумм в различных валютах.

URL: http://merchant. roboxchange. local/Handler/MrchSumPreview. ashx

Параметры запроса (метод GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Culture=sCulture&

Encoding=sEncoding

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Если параметр не указан (пустая строка), то пользователю предоставляется возможность ввести сумму самостоятельно. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

sEncoding – кодировка, в которой возвращается HTML-код кассы. По умолчанию: windows-1251.

2. Инициализация оплаты

Магазин отправляет пользователя по данному адресу для произведения им оплаты. Предварительно магазин должен у себя запомнить счет (номер, сумма, дата формирования).

URL: https://merchant. /Index. aspx

Параметры запроса (метод POST либо GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Email=sEmail&

Culture=sCulture

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sEmail – опционально, e-mail пользователя. Пользователь может изменить его в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

Покупательатель отправляется на сайт оплату ROBOKASSA, после чего платеж в выбранной Продавцом валюте перечисляется (поступает) на его счет в выбранной им платежной системе. Промежуток времени между «началом операции» - «получением оплаты системой ROBOKASSA» ограничено одним часом, время завершения операции не ограничено. После оплаты сам Покупатель не заинтересован в затормаживании операции (ожидание завершения операции вполне можно прекратить через сутки).

3. Оповещение об оплате (ResultURL)

В случае успешного проведения оплаты робот системы проводит запрос по Result URL, с указанием следующих параметров (методом, выбранным в настройках):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue

[&пользовательские_параметры]

nOutSum – полученная магазином сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 - (устанавливается через интерфейс администрирования) т. е.

nOutSum:nInvId:sMerchantPass2[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy, то подпись формируется из строки

...:sMerchantPass2:shpa=yyy:shpb=xxx

Скрипт, находящийся по Result URL должен проверить правильность контрольной суммы и соответствия суммы платежа ожидаемой сумме. При формировании строки подписи учтите формат представления суммы (в строку при проверке подписи вставляйте именно полученное значение, без какого-либо форматирования).

Данный запрос производится после получения денег.

Факт успешности сообщения магазину об исполнении операции определяется по результату, возвращаемому обменному пункту. Результат должен содержать “OKnInvId”, т. е. для счета #5 должен быть возвращен текст “OK5”.

В случае невозможности связаться со скриптом по адресу Result URL (связь прерывается по time-out-у либо по отсутствию DNS-записи, либо получен не ожидаемый ответ) на email-адрес администратора магазина отправляется письмо и запрос Result URL считается завершенным успешно. В случае системаческого отсутствия связи между серверами магазина и обменного пункта лучше использовать метод определения оплаты с применением интерфейсов XML, а самый желательный и защищенный способ - совмещенный.

4. Переадресация пользователя при успешной оплате (SuccessURL)

В случае успешного исполнения платежа Покупатель может перейти по данному адресу.

Методом, выбранным при регистрации будет передан следующих параметр («чек» об оплате):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 (указывается при регистрации) т. е.

nOutSum:nInvID:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy то подпись формируется из строки

…:sMerchantPass1:shpa=yyy:shpb=xxx

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение по email-адресу, установленному в качестве Success URL через интерфейс администрирования.

Переход пользователя по данному адресу с корректными параметрами (соответствия CRC) означает, что платеж по реквизитам Продавца выполнен успешно. Сервис несет финансовую ответственность перед Продавцом в соответствии с Соглашением за достоверность такого подтверждения.

Однако для дополнительной защиты желательно, чтобы факт оплаты платежа проверялся скриптом исполняемым при переходе на Result URL, или путем запроса XML-интерфейса о результате данной платежной операции, и только при реальном наличии счета с номером nInvId в БД магазина.

5. Переадресация пользователя при отказе от оплаты (FailURL)

В случае отказа от исполнения платежа Покупатель перенаправляется по данному адресу.

Для того, чтобы Продавец мог разблокировать заказанный товар на складе при отказе от его оплаты методом, выбранным при регистрации, будет переданы параметры:

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение об отказе Покупателя от оплаты Заказа по email-адресу, находящемуся в Fail URL.

Переход пользователя по данному адресу вообще говоря не означает окончательного отказа Покупателя от оплаты, нажав кнопку «Back» в броузере он может вернуться на страницы ROBOKASSA. Поэтому в случае блокировки товара на складе под заказ для его разблокировки желательно проверять факт отказа от платежа запросом запроса XML-интерфейса о результате данной платежной операции используя в запросе номер счета nInvId имеющийся в БД магазина (Продавца).

XML интерфейсы

1. Список валют обменного пункта.

По данному запросу Сервисом предоставляется полный список наименований электронных валют

URL: http://merchant. /Handler/Xml/CurrList. ashx

Параметров нет.

Ответ:

<robox. currlist. resp>

<item>

<curr>sCurrLabel</curr>

<curr_name>sCurrName</curr_name>

</item>

</robox. currlist. resp>

Тегов <item> может быть несколько, каждый из них описывает 1 валюту.

sCurrLabel – метка входящей валюты

sCurrName – имя входящей валюты (это наименование можно показывать пользователю).

2. Получение списка курсов обмена

URL: http://merchant. /Handler/Xml/Rate. ashx

Параметры запроса (метод POST):

<robox. rate. req>

<in_curr>sIncCurrLabel</in_curr>

<out_curr>sOutCurrLabel</out_curr>

<merchant_login>sMerchantLogin</merchant_login>

<out_cnt>nOutCount</out_cnt>

</robox. rate. req>

sIncCurrLabel – метка входящей валюты, если не указана будут возвращены курсы по всем возможным валютам

sOutCurrLabel – метка исходящей валюты

sMerchantLogin – login магазина в обменном пункте

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков. По умолчанию принимается 1.

Исходящая валюта определяется либо по параметру sOutCurrLabel, либо по sMerchantLogin-у (в качестве исходящей берется валюта, выбранная при регистрации). sMerchantLogin имеет приоритет

Ответ:

<robox. rate. resp>

<retval>nRetCode</retval>

<out_curr>sOutCurrLabelr</out_curr>

<out_cnt>nOutCount</out_cnt>

<date>sDateODBC120</date>

<ratelist>

<rate>

<in_curr>sIncCurrLabelr</in_curr>

<in_curr_name>sIncCurrName</in_curr_name>

<value>nValuet</value>

<ins_per_Xout>nInCount</ins_per_Xout>

</rate>

...

</ratelist>

</robox. rate. resp>

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

0 - нет ошибки.

1 - sIncCurrLabel задан неверно

2 - sOutCurrLabel задан неверно

3 - sMerchantLogin не найден

4 - nOutCnt задан неверно

sOutCurrLabel – метка исходящей валюты

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков

sDateODBC120 – дата, на которую возвращено состояние курсов. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”), GMT.

Тегов <rate> может быть несколько (особенно если в запросе не указан <in_curr>), каждый из них описывает 1 курс.

sIncCurrLabel – метка входящей валюты

sIncCurrName – имя входящей валюты (это наименование можно показывать пользователю).

nValue – количество денежных знаков входящей валюты, приходящиеся на 1 денежный знак исходящей валюты (sOutCurr), без округлений до элементарных единиц входящей валюты.

nInCount – количество денежных знаков входящей валюты, которые пользователь должен оплатить для получения магазином nOutCount - денежных знаков исходящей валюты (sOutCurrLabel). Округлено до элементарных единиц входящей валюты.

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

3. Интерфейс получения состояния операций

URL: https://merchant. /Handler/Xml/OpState. ashx

Параметры запроса (метод POST):

<robox. opstate. req>

<merchant_login>sMerchantLogin</merchant_login>

<merchant_invid>sInvId</merchant_invid>

<crc>sSignatureValue</crc>

</robox. opstate. req>

sMerchantLogin – login магазина в обменном пункте

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 16-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 (указывается при регистрации) т. е.

sMerchantLogin:nInvId:sMerchantPass2

Ответ:

<robox. opstate. resp>

<retval>nRetCode</retval>

<date>sDateODBC120</date>

<out_curr>sOutCurrLabel</out_curr>

<opstate>

<out_cnt>nOutCount</out_cnt>

<state>nState</state>

</opstate>

</robox. opstate. resp>

sDateODBC120 – дата, на которую возвращено состояние операции. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”).

sOutCurrLabel – метка исходящей валюты

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

-9 - sSignatureValue не указана, либо неверного вида (длина должна быть 32

символа)

-2 - sInvId не задан либо не является числом

0 - нет ошибки. При этом присутствует тег <opstate>.

1 - указанный sMerchantLogin не найден

9 - неверно задана контрольная сумма

10 - операция с данным sInvId не найдена (возможно еще не инициирована)

nOutCount – количество денежных знаков исходящей валюты данной операции

nState - состояние операции :

5 - только инициирована, деньги не получены

10 - деньги не были получены, операция отменена

50 - деньги от пользователя получены, производится зачисление денег на счет магазина

60 - деньги после получения были возвращены пользователю

80 - исполнение операции приостановлено

100 - операция завершена успешно

Необходимо помнить, что операция инициируется не в момент ухода пользователя на оплату, а позже - после подтверждения его платежных реквизитов, т. е. вы вполне можете не находить операцию, которая по вашему мнению уже должна начаться.

Описание методов построения магазинов

Простейший магазин без формирования уникального номера счета.

Поскольку ваш сайт не может как-либо контролировать процесс, вам скорее всего придется самостоятельно отправлять товар.

Основная схема работы магазина:

·  сформировав подпись вы направляете пользователя на оплату, используя JScript-код кассы, в результате чего на странице появляется касса с выбором валюты оплаты, либо ссылку на оплату.

·  пользователь, выбрав валюту, и нажав кнопку "оплатить" попадает на страницы ROBOKASSA, и производит оплату (на кошелек магазина при этом поступают средства в вашей валюте).

·  по окончании процесса на email-адрес оператора магазина посылается сообщение о произведенной операции, а пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL. Вашему SuccessURL скрипту передаются те же параметры, что и при инициализации оплаты.

На этой странице вы можете расположить текст вида "В ближайшее время оператор отошлет вам купленный товар".
Либо можете расположить сам товар, в случае, если ваш скрипт получает переданные ему параметры и проверяет правильность подписи. В противном случае пользователь может самостоятельно, без оплаты, перейти на этот URL.

Для формирования/проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект

Если вы имеете в магазине несколько товаров либо несколько товаров с одинаковой ценой, то для их идентификации используйте пользовательские параметры - параметры магазина, начинающиеся с префикса 'shp'. Пользовательские параметры передаются наряду с другими в момент инициализации оплаты и должны быть учтены при формировании подписи.

При регистрации :

·  «ResultURL» - email-адрес оператора магазина, метод отправки данных - email,

·  «SuccessURL» - адрес страницы с товаром, куда отправится пользователь после оплаты, метод отправки данных не имеет значения

·  «FailURL» - адрес вашего магазина, метод отправки данных не имеет значения

Магазин, формирующий уникальный номера счета, но без формирования запросов

Схема работы магазина следующая:

·  скрипт магазина направляет пользователя на оплату, используя JScript-код кассы, либо URL калькулятора, при этом он может запретить произвольную инициализацию оплаты, закрыв данный URL подписью.

·  после оплаты, ROBOKASSA уведомляет магазин о том, что платеж совершен, вызывая скрипт, находящийся по адресу ResultURL - скрипту передаются параметры платежа, подписанные ROBOKASSA с использованием пароля#2. Скрипт, указанному заказу устанавливает в БД магазина состояние «оплачено». Если в момент оповещение между ROBOKASSA и магазином отсутствует связь - администратору магазина отправляется email-сообщение.

·  После оплаты, и после сообщения магазину, пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL - скрипту передаются те же параметры, но подписанные с использованием пароля#1. Скрипт анализирует данные, сверяет их с данными, ранее полученными скриптом ResultURL (однако, магазин может вовсе и не использовать скрипт ResultURL, полагаясь только на данные SuccessURL) и выдает товар.

Для формирования / проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект.

Вы можете вовсе не формировать сверять подпись, если считаете это уместным уровнем безопасности. В таком случае скрипт ResultURL должен сверять корректность данных только по ip-адресу, и URL скрипта ResultURL не должен быть известем третьим лицам. SuccessURL при этом должен лишь брать состояние заказа, устанавливаемое скриптом ResultURL и в случае состояние «оплачено» выдавать товар.

Магазин с применением всех интерфейсов

В случае если конфигурация вашего сервера позволяет производить исходящие http и https запросы на сервер ROBOKASSA, то вы можете дополнительно усложнить ваш магазин, используя XML-интерфейсы.

Они позволяют предварительно считывать курсы обмена ROBOKASSA, список принимаемых валют. Что значительно расширяет ваши возможности по построению удобного пользовательского интерфейса вашего сайта.

Также вы можете в любой момент времени проверить состояние оплаты вашего заказа - большая стабильность, повышенная безопасность. К примеру, ваша система может не использовать ResultURL, а скрипт SuccessURL перед выдачей товара может проверять состояние оплаты заказа непосредственно у ROBOKASSA.

Методы формирования страниц отправки на оплату

Как можно увидеть из спецификации интерфейсов при отправке пользователя на оплату магазин должен сформировать уникальный (в пределах магазина) номер счета, по которому будет производиться последующий контроль операции оплаты.

Соответственно инициировать 2 операции с одним и тем же номером счета нельзя.

С этим связано несколько особенностей.

Если вы будете предоставлять URL калькулятора с уникальным номером счета на HTML-странице, пользователь должен переходить по данному URL только 1 раз (если он зайдет первый раз, начнет операцию, вернется, и попытается начать операцию заново - его уже не пустят).

Из этого следует, что если вы, например, резервируете товар на складе под каждый номер счета, то может сложиться такая ситуация, что вскоре некоторая часть товара окажется зарезервированной, но не оплаченной.

Поэтому если кнопка оплаты находится в таких местах, где пользователь еще не готов покупать, а может лишь пробовать процесс - ввод конкретного номера счета явно нежелателен.

Вариант 1 - не указывайте номера счета - при этом в момент инициализации операции оплаты будет сформирован уникальный счет. Естественно вы не сможете тогда контролировать операцию оплату по номеру счета - вы его просто не знаете, однако для определения пренадлежности платежа к заказу вы можете использовать свободные поля SHPxxx=yyy, где xxx и yyy - произвольные строки.

Например, вы формируете в магазине заказ, резервируете под него товар и сохраняете.

Этот заказ вы передаете пользовательским параметром при инициализации операции оплаты.

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

Вариант 2 - при нажатии на кнопку «оплатить» пользователь реально будет переходить на ваш скрипт, который уже и будет формировать уникальный номер счета, запоминать его, и перенаправлять пользователя на оплату этого счета.

Это естественные ограничения, однако, о них необходимо знать и помнить.

Примеры

Perl

Формирование URL переадресации пользователя на оплату

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# order properties

my $inv_id = 5; ### shop's invoice number

### (unique for shop's lifetime)

my $inv_desc = "desc"; ### invoice desc

my $out_summ = "5.12"; ### invoice summ

# build CRC value

my $crc = md5_hex("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

# build URL

my $url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&". "OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

# print URL if you need

print "Content-type: text/html\n\n";

print "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

# as a part of ResultURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass2");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# OK state

# print OK signature

print "Content-type: text/html\n\nOK$q{InvId}\n";

# perform some action (change order state to paid)

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

# as a part of SuccessURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass1");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# you can check here, that resultURL was called

# (for better security)

# OK, payment proceeds

print "Content-type: text/html\n\n";

echo "Thank you for using our service\n";

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Запрос состояния операции

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# connect module for requesting data via https

use Net::SSLeay;

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# order properties

my $inv_id = "5"; ### put your order number here

# build CRC

my $crc = md5_hex("$mrh_login:$inv_id:$mrh_pass2");

# make request

my $data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

my ($page) = Net::SSLeay::post_https("merchant. ", 443,

"/Handler/Xml/OpState. ashx", "", $data);

# analyze data

print "Content-type: text/xml\n\n";

print $page;

PHP

Формирование URL переадресации пользователя на оплату

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass1 = "securepass2"; // merchant pass1 here

// order properties

$inv_id = 5; // shop's invoice number

// (unique for shop's lifetime)

$inv_desc = "desc"; // invoice desc

$out_summ = "5.12"; // invoice summ

// build CRC value

$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

// build URL

$url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&".

"OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

// print URL if you need

echo "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

// as a part of ResultURL script

// your registration data

$mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

// HTTP parameters: $out_summ, $inv_id, $crc

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// print OK signature

echo "OK$inv_id\n";

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// as a part of SuccessURL script

// your registration data

$mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

echo "Thank you for using our service\n";

Запрос состояния операции

// you must have Curl module with HTTPS support installed

// to run this code

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

$inv_id = "5"; // put your order number here

// build CRC

$crc = md5("$mrh_login:$inv_id:$mrh_pass2");

// make request

$data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,

"https://merchant. /Handler/Xml/OpState. ashx");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// CURLOPT_RETURNTRANSFER doesn't work

$fp = tmpfile();

curl_setopt ($ch, CURLOPT_FILE, $fp);

if (!curl_exec($ch))

{

echo curl_error($ch);

}

curl_close($ch);

fseek($fp,0,SEEK_SET);

$page = fread($fp,1024);

fclose($fp);

// analyze data

echo $page;

ASP - JScript

Формирование URL переадресации пользователя на оплату

// install ASPHash. GenHash COM-object first

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass1 = "securepass1"; // merchant pass1 here

// order properties

var inv_id = 51; // shop's invoice number

// (unique for shop's lifetime)

var inv_desc = "desc"; // invoice desc

var out_summ = "5.12"; // invoice summ

// build CRC value

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+out_summ+":"+inv_id+":"+

mrh_pass1);

// build URL

var url = "https://merchant. /Index. aspx? MrchLogin="+mrh_login+"&"+

"OutSum="+out_summ+"&InvId="+inv_id+

"&Desc="+inv_desc+"&SignatureValue="+crc;

// print URL if you need

Response. Write("<a href='"+url+"'>Payment link</a>");

Получение уведомления об исполнении операции (ResultURL)

// install ASPHash. GenHash COM-object first

// as a part of ResultURL script

// your registration data

var mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters: out_summ, inv_id, crc

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass2);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// print OK signature

Response. Write("OK"+inv_id+"\n");

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// install ASPHash. GenHash COM-object first

// as a part of SuccessURL script

// your registration data

var mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass1);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service\n");

Запрос состояния операции

// install ASPHash. GenHash COM-object first

// install WinHttp. WinHttpRequest COM-object (from Microsoft site)

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

var inv_id = "5"; // put your order number here

// build CRC

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+inv_id+":"+mrh_pass2);

// make request

var data =

"<robox. opstate. req>"+

" <merchant_login>"+mrh_login+"</merchant_login>"+

" <merchant_invid>"+inv_id+"</merchant_invid>"+

" <crc>"+crc+"</crc>"+

"</robox. opstate. req>";

var sResponse = "";

try

{

var req = new ActiveXObject("WinHttp. WinHttpRequest");

req. SetTimeouts(10000, 10000, 15000, 15000);

req. Open("POST", "https://merchant. /Handler/Xml/OpState. ashx",

false);

req. SetRequestHeader(

"Content-Type",

"application/x-www-form-urlencoded");

req. Send(data);

sResponse = req. ResponseText;

}

catch(e)

{}

// analyze

Response. Write(sResponse);

Формирование URL переадресации пользователя на оплату

using System;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Init : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchLogin = "test";

string sMrchPass1 = "securepass1";

// order properties

decimal nOutSum = 5.12M;

int nInvId = 5;

string sDesc = "desc";

string sOutSum = nOutSum. ToString("0.00", CultureInfo. InvariantCulture);

string sCrcBase = string. Format("{0}:{1}:{2}:{3}",

sMrchLogin, sOutSum, nInvId, sMrchPass1);

// build CRC value

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sCrc = sbSignature. ToString();

// LinkButtonPay is System. Web. UI. WebControls. LinkButton;

LinkButtonPay. Text = "Payment link";

// build URL

LinkButtonPay. PostBackUrl = "https://merchant. /Index. aspx?" +

"MrchLogin=" + sMrchLogin +

"&OutSum=" + sOutSum +

"&InvId=" + nInvId +

"&Desc=" + sDesc +

"&SignatureValue=" + sCrc;

}

}

Получение уведомления об исполнении операции (ResultURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Result : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass2 = "securepass2";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass2);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

Response. Write(string. Format("OK{0}", sInvId));

// perform some action (change order state to paid)

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Success : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass1 = "securepass1";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass1);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

// you can check here, that ResultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service");

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

НЕ нашли? Не то? Что вы ищете?
Просмотр
REQUEST["InvId"];

$crc = Robokassa, описание интерфейсов | Контент-платформа Pandia.ru

Проект ориентирован на хранение и поиск узкоспециализированных данных, которые редко индексируются поисковыми системами

Robokassa, описание интерфейсов

Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ROBOKASSA

(Описание интерфейсов)

Общее описание

Интерфейсы сервиса ROBOKASSA предоставляют возможность получения Клиентом сервиса (магазином) средств от Покупателя в предпочитаемой им электронной валюте в заданном им количестве (объеме).

Покупатель выбирает в он-лайн магазине Клиента товар, магазин подсчитывает сумму Заказа в предпочитаемой Продавцом валюте и посылает запрос к серверу, на котором расположен сервис ROBOKASSA. Система возвращает серверу Клиента html код формы выбора валюты оплаты или кнопки оплаты, который используется на странице его сайта.

Покупатель выбирает на сайте Клиента или на странице Сервиса ROBOKASSA валюту платежа и приступает к платежу, нажав на кнопку оплаты. Сразу после оплаты Заказа Покупателем в выбранной им валюте производится конвертация полученных средств в валюту, предпочитаемую Продавцом и исходящий платеж в этой валюте на его счет в соответствующей платежной системе, указанный при регистрации.

После завершения операции в зависимости от ее исхода Покупатель перенаправляется на страницу исполненного платежа (в случае если он осуществил оплату), либо на страницу неисполненного (если он отказался от оплаты).

Сервис ROBOKASSA построен таким образом, что, в отличие от случая «подключения» непосредственно к серверу платежной системы, отпадает необходимость в усиленной защите данных в процессе обмена. Для интеграции кассы в сайт магазина, он-лайн казино или сайт предоставляющий платный доступ к контенту нет необходимости в установлении исходящих SSL соединений, подключении дополнительных компонент на сервере Клиента и т. п.. В этом заключено главное преимущество применения системы ROBOKASSA.

НЕ нашли? Не то? Что вы ищете?

Номер счета Клиента (магазина) на который будет поступать оплата товаров и/или услуг Продавца защищен от изменения, он задается только один раз – в момент регистрации Продавца в Сервисе. Это позволяет избежать одновременно и краж выручки посторонними лицами и любых злоупотреблений с денежными средствами со стороны обслуживающего персонала магазина.

Нежелательна возможность самостоятельной инициализации процедуры оплаты (путем ввода url с параметрами), иначе говоря, прежде чем пользователь станет оплачивать товар магазин должен сформировать у себя запись о начале процедуры оплаты (Заказ), определить требуемую сумму и отправить пользователя на оплату именно этого Заказа, с конкретной суммой. Реализовано это путем формирования MD5-контрольной суммы (подписи) параметров счета, и добавления подписи в URL системы, куда перенаправляется Покупатель для оплаты заказа. Подпись формируется по параметрам счета и паролю №1 магазина (устанавливается в интерфейсе администрирования).

Продавец может узнать у системы ROBOKASSA состояние операции оплаты, а также действующие в системе курсы обмена. Для этого используются XML интерфейсы, описанные в соответствующем разделе данного документа.

После оплаты обменный пункт отправляет сообщение магазину путем вызова ResultURL и передачей ему методом GET/POST/email параметров совершенного платежа, а также подписи, сформированной по параметрам оплаченного Заказа и паролю №2 магазина.

Запросы к XML-интерфейсам, информирующим о состоянии обменной операции, производятся с указанием контрольной суммы, сформированной по параметрам запроса + пароль2 магазина.

Примечание: Если не оговорено конкретно, понятия входяший/исходящий подразумеваются относительно системы ROBOKASSA.

Состав системы ROBOKASSA

Регистрационные данные Продавца

Online регистрация

Продавец (владелец магазина или сервиса) должен указать логин (далее sMerchantLogin), пароль для входа в Личный кабинет и внести в форму он-лайн регистрации следующие данные:

-  язык общения с администратором магазина;

-  наименование магазина;

-  URL сайта магазина (url главной страницы сайта)

-  e-mail адрес технического администратора магазина для связи;

-  пароль 1 (используется интерфейсом инициализации оплаты);

-  пароль 2 (используется интерфейсом оповещения о платеже, XML-интерфейсах);

-  Result URL (используется интерфейсом оповещения о платеже);

-  POST/GET/email метод отсылки данных в Result URL;

-  Success URL (используется в случае успешного проведения платежа);

-  POST/GET метод отсылки данных в Success URL;

-  Fail URL (используется в случае отказа проведения платежа);

-  POST/GET метод отсылки данных в Fail URL;

-  валюту, которую желает получать;

-  аккаунт в выбранной валюте, на который будут перечисляться средства.

Изменение регистрационной информации

После активации мерчанта изменение любых данных будет невозможно.

Интерфейс оплаты

Код встраиваемой кассы со списком возможных валют оплаты

При использовании как источник JScript-кода в HTML-тексте выводит окошко кассы с выбором сумм в различных валютах.

URL: http://merchant. roboxchange. local/Handler/MrchSumPreview. ashx

Параметры запроса (метод GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Culture=sCulture&

Encoding=sEncoding

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Если параметр не указан (пустая строка), то пользователю предоставляется возможность ввести сумму самостоятельно. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

sEncoding – кодировка, в которой возвращается HTML-код кассы. По умолчанию: windows-1251.

2. Инициализация оплаты

Магазин отправляет пользователя по данному адресу для произведения им оплаты. Предварительно магазин должен у себя запомнить счет (номер, сумма, дата формирования).

URL: https://merchant. /Index. aspx

Параметры запроса (метод POST либо GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Email=sEmail&

Culture=sCulture

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sEmail – опционально, e-mail пользователя. Пользователь может изменить его в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

Покупательатель отправляется на сайт оплату ROBOKASSA, после чего платеж в выбранной Продавцом валюте перечисляется (поступает) на его счет в выбранной им платежной системе. Промежуток времени между «началом операции» - «получением оплаты системой ROBOKASSA» ограничено одним часом, время завершения операции не ограничено. После оплаты сам Покупатель не заинтересован в затормаживании операции (ожидание завершения операции вполне можно прекратить через сутки).

3. Оповещение об оплате (ResultURL)

В случае успешного проведения оплаты робот системы проводит запрос по Result URL, с указанием следующих параметров (методом, выбранным в настройках):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue

[&пользовательские_параметры]

nOutSum – полученная магазином сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 - (устанавливается через интерфейс администрирования) т. е.

nOutSum:nInvId:sMerchantPass2[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy, то подпись формируется из строки

...:sMerchantPass2:shpa=yyy:shpb=xxx

Скрипт, находящийся по Result URL должен проверить правильность контрольной суммы и соответствия суммы платежа ожидаемой сумме. При формировании строки подписи учтите формат представления суммы (в строку при проверке подписи вставляйте именно полученное значение, без какого-либо форматирования).

Данный запрос производится после получения денег.

Факт успешности сообщения магазину об исполнении операции определяется по результату, возвращаемому обменному пункту. Результат должен содержать “OKnInvId”, т. е. для счета #5 должен быть возвращен текст “OK5”.

В случае невозможности связаться со скриптом по адресу Result URL (связь прерывается по time-out-у либо по отсутствию DNS-записи, либо получен не ожидаемый ответ) на email-адрес администратора магазина отправляется письмо и запрос Result URL считается завершенным успешно. В случае системаческого отсутствия связи между серверами магазина и обменного пункта лучше использовать метод определения оплаты с применением интерфейсов XML, а самый желательный и защищенный способ - совмещенный.

4. Переадресация пользователя при успешной оплате (SuccessURL)

В случае успешного исполнения платежа Покупатель может перейти по данному адресу.

Методом, выбранным при регистрации будет передан следующих параметр («чек» об оплате):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 (указывается при регистрации) т. е.

nOutSum:nInvID:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy то подпись формируется из строки

…:sMerchantPass1:shpa=yyy:shpb=xxx

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение по email-адресу, установленному в качестве Success URL через интерфейс администрирования.

Переход пользователя по данному адресу с корректными параметрами (соответствия CRC) означает, что платеж по реквизитам Продавца выполнен успешно. Сервис несет финансовую ответственность перед Продавцом в соответствии с Соглашением за достоверность такого подтверждения.

Однако для дополнительной защиты желательно, чтобы факт оплаты платежа проверялся скриптом исполняемым при переходе на Result URL, или путем запроса XML-интерфейса о результате данной платежной операции, и только при реальном наличии счета с номером nInvId в БД магазина.

5. Переадресация пользователя при отказе от оплаты (FailURL)

В случае отказа от исполнения платежа Покупатель перенаправляется по данному адресу.

Для того, чтобы Продавец мог разблокировать заказанный товар на складе при отказе от его оплаты методом, выбранным при регистрации, будет переданы параметры:

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение об отказе Покупателя от оплаты Заказа по email-адресу, находящемуся в Fail URL.

Переход пользователя по данному адресу вообще говоря не означает окончательного отказа Покупателя от оплаты, нажав кнопку «Back» в броузере он может вернуться на страницы ROBOKASSA. Поэтому в случае блокировки товара на складе под заказ для его разблокировки желательно проверять факт отказа от платежа запросом запроса XML-интерфейса о результате данной платежной операции используя в запросе номер счета nInvId имеющийся в БД магазина (Продавца).

XML интерфейсы

1. Список валют обменного пункта.

По данному запросу Сервисом предоставляется полный список наименований электронных валют

URL: http://merchant. /Handler/Xml/CurrList. ashx

Параметров нет.

Ответ:

<robox. currlist. resp>

<item>

<curr>sCurrLabel</curr>

<curr_name>sCurrName</curr_name>

</item>

</robox. currlist. resp>

Тегов <item> может быть несколько, каждый из них описывает 1 валюту.

sCurrLabel – метка входящей валюты

sCurrName – имя входящей валюты (это наименование можно показывать пользователю).

2. Получение списка курсов обмена

URL: http://merchant. /Handler/Xml/Rate. ashx

Параметры запроса (метод POST):

<robox. rate. req>

<in_curr>sIncCurrLabel</in_curr>

<out_curr>sOutCurrLabel</out_curr>

<merchant_login>sMerchantLogin</merchant_login>

<out_cnt>nOutCount</out_cnt>

</robox. rate. req>

sIncCurrLabel – метка входящей валюты, если не указана будут возвращены курсы по всем возможным валютам

sOutCurrLabel – метка исходящей валюты

sMerchantLogin – login магазина в обменном пункте

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков. По умолчанию принимается 1.

Исходящая валюта определяется либо по параметру sOutCurrLabel, либо по sMerchantLogin-у (в качестве исходящей берется валюта, выбранная при регистрации). sMerchantLogin имеет приоритет

Ответ:

<robox. rate. resp>

<retval>nRetCode</retval>

<out_curr>sOutCurrLabelr</out_curr>

<out_cnt>nOutCount</out_cnt>

<date>sDateODBC120</date>

<ratelist>

<rate>

<in_curr>sIncCurrLabelr</in_curr>

<in_curr_name>sIncCurrName</in_curr_name>

<value>nValuet</value>

<ins_per_Xout>nInCount</ins_per_Xout>

</rate>

...

</ratelist>

</robox. rate. resp>

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

0 - нет ошибки.

1 - sIncCurrLabel задан неверно

2 - sOutCurrLabel задан неверно

3 - sMerchantLogin не найден

4 - nOutCnt задан неверно

sOutCurrLabel – метка исходящей валюты

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков

sDateODBC120 – дата, на которую возвращено состояние курсов. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”), GMT.

Тегов <rate> может быть несколько (особенно если в запросе не указан <in_curr>), каждый из них описывает 1 курс.

sIncCurrLabel – метка входящей валюты

sIncCurrName – имя входящей валюты (это наименование можно показывать пользователю).

nValue – количество денежных знаков входящей валюты, приходящиеся на 1 денежный знак исходящей валюты (sOutCurr), без округлений до элементарных единиц входящей валюты.

nInCount – количество денежных знаков входящей валюты, которые пользователь должен оплатить для получения магазином nOutCount - денежных знаков исходящей валюты (sOutCurrLabel). Округлено до элементарных единиц входящей валюты.

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

3. Интерфейс получения состояния операций

URL: https://merchant. /Handler/Xml/OpState. ashx

Параметры запроса (метод POST):

<robox. opstate. req>

<merchant_login>sMerchantLogin</merchant_login>

<merchant_invid>sInvId</merchant_invid>

<crc>sSignatureValue</crc>

</robox. opstate. req>

sMerchantLogin – login магазина в обменном пункте

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 16-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 (указывается при регистрации) т. е.

sMerchantLogin:nInvId:sMerchantPass2

Ответ:

<robox. opstate. resp>

<retval>nRetCode</retval>

<date>sDateODBC120</date>

<out_curr>sOutCurrLabel</out_curr>

<opstate>

<out_cnt>nOutCount</out_cnt>

<state>nState</state>

</opstate>

</robox. opstate. resp>

sDateODBC120 – дата, на которую возвращено состояние операции. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”).

sOutCurrLabel – метка исходящей валюты

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

-9 - sSignatureValue не указана, либо неверного вида (длина должна быть 32

символа)

-2 - sInvId не задан либо не является числом

0 - нет ошибки. При этом присутствует тег <opstate>.

1 - указанный sMerchantLogin не найден

9 - неверно задана контрольная сумма

10 - операция с данным sInvId не найдена (возможно еще не инициирована)

nOutCount – количество денежных знаков исходящей валюты данной операции

nState - состояние операции :

5 - только инициирована, деньги не получены

10 - деньги не были получены, операция отменена

50 - деньги от пользователя получены, производится зачисление денег на счет магазина

60 - деньги после получения были возвращены пользователю

80 - исполнение операции приостановлено

100 - операция завершена успешно

Необходимо помнить, что операция инициируется не в момент ухода пользователя на оплату, а позже - после подтверждения его платежных реквизитов, т. е. вы вполне можете не находить операцию, которая по вашему мнению уже должна начаться.

Описание методов построения магазинов

Простейший магазин без формирования уникального номера счета.

Поскольку ваш сайт не может как-либо контролировать процесс, вам скорее всего придется самостоятельно отправлять товар.

Основная схема работы магазина:

·  сформировав подпись вы направляете пользователя на оплату, используя JScript-код кассы, в результате чего на странице появляется касса с выбором валюты оплаты, либо ссылку на оплату.

·  пользователь, выбрав валюту, и нажав кнопку "оплатить" попадает на страницы ROBOKASSA, и производит оплату (на кошелек магазина при этом поступают средства в вашей валюте).

·  по окончании процесса на email-адрес оператора магазина посылается сообщение о произведенной операции, а пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL. Вашему SuccessURL скрипту передаются те же параметры, что и при инициализации оплаты.

На этой странице вы можете расположить текст вида "В ближайшее время оператор отошлет вам купленный товар".
Либо можете расположить сам товар, в случае, если ваш скрипт получает переданные ему параметры и проверяет правильность подписи. В противном случае пользователь может самостоятельно, без оплаты, перейти на этот URL.

Для формирования/проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект

Если вы имеете в магазине несколько товаров либо несколько товаров с одинаковой ценой, то для их идентификации используйте пользовательские параметры - параметры магазина, начинающиеся с префикса 'shp'. Пользовательские параметры передаются наряду с другими в момент инициализации оплаты и должны быть учтены при формировании подписи.

При регистрации :

·  «ResultURL» - email-адрес оператора магазина, метод отправки данных - email,

·  «SuccessURL» - адрес страницы с товаром, куда отправится пользователь после оплаты, метод отправки данных не имеет значения

·  «FailURL» - адрес вашего магазина, метод отправки данных не имеет значения

Магазин, формирующий уникальный номера счета, но без формирования запросов

Схема работы магазина следующая:

·  скрипт магазина направляет пользователя на оплату, используя JScript-код кассы, либо URL калькулятора, при этом он может запретить произвольную инициализацию оплаты, закрыв данный URL подписью.

·  после оплаты, ROBOKASSA уведомляет магазин о том, что платеж совершен, вызывая скрипт, находящийся по адресу ResultURL - скрипту передаются параметры платежа, подписанные ROBOKASSA с использованием пароля#2. Скрипт, указанному заказу устанавливает в БД магазина состояние «оплачено». Если в момент оповещение между ROBOKASSA и магазином отсутствует связь - администратору магазина отправляется email-сообщение.

·  После оплаты, и после сообщения магазину, пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL - скрипту передаются те же параметры, но подписанные с использованием пароля#1. Скрипт анализирует данные, сверяет их с данными, ранее полученными скриптом ResultURL (однако, магазин может вовсе и не использовать скрипт ResultURL, полагаясь только на данные SuccessURL) и выдает товар.

Для формирования / проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект.

Вы можете вовсе не формировать сверять подпись, если считаете это уместным уровнем безопасности. В таком случае скрипт ResultURL должен сверять корректность данных только по ip-адресу, и URL скрипта ResultURL не должен быть известем третьим лицам. SuccessURL при этом должен лишь брать состояние заказа, устанавливаемое скриптом ResultURL и в случае состояние «оплачено» выдавать товар.

Магазин с применением всех интерфейсов

В случае если конфигурация вашего сервера позволяет производить исходящие http и https запросы на сервер ROBOKASSA, то вы можете дополнительно усложнить ваш магазин, используя XML-интерфейсы.

Они позволяют предварительно считывать курсы обмена ROBOKASSA, список принимаемых валют. Что значительно расширяет ваши возможности по построению удобного пользовательского интерфейса вашего сайта.

Также вы можете в любой момент времени проверить состояние оплаты вашего заказа - большая стабильность, повышенная безопасность. К примеру, ваша система может не использовать ResultURL, а скрипт SuccessURL перед выдачей товара может проверять состояние оплаты заказа непосредственно у ROBOKASSA.

Методы формирования страниц отправки на оплату

Как можно увидеть из спецификации интерфейсов при отправке пользователя на оплату магазин должен сформировать уникальный (в пределах магазина) номер счета, по которому будет производиться последующий контроль операции оплаты.

Соответственно инициировать 2 операции с одним и тем же номером счета нельзя.

С этим связано несколько особенностей.

Если вы будете предоставлять URL калькулятора с уникальным номером счета на HTML-странице, пользователь должен переходить по данному URL только 1 раз (если он зайдет первый раз, начнет операцию, вернется, и попытается начать операцию заново - его уже не пустят).

Из этого следует, что если вы, например, резервируете товар на складе под каждый номер счета, то может сложиться такая ситуация, что вскоре некоторая часть товара окажется зарезервированной, но не оплаченной.

Поэтому если кнопка оплаты находится в таких местах, где пользователь еще не готов покупать, а может лишь пробовать процесс - ввод конкретного номера счета явно нежелателен.

Вариант 1 - не указывайте номера счета - при этом в момент инициализации операции оплаты будет сформирован уникальный счет. Естественно вы не сможете тогда контролировать операцию оплату по номеру счета - вы его просто не знаете, однако для определения пренадлежности платежа к заказу вы можете использовать свободные поля SHPxxx=yyy, где xxx и yyy - произвольные строки.

Например, вы формируете в магазине заказ, резервируете под него товар и сохраняете.

Этот заказ вы передаете пользовательским параметром при инициализации операции оплаты.

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

Вариант 2 - при нажатии на кнопку «оплатить» пользователь реально будет переходить на ваш скрипт, который уже и будет формировать уникальный номер счета, запоминать его, и перенаправлять пользователя на оплату этого счета.

Это естественные ограничения, однако, о них необходимо знать и помнить.

Примеры

Perl

Формирование URL переадресации пользователя на оплату

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# order properties

my $inv_id = 5; ### shop's invoice number

### (unique for shop's lifetime)

my $inv_desc = "desc"; ### invoice desc

my $out_summ = "5.12"; ### invoice summ

# build CRC value

my $crc = md5_hex("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

# build URL

my $url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&". "OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

# print URL if you need

print "Content-type: text/html\n\n";

print "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

# as a part of ResultURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass2");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# OK state

# print OK signature

print "Content-type: text/html\n\nOK$q{InvId}\n";

# perform some action (change order state to paid)

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

# as a part of SuccessURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass1");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# you can check here, that resultURL was called

# (for better security)

# OK, payment proceeds

print "Content-type: text/html\n\n";

echo "Thank you for using our service\n";

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Запрос состояния операции

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# connect module for requesting data via https

use Net::SSLeay;

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# order properties

my $inv_id = "5"; ### put your order number here

# build CRC

my $crc = md5_hex("$mrh_login:$inv_id:$mrh_pass2");

# make request

my $data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

my ($page) = Net::SSLeay::post_https("merchant. ", 443,

"/Handler/Xml/OpState. ashx", "", $data);

# analyze data

print "Content-type: text/xml\n\n";

print $page;

PHP

Формирование URL переадресации пользователя на оплату

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass1 = "securepass2"; // merchant pass1 here

// order properties

$inv_id = 5; // shop's invoice number

// (unique for shop's lifetime)

$inv_desc = "desc"; // invoice desc

$out_summ = "5.12"; // invoice summ

// build CRC value

$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

// build URL

$url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&".

"OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

// print URL if you need

echo "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

// as a part of ResultURL script

// your registration data

$mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

// HTTP parameters: $out_summ, $inv_id, $crc

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// print OK signature

echo "OK$inv_id\n";

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// as a part of SuccessURL script

// your registration data

$mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

echo "Thank you for using our service\n";

Запрос состояния операции

// you must have Curl module with HTTPS support installed

// to run this code

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

$inv_id = "5"; // put your order number here

// build CRC

$crc = md5("$mrh_login:$inv_id:$mrh_pass2");

// make request

$data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,

"https://merchant. /Handler/Xml/OpState. ashx");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// CURLOPT_RETURNTRANSFER doesn't work

$fp = tmpfile();

curl_setopt ($ch, CURLOPT_FILE, $fp);

if (!curl_exec($ch))

{

echo curl_error($ch);

}

curl_close($ch);

fseek($fp,0,SEEK_SET);

$page = fread($fp,1024);

fclose($fp);

// analyze data

echo $page;

ASP - JScript

Формирование URL переадресации пользователя на оплату

// install ASPHash. GenHash COM-object first

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass1 = "securepass1"; // merchant pass1 here

// order properties

var inv_id = 51; // shop's invoice number

// (unique for shop's lifetime)

var inv_desc = "desc"; // invoice desc

var out_summ = "5.12"; // invoice summ

// build CRC value

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+out_summ+":"+inv_id+":"+

mrh_pass1);

// build URL

var url = "https://merchant. /Index. aspx? MrchLogin="+mrh_login+"&"+

"OutSum="+out_summ+"&InvId="+inv_id+

"&Desc="+inv_desc+"&SignatureValue="+crc;

// print URL if you need

Response. Write("<a href='"+url+"'>Payment link</a>");

Получение уведомления об исполнении операции (ResultURL)

// install ASPHash. GenHash COM-object first

// as a part of ResultURL script

// your registration data

var mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters: out_summ, inv_id, crc

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass2);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// print OK signature

Response. Write("OK"+inv_id+"\n");

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// install ASPHash. GenHash COM-object first

// as a part of SuccessURL script

// your registration data

var mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass1);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service\n");

Запрос состояния операции

// install ASPHash. GenHash COM-object first

// install WinHttp. WinHttpRequest COM-object (from Microsoft site)

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

var inv_id = "5"; // put your order number here

// build CRC

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+inv_id+":"+mrh_pass2);

// make request

var data =

"<robox. opstate. req>"+

" <merchant_login>"+mrh_login+"</merchant_login>"+

" <merchant_invid>"+inv_id+"</merchant_invid>"+

" <crc>"+crc+"</crc>"+

"</robox. opstate. req>";

var sResponse = "";

try

{

var req = new ActiveXObject("WinHttp. WinHttpRequest");

req. SetTimeouts(10000, 10000, 15000, 15000);

req. Open("POST", "https://merchant. /Handler/Xml/OpState. ashx",

false);

req. SetRequestHeader(

"Content-Type",

"application/x-www-form-urlencoded");

req. Send(data);

sResponse = req. ResponseText;

}

catch(e)

{}

// analyze

Response. Write(sResponse);

Формирование URL переадресации пользователя на оплату

using System;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Init : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchLogin = "test";

string sMrchPass1 = "securepass1";

// order properties

decimal nOutSum = 5.12M;

int nInvId = 5;

string sDesc = "desc";

string sOutSum = nOutSum. ToString("0.00", CultureInfo. InvariantCulture);

string sCrcBase = string. Format("{0}:{1}:{2}:{3}",

sMrchLogin, sOutSum, nInvId, sMrchPass1);

// build CRC value

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sCrc = sbSignature. ToString();

// LinkButtonPay is System. Web. UI. WebControls. LinkButton;

LinkButtonPay. Text = "Payment link";

// build URL

LinkButtonPay. PostBackUrl = "https://merchant. /Index. aspx?" +

"MrchLogin=" + sMrchLogin +

"&OutSum=" + sOutSum +

"&InvId=" + nInvId +

"&Desc=" + sDesc +

"&SignatureValue=" + sCrc;

}

}

Получение уведомления об исполнении операции (ResultURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Result : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass2 = "securepass2";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass2);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

Response. Write(string. Format("OK{0}", sInvId));

// perform some action (change order state to paid)

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Success : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass1 = "securepass1";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass1);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

// you can check here, that ResultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service");

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

НЕ нашли? Не то? Что вы ищете?
Просмотр
REQUEST["SignatureValue"];

// HTTP parameters: $out_summ, $inv_id, $crc

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// print OK signature

echo "OK$inv_id\n";

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// as a part of SuccessURL script

// your registration data

$mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

$out_summ = Robokassa, описание интерфейсов | Контент-платформа Pandia.ru

Проект ориентирован на хранение и поиск узкоспециализированных данных, которые редко индексируются поисковыми системами

Robokassa, описание интерфейсов

Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ROBOKASSA

(Описание интерфейсов)

Общее описание

Интерфейсы сервиса ROBOKASSA предоставляют возможность получения Клиентом сервиса (магазином) средств от Покупателя в предпочитаемой им электронной валюте в заданном им количестве (объеме).

Покупатель выбирает в он-лайн магазине Клиента товар, магазин подсчитывает сумму Заказа в предпочитаемой Продавцом валюте и посылает запрос к серверу, на котором расположен сервис ROBOKASSA. Система возвращает серверу Клиента html код формы выбора валюты оплаты или кнопки оплаты, который используется на странице его сайта.

Покупатель выбирает на сайте Клиента или на странице Сервиса ROBOKASSA валюту платежа и приступает к платежу, нажав на кнопку оплаты. Сразу после оплаты Заказа Покупателем в выбранной им валюте производится конвертация полученных средств в валюту, предпочитаемую Продавцом и исходящий платеж в этой валюте на его счет в соответствующей платежной системе, указанный при регистрации.

После завершения операции в зависимости от ее исхода Покупатель перенаправляется на страницу исполненного платежа (в случае если он осуществил оплату), либо на страницу неисполненного (если он отказался от оплаты).

Сервис ROBOKASSA построен таким образом, что, в отличие от случая «подключения» непосредственно к серверу платежной системы, отпадает необходимость в усиленной защите данных в процессе обмена. Для интеграции кассы в сайт магазина, он-лайн казино или сайт предоставляющий платный доступ к контенту нет необходимости в установлении исходящих SSL соединений, подключении дополнительных компонент на сервере Клиента и т. п.. В этом заключено главное преимущество применения системы ROBOKASSA.

НЕ нашли? Не то? Что вы ищете?

Номер счета Клиента (магазина) на который будет поступать оплата товаров и/или услуг Продавца защищен от изменения, он задается только один раз – в момент регистрации Продавца в Сервисе. Это позволяет избежать одновременно и краж выручки посторонними лицами и любых злоупотреблений с денежными средствами со стороны обслуживающего персонала магазина.

Нежелательна возможность самостоятельной инициализации процедуры оплаты (путем ввода url с параметрами), иначе говоря, прежде чем пользователь станет оплачивать товар магазин должен сформировать у себя запись о начале процедуры оплаты (Заказ), определить требуемую сумму и отправить пользователя на оплату именно этого Заказа, с конкретной суммой. Реализовано это путем формирования MD5-контрольной суммы (подписи) параметров счета, и добавления подписи в URL системы, куда перенаправляется Покупатель для оплаты заказа. Подпись формируется по параметрам счета и паролю №1 магазина (устанавливается в интерфейсе администрирования).

Продавец может узнать у системы ROBOKASSA состояние операции оплаты, а также действующие в системе курсы обмена. Для этого используются XML интерфейсы, описанные в соответствующем разделе данного документа.

После оплаты обменный пункт отправляет сообщение магазину путем вызова ResultURL и передачей ему методом GET/POST/email параметров совершенного платежа, а также подписи, сформированной по параметрам оплаченного Заказа и паролю №2 магазина.

Запросы к XML-интерфейсам, информирующим о состоянии обменной операции, производятся с указанием контрольной суммы, сформированной по параметрам запроса + пароль2 магазина.

Примечание: Если не оговорено конкретно, понятия входяший/исходящий подразумеваются относительно системы ROBOKASSA.

Состав системы ROBOKASSA

Регистрационные данные Продавца

Online регистрация

Продавец (владелец магазина или сервиса) должен указать логин (далее sMerchantLogin), пароль для входа в Личный кабинет и внести в форму он-лайн регистрации следующие данные:

-  язык общения с администратором магазина;

-  наименование магазина;

-  URL сайта магазина (url главной страницы сайта)

-  e-mail адрес технического администратора магазина для связи;

-  пароль 1 (используется интерфейсом инициализации оплаты);

-  пароль 2 (используется интерфейсом оповещения о платеже, XML-интерфейсах);

-  Result URL (используется интерфейсом оповещения о платеже);

-  POST/GET/email метод отсылки данных в Result URL;

-  Success URL (используется в случае успешного проведения платежа);

-  POST/GET метод отсылки данных в Success URL;

-  Fail URL (используется в случае отказа проведения платежа);

-  POST/GET метод отсылки данных в Fail URL;

-  валюту, которую желает получать;

-  аккаунт в выбранной валюте, на который будут перечисляться средства.

Изменение регистрационной информации

После активации мерчанта изменение любых данных будет невозможно.

Интерфейс оплаты

Код встраиваемой кассы со списком возможных валют оплаты

При использовании как источник JScript-кода в HTML-тексте выводит окошко кассы с выбором сумм в различных валютах.

URL: http://merchant. roboxchange. local/Handler/MrchSumPreview. ashx

Параметры запроса (метод GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Culture=sCulture&

Encoding=sEncoding

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Если параметр не указан (пустая строка), то пользователю предоставляется возможность ввести сумму самостоятельно. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

sEncoding – кодировка, в которой возвращается HTML-код кассы. По умолчанию: windows-1251.

2. Инициализация оплаты

Магазин отправляет пользователя по данному адресу для произведения им оплаты. Предварительно магазин должен у себя запомнить счет (номер, сумма, дата формирования).

URL: https://merchant. /Index. aspx

Параметры запроса (метод POST либо GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Email=sEmail&

Culture=sCulture

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sEmail – опционально, e-mail пользователя. Пользователь может изменить его в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

Покупательатель отправляется на сайт оплату ROBOKASSA, после чего платеж в выбранной Продавцом валюте перечисляется (поступает) на его счет в выбранной им платежной системе. Промежуток времени между «началом операции» - «получением оплаты системой ROBOKASSA» ограничено одним часом, время завершения операции не ограничено. После оплаты сам Покупатель не заинтересован в затормаживании операции (ожидание завершения операции вполне можно прекратить через сутки).

3. Оповещение об оплате (ResultURL)

В случае успешного проведения оплаты робот системы проводит запрос по Result URL, с указанием следующих параметров (методом, выбранным в настройках):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue

[&пользовательские_параметры]

nOutSum – полученная магазином сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 - (устанавливается через интерфейс администрирования) т. е.

nOutSum:nInvId:sMerchantPass2[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy, то подпись формируется из строки

...:sMerchantPass2:shpa=yyy:shpb=xxx

Скрипт, находящийся по Result URL должен проверить правильность контрольной суммы и соответствия суммы платежа ожидаемой сумме. При формировании строки подписи учтите формат представления суммы (в строку при проверке подписи вставляйте именно полученное значение, без какого-либо форматирования).

Данный запрос производится после получения денег.

Факт успешности сообщения магазину об исполнении операции определяется по результату, возвращаемому обменному пункту. Результат должен содержать “OKnInvId”, т. е. для счета #5 должен быть возвращен текст “OK5”.

В случае невозможности связаться со скриптом по адресу Result URL (связь прерывается по time-out-у либо по отсутствию DNS-записи, либо получен не ожидаемый ответ) на email-адрес администратора магазина отправляется письмо и запрос Result URL считается завершенным успешно. В случае системаческого отсутствия связи между серверами магазина и обменного пункта лучше использовать метод определения оплаты с применением интерфейсов XML, а самый желательный и защищенный способ - совмещенный.

4. Переадресация пользователя при успешной оплате (SuccessURL)

В случае успешного исполнения платежа Покупатель может перейти по данному адресу.

Методом, выбранным при регистрации будет передан следующих параметр («чек» об оплате):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 (указывается при регистрации) т. е.

nOutSum:nInvID:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy то подпись формируется из строки

…:sMerchantPass1:shpa=yyy:shpb=xxx

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение по email-адресу, установленному в качестве Success URL через интерфейс администрирования.

Переход пользователя по данному адресу с корректными параметрами (соответствия CRC) означает, что платеж по реквизитам Продавца выполнен успешно. Сервис несет финансовую ответственность перед Продавцом в соответствии с Соглашением за достоверность такого подтверждения.

Однако для дополнительной защиты желательно, чтобы факт оплаты платежа проверялся скриптом исполняемым при переходе на Result URL, или путем запроса XML-интерфейса о результате данной платежной операции, и только при реальном наличии счета с номером nInvId в БД магазина.

5. Переадресация пользователя при отказе от оплаты (FailURL)

В случае отказа от исполнения платежа Покупатель перенаправляется по данному адресу.

Для того, чтобы Продавец мог разблокировать заказанный товар на складе при отказе от его оплаты методом, выбранным при регистрации, будет переданы параметры:

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение об отказе Покупателя от оплаты Заказа по email-адресу, находящемуся в Fail URL.

Переход пользователя по данному адресу вообще говоря не означает окончательного отказа Покупателя от оплаты, нажав кнопку «Back» в броузере он может вернуться на страницы ROBOKASSA. Поэтому в случае блокировки товара на складе под заказ для его разблокировки желательно проверять факт отказа от платежа запросом запроса XML-интерфейса о результате данной платежной операции используя в запросе номер счета nInvId имеющийся в БД магазина (Продавца).

XML интерфейсы

1. Список валют обменного пункта.

По данному запросу Сервисом предоставляется полный список наименований электронных валют

URL: http://merchant. /Handler/Xml/CurrList. ashx

Параметров нет.

Ответ:

<robox. currlist. resp>

<item>

<curr>sCurrLabel</curr>

<curr_name>sCurrName</curr_name>

</item>

</robox. currlist. resp>

Тегов <item> может быть несколько, каждый из них описывает 1 валюту.

sCurrLabel – метка входящей валюты

sCurrName – имя входящей валюты (это наименование можно показывать пользователю).

2. Получение списка курсов обмена

URL: http://merchant. /Handler/Xml/Rate. ashx

Параметры запроса (метод POST):

<robox. rate. req>

<in_curr>sIncCurrLabel</in_curr>

<out_curr>sOutCurrLabel</out_curr>

<merchant_login>sMerchantLogin</merchant_login>

<out_cnt>nOutCount</out_cnt>

</robox. rate. req>

sIncCurrLabel – метка входящей валюты, если не указана будут возвращены курсы по всем возможным валютам

sOutCurrLabel – метка исходящей валюты

sMerchantLogin – login магазина в обменном пункте

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков. По умолчанию принимается 1.

Исходящая валюта определяется либо по параметру sOutCurrLabel, либо по sMerchantLogin-у (в качестве исходящей берется валюта, выбранная при регистрации). sMerchantLogin имеет приоритет

Ответ:

<robox. rate. resp>

<retval>nRetCode</retval>

<out_curr>sOutCurrLabelr</out_curr>

<out_cnt>nOutCount</out_cnt>

<date>sDateODBC120</date>

<ratelist>

<rate>

<in_curr>sIncCurrLabelr</in_curr>

<in_curr_name>sIncCurrName</in_curr_name>

<value>nValuet</value>

<ins_per_Xout>nInCount</ins_per_Xout>

</rate>

...

</ratelist>

</robox. rate. resp>

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

0 - нет ошибки.

1 - sIncCurrLabel задан неверно

2 - sOutCurrLabel задан неверно

3 - sMerchantLogin не найден

4 - nOutCnt задан неверно

sOutCurrLabel – метка исходящей валюты

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков

sDateODBC120 – дата, на которую возвращено состояние курсов. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”), GMT.

Тегов <rate> может быть несколько (особенно если в запросе не указан <in_curr>), каждый из них описывает 1 курс.

sIncCurrLabel – метка входящей валюты

sIncCurrName – имя входящей валюты (это наименование можно показывать пользователю).

nValue – количество денежных знаков входящей валюты, приходящиеся на 1 денежный знак исходящей валюты (sOutCurr), без округлений до элементарных единиц входящей валюты.

nInCount – количество денежных знаков входящей валюты, которые пользователь должен оплатить для получения магазином nOutCount - денежных знаков исходящей валюты (sOutCurrLabel). Округлено до элементарных единиц входящей валюты.

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

3. Интерфейс получения состояния операций

URL: https://merchant. /Handler/Xml/OpState. ashx

Параметры запроса (метод POST):

<robox. opstate. req>

<merchant_login>sMerchantLogin</merchant_login>

<merchant_invid>sInvId</merchant_invid>

<crc>sSignatureValue</crc>

</robox. opstate. req>

sMerchantLogin – login магазина в обменном пункте

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 16-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 (указывается при регистрации) т. е.

sMerchantLogin:nInvId:sMerchantPass2

Ответ:

<robox. opstate. resp>

<retval>nRetCode</retval>

<date>sDateODBC120</date>

<out_curr>sOutCurrLabel</out_curr>

<opstate>

<out_cnt>nOutCount</out_cnt>

<state>nState</state>

</opstate>

</robox. opstate. resp>

sDateODBC120 – дата, на которую возвращено состояние операции. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”).

sOutCurrLabel – метка исходящей валюты

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

-9 - sSignatureValue не указана, либо неверного вида (длина должна быть 32

символа)

-2 - sInvId не задан либо не является числом

0 - нет ошибки. При этом присутствует тег <opstate>.

1 - указанный sMerchantLogin не найден

9 - неверно задана контрольная сумма

10 - операция с данным sInvId не найдена (возможно еще не инициирована)

nOutCount – количество денежных знаков исходящей валюты данной операции

nState - состояние операции :

5 - только инициирована, деньги не получены

10 - деньги не были получены, операция отменена

50 - деньги от пользователя получены, производится зачисление денег на счет магазина

60 - деньги после получения были возвращены пользователю

80 - исполнение операции приостановлено

100 - операция завершена успешно

Необходимо помнить, что операция инициируется не в момент ухода пользователя на оплату, а позже - после подтверждения его платежных реквизитов, т. е. вы вполне можете не находить операцию, которая по вашему мнению уже должна начаться.

Описание методов построения магазинов

Простейший магазин без формирования уникального номера счета.

Поскольку ваш сайт не может как-либо контролировать процесс, вам скорее всего придется самостоятельно отправлять товар.

Основная схема работы магазина:

·  сформировав подпись вы направляете пользователя на оплату, используя JScript-код кассы, в результате чего на странице появляется касса с выбором валюты оплаты, либо ссылку на оплату.

·  пользователь, выбрав валюту, и нажав кнопку "оплатить" попадает на страницы ROBOKASSA, и производит оплату (на кошелек магазина при этом поступают средства в вашей валюте).

·  по окончании процесса на email-адрес оператора магазина посылается сообщение о произведенной операции, а пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL. Вашему SuccessURL скрипту передаются те же параметры, что и при инициализации оплаты.

На этой странице вы можете расположить текст вида "В ближайшее время оператор отошлет вам купленный товар".
Либо можете расположить сам товар, в случае, если ваш скрипт получает переданные ему параметры и проверяет правильность подписи. В противном случае пользователь может самостоятельно, без оплаты, перейти на этот URL.

Для формирования/проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект

Если вы имеете в магазине несколько товаров либо несколько товаров с одинаковой ценой, то для их идентификации используйте пользовательские параметры - параметры магазина, начинающиеся с префикса 'shp'. Пользовательские параметры передаются наряду с другими в момент инициализации оплаты и должны быть учтены при формировании подписи.

При регистрации :

·  «ResultURL» - email-адрес оператора магазина, метод отправки данных - email,

·  «SuccessURL» - адрес страницы с товаром, куда отправится пользователь после оплаты, метод отправки данных не имеет значения

·  «FailURL» - адрес вашего магазина, метод отправки данных не имеет значения

Магазин, формирующий уникальный номера счета, но без формирования запросов

Схема работы магазина следующая:

·  скрипт магазина направляет пользователя на оплату, используя JScript-код кассы, либо URL калькулятора, при этом он может запретить произвольную инициализацию оплаты, закрыв данный URL подписью.

·  после оплаты, ROBOKASSA уведомляет магазин о том, что платеж совершен, вызывая скрипт, находящийся по адресу ResultURL - скрипту передаются параметры платежа, подписанные ROBOKASSA с использованием пароля#2. Скрипт, указанному заказу устанавливает в БД магазина состояние «оплачено». Если в момент оповещение между ROBOKASSA и магазином отсутствует связь - администратору магазина отправляется email-сообщение.

·  После оплаты, и после сообщения магазину, пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL - скрипту передаются те же параметры, но подписанные с использованием пароля#1. Скрипт анализирует данные, сверяет их с данными, ранее полученными скриптом ResultURL (однако, магазин может вовсе и не использовать скрипт ResultURL, полагаясь только на данные SuccessURL) и выдает товар.

Для формирования / проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект.

Вы можете вовсе не формировать сверять подпись, если считаете это уместным уровнем безопасности. В таком случае скрипт ResultURL должен сверять корректность данных только по ip-адресу, и URL скрипта ResultURL не должен быть известем третьим лицам. SuccessURL при этом должен лишь брать состояние заказа, устанавливаемое скриптом ResultURL и в случае состояние «оплачено» выдавать товар.

Магазин с применением всех интерфейсов

В случае если конфигурация вашего сервера позволяет производить исходящие http и https запросы на сервер ROBOKASSA, то вы можете дополнительно усложнить ваш магазин, используя XML-интерфейсы.

Они позволяют предварительно считывать курсы обмена ROBOKASSA, список принимаемых валют. Что значительно расширяет ваши возможности по построению удобного пользовательского интерфейса вашего сайта.

Также вы можете в любой момент времени проверить состояние оплаты вашего заказа - большая стабильность, повышенная безопасность. К примеру, ваша система может не использовать ResultURL, а скрипт SuccessURL перед выдачей товара может проверять состояние оплаты заказа непосредственно у ROBOKASSA.

Методы формирования страниц отправки на оплату

Как можно увидеть из спецификации интерфейсов при отправке пользователя на оплату магазин должен сформировать уникальный (в пределах магазина) номер счета, по которому будет производиться последующий контроль операции оплаты.

Соответственно инициировать 2 операции с одним и тем же номером счета нельзя.

С этим связано несколько особенностей.

Если вы будете предоставлять URL калькулятора с уникальным номером счета на HTML-странице, пользователь должен переходить по данному URL только 1 раз (если он зайдет первый раз, начнет операцию, вернется, и попытается начать операцию заново - его уже не пустят).

Из этого следует, что если вы, например, резервируете товар на складе под каждый номер счета, то может сложиться такая ситуация, что вскоре некоторая часть товара окажется зарезервированной, но не оплаченной.

Поэтому если кнопка оплаты находится в таких местах, где пользователь еще не готов покупать, а может лишь пробовать процесс - ввод конкретного номера счета явно нежелателен.

Вариант 1 - не указывайте номера счета - при этом в момент инициализации операции оплаты будет сформирован уникальный счет. Естественно вы не сможете тогда контролировать операцию оплату по номеру счета - вы его просто не знаете, однако для определения пренадлежности платежа к заказу вы можете использовать свободные поля SHPxxx=yyy, где xxx и yyy - произвольные строки.

Например, вы формируете в магазине заказ, резервируете под него товар и сохраняете.

Этот заказ вы передаете пользовательским параметром при инициализации операции оплаты.

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

Вариант 2 - при нажатии на кнопку «оплатить» пользователь реально будет переходить на ваш скрипт, который уже и будет формировать уникальный номер счета, запоминать его, и перенаправлять пользователя на оплату этого счета.

Это естественные ограничения, однако, о них необходимо знать и помнить.

Примеры

Perl

Формирование URL переадресации пользователя на оплату

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# order properties

my $inv_id = 5; ### shop's invoice number

### (unique for shop's lifetime)

my $inv_desc = "desc"; ### invoice desc

my $out_summ = "5.12"; ### invoice summ

# build CRC value

my $crc = md5_hex("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

# build URL

my $url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&". "OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

# print URL if you need

print "Content-type: text/html\n\n";

print "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

# as a part of ResultURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass2");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# OK state

# print OK signature

print "Content-type: text/html\n\nOK$q{InvId}\n";

# perform some action (change order state to paid)

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

# as a part of SuccessURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass1");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# you can check here, that resultURL was called

# (for better security)

# OK, payment proceeds

print "Content-type: text/html\n\n";

echo "Thank you for using our service\n";

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Запрос состояния операции

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# connect module for requesting data via https

use Net::SSLeay;

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# order properties

my $inv_id = "5"; ### put your order number here

# build CRC

my $crc = md5_hex("$mrh_login:$inv_id:$mrh_pass2");

# make request

my $data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

my ($page) = Net::SSLeay::post_https("merchant. ", 443,

"/Handler/Xml/OpState. ashx", "", $data);

# analyze data

print "Content-type: text/xml\n\n";

print $page;

PHP

Формирование URL переадресации пользователя на оплату

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass1 = "securepass2"; // merchant pass1 here

// order properties

$inv_id = 5; // shop's invoice number

// (unique for shop's lifetime)

$inv_desc = "desc"; // invoice desc

$out_summ = "5.12"; // invoice summ

// build CRC value

$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

// build URL

$url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&".

"OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

// print URL if you need

echo "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

// as a part of ResultURL script

// your registration data

$mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

// HTTP parameters: $out_summ, $inv_id, $crc

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// print OK signature

echo "OK$inv_id\n";

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// as a part of SuccessURL script

// your registration data

$mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

echo "Thank you for using our service\n";

Запрос состояния операции

// you must have Curl module with HTTPS support installed

// to run this code

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

$inv_id = "5"; // put your order number here

// build CRC

$crc = md5("$mrh_login:$inv_id:$mrh_pass2");

// make request

$data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,

"https://merchant. /Handler/Xml/OpState. ashx");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// CURLOPT_RETURNTRANSFER doesn't work

$fp = tmpfile();

curl_setopt ($ch, CURLOPT_FILE, $fp);

if (!curl_exec($ch))

{

echo curl_error($ch);

}

curl_close($ch);

fseek($fp,0,SEEK_SET);

$page = fread($fp,1024);

fclose($fp);

// analyze data

echo $page;

ASP - JScript

Формирование URL переадресации пользователя на оплату

// install ASPHash. GenHash COM-object first

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass1 = "securepass1"; // merchant pass1 here

// order properties

var inv_id = 51; // shop's invoice number

// (unique for shop's lifetime)

var inv_desc = "desc"; // invoice desc

var out_summ = "5.12"; // invoice summ

// build CRC value

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+out_summ+":"+inv_id+":"+

mrh_pass1);

// build URL

var url = "https://merchant. /Index. aspx? MrchLogin="+mrh_login+"&"+

"OutSum="+out_summ+"&InvId="+inv_id+

"&Desc="+inv_desc+"&SignatureValue="+crc;

// print URL if you need

Response. Write("<a href='"+url+"'>Payment link</a>");

Получение уведомления об исполнении операции (ResultURL)

// install ASPHash. GenHash COM-object first

// as a part of ResultURL script

// your registration data

var mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters: out_summ, inv_id, crc

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass2);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// print OK signature

Response. Write("OK"+inv_id+"\n");

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// install ASPHash. GenHash COM-object first

// as a part of SuccessURL script

// your registration data

var mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass1);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service\n");

Запрос состояния операции

// install ASPHash. GenHash COM-object first

// install WinHttp. WinHttpRequest COM-object (from Microsoft site)

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

var inv_id = "5"; // put your order number here

// build CRC

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+inv_id+":"+mrh_pass2);

// make request

var data =

"<robox. opstate. req>"+

" <merchant_login>"+mrh_login+"</merchant_login>"+

" <merchant_invid>"+inv_id+"</merchant_invid>"+

" <crc>"+crc+"</crc>"+

"</robox. opstate. req>";

var sResponse = "";

try

{

var req = new ActiveXObject("WinHttp. WinHttpRequest");

req. SetTimeouts(10000, 10000, 15000, 15000);

req. Open("POST", "https://merchant. /Handler/Xml/OpState. ashx",

false);

req. SetRequestHeader(

"Content-Type",

"application/x-www-form-urlencoded");

req. Send(data);

sResponse = req. ResponseText;

}

catch(e)

{}

// analyze

Response. Write(sResponse);

Формирование URL переадресации пользователя на оплату

using System;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Init : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchLogin = "test";

string sMrchPass1 = "securepass1";

// order properties

decimal nOutSum = 5.12M;

int nInvId = 5;

string sDesc = "desc";

string sOutSum = nOutSum. ToString("0.00", CultureInfo. InvariantCulture);

string sCrcBase = string. Format("{0}:{1}:{2}:{3}",

sMrchLogin, sOutSum, nInvId, sMrchPass1);

// build CRC value

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sCrc = sbSignature. ToString();

// LinkButtonPay is System. Web. UI. WebControls. LinkButton;

LinkButtonPay. Text = "Payment link";

// build URL

LinkButtonPay. PostBackUrl = "https://merchant. /Index. aspx?" +

"MrchLogin=" + sMrchLogin +

"&OutSum=" + sOutSum +

"&InvId=" + nInvId +

"&Desc=" + sDesc +

"&SignatureValue=" + sCrc;

}

}

Получение уведомления об исполнении операции (ResultURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Result : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass2 = "securepass2";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass2);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

Response. Write(string. Format("OK{0}", sInvId));

// perform some action (change order state to paid)

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Success : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass1 = "securepass1";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass1);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

// you can check here, that ResultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service");

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

НЕ нашли? Не то? Что вы ищете?
Просмотр
REQUEST["OutSum"];

$inv_id = Robokassa, описание интерфейсов | Контент-платформа Pandia.ru

Проект ориентирован на хранение и поиск узкоспециализированных данных, которые редко индексируются поисковыми системами

Robokassa, описание интерфейсов

Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ROBOKASSA

(Описание интерфейсов)

Общее описание

Интерфейсы сервиса ROBOKASSA предоставляют возможность получения Клиентом сервиса (магазином) средств от Покупателя в предпочитаемой им электронной валюте в заданном им количестве (объеме).

Покупатель выбирает в он-лайн магазине Клиента товар, магазин подсчитывает сумму Заказа в предпочитаемой Продавцом валюте и посылает запрос к серверу, на котором расположен сервис ROBOKASSA. Система возвращает серверу Клиента html код формы выбора валюты оплаты или кнопки оплаты, который используется на странице его сайта.

Покупатель выбирает на сайте Клиента или на странице Сервиса ROBOKASSA валюту платежа и приступает к платежу, нажав на кнопку оплаты. Сразу после оплаты Заказа Покупателем в выбранной им валюте производится конвертация полученных средств в валюту, предпочитаемую Продавцом и исходящий платеж в этой валюте на его счет в соответствующей платежной системе, указанный при регистрации.

После завершения операции в зависимости от ее исхода Покупатель перенаправляется на страницу исполненного платежа (в случае если он осуществил оплату), либо на страницу неисполненного (если он отказался от оплаты).

Сервис ROBOKASSA построен таким образом, что, в отличие от случая «подключения» непосредственно к серверу платежной системы, отпадает необходимость в усиленной защите данных в процессе обмена. Для интеграции кассы в сайт магазина, он-лайн казино или сайт предоставляющий платный доступ к контенту нет необходимости в установлении исходящих SSL соединений, подключении дополнительных компонент на сервере Клиента и т. п.. В этом заключено главное преимущество применения системы ROBOKASSA.

НЕ нашли? Не то? Что вы ищете?

Номер счета Клиента (магазина) на который будет поступать оплата товаров и/или услуг Продавца защищен от изменения, он задается только один раз – в момент регистрации Продавца в Сервисе. Это позволяет избежать одновременно и краж выручки посторонними лицами и любых злоупотреблений с денежными средствами со стороны обслуживающего персонала магазина.

Нежелательна возможность самостоятельной инициализации процедуры оплаты (путем ввода url с параметрами), иначе говоря, прежде чем пользователь станет оплачивать товар магазин должен сформировать у себя запись о начале процедуры оплаты (Заказ), определить требуемую сумму и отправить пользователя на оплату именно этого Заказа, с конкретной суммой. Реализовано это путем формирования MD5-контрольной суммы (подписи) параметров счета, и добавления подписи в URL системы, куда перенаправляется Покупатель для оплаты заказа. Подпись формируется по параметрам счета и паролю №1 магазина (устанавливается в интерфейсе администрирования).

Продавец может узнать у системы ROBOKASSA состояние операции оплаты, а также действующие в системе курсы обмена. Для этого используются XML интерфейсы, описанные в соответствующем разделе данного документа.

После оплаты обменный пункт отправляет сообщение магазину путем вызова ResultURL и передачей ему методом GET/POST/email параметров совершенного платежа, а также подписи, сформированной по параметрам оплаченного Заказа и паролю №2 магазина.

Запросы к XML-интерфейсам, информирующим о состоянии обменной операции, производятся с указанием контрольной суммы, сформированной по параметрам запроса + пароль2 магазина.

Примечание: Если не оговорено конкретно, понятия входяший/исходящий подразумеваются относительно системы ROBOKASSA.

Состав системы ROBOKASSA

Регистрационные данные Продавца

Online регистрация

Продавец (владелец магазина или сервиса) должен указать логин (далее sMerchantLogin), пароль для входа в Личный кабинет и внести в форму он-лайн регистрации следующие данные:

-  язык общения с администратором магазина;

-  наименование магазина;

-  URL сайта магазина (url главной страницы сайта)

-  e-mail адрес технического администратора магазина для связи;

-  пароль 1 (используется интерфейсом инициализации оплаты);

-  пароль 2 (используется интерфейсом оповещения о платеже, XML-интерфейсах);

-  Result URL (используется интерфейсом оповещения о платеже);

-  POST/GET/email метод отсылки данных в Result URL;

-  Success URL (используется в случае успешного проведения платежа);

-  POST/GET метод отсылки данных в Success URL;

-  Fail URL (используется в случае отказа проведения платежа);

-  POST/GET метод отсылки данных в Fail URL;

-  валюту, которую желает получать;

-  аккаунт в выбранной валюте, на который будут перечисляться средства.

Изменение регистрационной информации

После активации мерчанта изменение любых данных будет невозможно.

Интерфейс оплаты

Код встраиваемой кассы со списком возможных валют оплаты

При использовании как источник JScript-кода в HTML-тексте выводит окошко кассы с выбором сумм в различных валютах.

URL: http://merchant. roboxchange. local/Handler/MrchSumPreview. ashx

Параметры запроса (метод GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Culture=sCulture&

Encoding=sEncoding

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Если параметр не указан (пустая строка), то пользователю предоставляется возможность ввести сумму самостоятельно. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

sEncoding – кодировка, в которой возвращается HTML-код кассы. По умолчанию: windows-1251.

2. Инициализация оплаты

Магазин отправляет пользователя по данному адресу для произведения им оплаты. Предварительно магазин должен у себя запомнить счет (номер, сумма, дата формирования).

URL: https://merchant. /Index. aspx

Параметры запроса (метод POST либо GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Email=sEmail&

Culture=sCulture

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sEmail – опционально, e-mail пользователя. Пользователь может изменить его в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

Покупательатель отправляется на сайт оплату ROBOKASSA, после чего платеж в выбранной Продавцом валюте перечисляется (поступает) на его счет в выбранной им платежной системе. Промежуток времени между «началом операции» - «получением оплаты системой ROBOKASSA» ограничено одним часом, время завершения операции не ограничено. После оплаты сам Покупатель не заинтересован в затормаживании операции (ожидание завершения операции вполне можно прекратить через сутки).

3. Оповещение об оплате (ResultURL)

В случае успешного проведения оплаты робот системы проводит запрос по Result URL, с указанием следующих параметров (методом, выбранным в настройках):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue

[&пользовательские_параметры]

nOutSum – полученная магазином сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 - (устанавливается через интерфейс администрирования) т. е.

nOutSum:nInvId:sMerchantPass2[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy, то подпись формируется из строки

...:sMerchantPass2:shpa=yyy:shpb=xxx

Скрипт, находящийся по Result URL должен проверить правильность контрольной суммы и соответствия суммы платежа ожидаемой сумме. При формировании строки подписи учтите формат представления суммы (в строку при проверке подписи вставляйте именно полученное значение, без какого-либо форматирования).

Данный запрос производится после получения денег.

Факт успешности сообщения магазину об исполнении операции определяется по результату, возвращаемому обменному пункту. Результат должен содержать “OKnInvId”, т. е. для счета #5 должен быть возвращен текст “OK5”.

В случае невозможности связаться со скриптом по адресу Result URL (связь прерывается по time-out-у либо по отсутствию DNS-записи, либо получен не ожидаемый ответ) на email-адрес администратора магазина отправляется письмо и запрос Result URL считается завершенным успешно. В случае системаческого отсутствия связи между серверами магазина и обменного пункта лучше использовать метод определения оплаты с применением интерфейсов XML, а самый желательный и защищенный способ - совмещенный.

4. Переадресация пользователя при успешной оплате (SuccessURL)

В случае успешного исполнения платежа Покупатель может перейти по данному адресу.

Методом, выбранным при регистрации будет передан следующих параметр («чек» об оплате):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 (указывается при регистрации) т. е.

nOutSum:nInvID:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy то подпись формируется из строки

…:sMerchantPass1:shpa=yyy:shpb=xxx

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение по email-адресу, установленному в качестве Success URL через интерфейс администрирования.

Переход пользователя по данному адресу с корректными параметрами (соответствия CRC) означает, что платеж по реквизитам Продавца выполнен успешно. Сервис несет финансовую ответственность перед Продавцом в соответствии с Соглашением за достоверность такого подтверждения.

Однако для дополнительной защиты желательно, чтобы факт оплаты платежа проверялся скриптом исполняемым при переходе на Result URL, или путем запроса XML-интерфейса о результате данной платежной операции, и только при реальном наличии счета с номером nInvId в БД магазина.

5. Переадресация пользователя при отказе от оплаты (FailURL)

В случае отказа от исполнения платежа Покупатель перенаправляется по данному адресу.

Для того, чтобы Продавец мог разблокировать заказанный товар на складе при отказе от его оплаты методом, выбранным при регистрации, будет переданы параметры:

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение об отказе Покупателя от оплаты Заказа по email-адресу, находящемуся в Fail URL.

Переход пользователя по данному адресу вообще говоря не означает окончательного отказа Покупателя от оплаты, нажав кнопку «Back» в броузере он может вернуться на страницы ROBOKASSA. Поэтому в случае блокировки товара на складе под заказ для его разблокировки желательно проверять факт отказа от платежа запросом запроса XML-интерфейса о результате данной платежной операции используя в запросе номер счета nInvId имеющийся в БД магазина (Продавца).

XML интерфейсы

1. Список валют обменного пункта.

По данному запросу Сервисом предоставляется полный список наименований электронных валют

URL: http://merchant. /Handler/Xml/CurrList. ashx

Параметров нет.

Ответ:

<robox. currlist. resp>

<item>

<curr>sCurrLabel</curr>

<curr_name>sCurrName</curr_name>

</item>

</robox. currlist. resp>

Тегов <item> может быть несколько, каждый из них описывает 1 валюту.

sCurrLabel – метка входящей валюты

sCurrName – имя входящей валюты (это наименование можно показывать пользователю).

2. Получение списка курсов обмена

URL: http://merchant. /Handler/Xml/Rate. ashx

Параметры запроса (метод POST):

<robox. rate. req>

<in_curr>sIncCurrLabel</in_curr>

<out_curr>sOutCurrLabel</out_curr>

<merchant_login>sMerchantLogin</merchant_login>

<out_cnt>nOutCount</out_cnt>

</robox. rate. req>

sIncCurrLabel – метка входящей валюты, если не указана будут возвращены курсы по всем возможным валютам

sOutCurrLabel – метка исходящей валюты

sMerchantLogin – login магазина в обменном пункте

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков. По умолчанию принимается 1.

Исходящая валюта определяется либо по параметру sOutCurrLabel, либо по sMerchantLogin-у (в качестве исходящей берется валюта, выбранная при регистрации). sMerchantLogin имеет приоритет

Ответ:

<robox. rate. resp>

<retval>nRetCode</retval>

<out_curr>sOutCurrLabelr</out_curr>

<out_cnt>nOutCount</out_cnt>

<date>sDateODBC120</date>

<ratelist>

<rate>

<in_curr>sIncCurrLabelr</in_curr>

<in_curr_name>sIncCurrName</in_curr_name>

<value>nValuet</value>

<ins_per_Xout>nInCount</ins_per_Xout>

</rate>

...

</ratelist>

</robox. rate. resp>

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

0 - нет ошибки.

1 - sIncCurrLabel задан неверно

2 - sOutCurrLabel задан неверно

3 - sMerchantLogin не найден

4 - nOutCnt задан неверно

sOutCurrLabel – метка исходящей валюты

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков

sDateODBC120 – дата, на которую возвращено состояние курсов. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”), GMT.

Тегов <rate> может быть несколько (особенно если в запросе не указан <in_curr>), каждый из них описывает 1 курс.

sIncCurrLabel – метка входящей валюты

sIncCurrName – имя входящей валюты (это наименование можно показывать пользователю).

nValue – количество денежных знаков входящей валюты, приходящиеся на 1 денежный знак исходящей валюты (sOutCurr), без округлений до элементарных единиц входящей валюты.

nInCount – количество денежных знаков входящей валюты, которые пользователь должен оплатить для получения магазином nOutCount - денежных знаков исходящей валюты (sOutCurrLabel). Округлено до элементарных единиц входящей валюты.

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

3. Интерфейс получения состояния операций

URL: https://merchant. /Handler/Xml/OpState. ashx

Параметры запроса (метод POST):

<robox. opstate. req>

<merchant_login>sMerchantLogin</merchant_login>

<merchant_invid>sInvId</merchant_invid>

<crc>sSignatureValue</crc>

</robox. opstate. req>

sMerchantLogin – login магазина в обменном пункте

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 16-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 (указывается при регистрации) т. е.

sMerchantLogin:nInvId:sMerchantPass2

Ответ:

<robox. opstate. resp>

<retval>nRetCode</retval>

<date>sDateODBC120</date>

<out_curr>sOutCurrLabel</out_curr>

<opstate>

<out_cnt>nOutCount</out_cnt>

<state>nState</state>

</opstate>

</robox. opstate. resp>

sDateODBC120 – дата, на которую возвращено состояние операции. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”).

sOutCurrLabel – метка исходящей валюты

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

-9 - sSignatureValue не указана, либо неверного вида (длина должна быть 32

символа)

-2 - sInvId не задан либо не является числом

0 - нет ошибки. При этом присутствует тег <opstate>.

1 - указанный sMerchantLogin не найден

9 - неверно задана контрольная сумма

10 - операция с данным sInvId не найдена (возможно еще не инициирована)

nOutCount – количество денежных знаков исходящей валюты данной операции

nState - состояние операции :

5 - только инициирована, деньги не получены

10 - деньги не были получены, операция отменена

50 - деньги от пользователя получены, производится зачисление денег на счет магазина

60 - деньги после получения были возвращены пользователю

80 - исполнение операции приостановлено

100 - операция завершена успешно

Необходимо помнить, что операция инициируется не в момент ухода пользователя на оплату, а позже - после подтверждения его платежных реквизитов, т. е. вы вполне можете не находить операцию, которая по вашему мнению уже должна начаться.

Описание методов построения магазинов

Простейший магазин без формирования уникального номера счета.

Поскольку ваш сайт не может как-либо контролировать процесс, вам скорее всего придется самостоятельно отправлять товар.

Основная схема работы магазина:

·  сформировав подпись вы направляете пользователя на оплату, используя JScript-код кассы, в результате чего на странице появляется касса с выбором валюты оплаты, либо ссылку на оплату.

·  пользователь, выбрав валюту, и нажав кнопку "оплатить" попадает на страницы ROBOKASSA, и производит оплату (на кошелек магазина при этом поступают средства в вашей валюте).

·  по окончании процесса на email-адрес оператора магазина посылается сообщение о произведенной операции, а пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL. Вашему SuccessURL скрипту передаются те же параметры, что и при инициализации оплаты.

На этой странице вы можете расположить текст вида "В ближайшее время оператор отошлет вам купленный товар".
Либо можете расположить сам товар, в случае, если ваш скрипт получает переданные ему параметры и проверяет правильность подписи. В противном случае пользователь может самостоятельно, без оплаты, перейти на этот URL.

Для формирования/проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект

Если вы имеете в магазине несколько товаров либо несколько товаров с одинаковой ценой, то для их идентификации используйте пользовательские параметры - параметры магазина, начинающиеся с префикса 'shp'. Пользовательские параметры передаются наряду с другими в момент инициализации оплаты и должны быть учтены при формировании подписи.

При регистрации :

·  «ResultURL» - email-адрес оператора магазина, метод отправки данных - email,

·  «SuccessURL» - адрес страницы с товаром, куда отправится пользователь после оплаты, метод отправки данных не имеет значения

·  «FailURL» - адрес вашего магазина, метод отправки данных не имеет значения

Магазин, формирующий уникальный номера счета, но без формирования запросов

Схема работы магазина следующая:

·  скрипт магазина направляет пользователя на оплату, используя JScript-код кассы, либо URL калькулятора, при этом он может запретить произвольную инициализацию оплаты, закрыв данный URL подписью.

·  после оплаты, ROBOKASSA уведомляет магазин о том, что платеж совершен, вызывая скрипт, находящийся по адресу ResultURL - скрипту передаются параметры платежа, подписанные ROBOKASSA с использованием пароля#2. Скрипт, указанному заказу устанавливает в БД магазина состояние «оплачено». Если в момент оповещение между ROBOKASSA и магазином отсутствует связь - администратору магазина отправляется email-сообщение.

·  После оплаты, и после сообщения магазину, пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL - скрипту передаются те же параметры, но подписанные с использованием пароля#1. Скрипт анализирует данные, сверяет их с данными, ранее полученными скриптом ResultURL (однако, магазин может вовсе и не использовать скрипт ResultURL, полагаясь только на данные SuccessURL) и выдает товар.

Для формирования / проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект.

Вы можете вовсе не формировать сверять подпись, если считаете это уместным уровнем безопасности. В таком случае скрипт ResultURL должен сверять корректность данных только по ip-адресу, и URL скрипта ResultURL не должен быть известем третьим лицам. SuccessURL при этом должен лишь брать состояние заказа, устанавливаемое скриптом ResultURL и в случае состояние «оплачено» выдавать товар.

Магазин с применением всех интерфейсов

В случае если конфигурация вашего сервера позволяет производить исходящие http и https запросы на сервер ROBOKASSA, то вы можете дополнительно усложнить ваш магазин, используя XML-интерфейсы.

Они позволяют предварительно считывать курсы обмена ROBOKASSA, список принимаемых валют. Что значительно расширяет ваши возможности по построению удобного пользовательского интерфейса вашего сайта.

Также вы можете в любой момент времени проверить состояние оплаты вашего заказа - большая стабильность, повышенная безопасность. К примеру, ваша система может не использовать ResultURL, а скрипт SuccessURL перед выдачей товара может проверять состояние оплаты заказа непосредственно у ROBOKASSA.

Методы формирования страниц отправки на оплату

Как можно увидеть из спецификации интерфейсов при отправке пользователя на оплату магазин должен сформировать уникальный (в пределах магазина) номер счета, по которому будет производиться последующий контроль операции оплаты.

Соответственно инициировать 2 операции с одним и тем же номером счета нельзя.

С этим связано несколько особенностей.

Если вы будете предоставлять URL калькулятора с уникальным номером счета на HTML-странице, пользователь должен переходить по данному URL только 1 раз (если он зайдет первый раз, начнет операцию, вернется, и попытается начать операцию заново - его уже не пустят).

Из этого следует, что если вы, например, резервируете товар на складе под каждый номер счета, то может сложиться такая ситуация, что вскоре некоторая часть товара окажется зарезервированной, но не оплаченной.

Поэтому если кнопка оплаты находится в таких местах, где пользователь еще не готов покупать, а может лишь пробовать процесс - ввод конкретного номера счета явно нежелателен.

Вариант 1 - не указывайте номера счета - при этом в момент инициализации операции оплаты будет сформирован уникальный счет. Естественно вы не сможете тогда контролировать операцию оплату по номеру счета - вы его просто не знаете, однако для определения пренадлежности платежа к заказу вы можете использовать свободные поля SHPxxx=yyy, где xxx и yyy - произвольные строки.

Например, вы формируете в магазине заказ, резервируете под него товар и сохраняете.

Этот заказ вы передаете пользовательским параметром при инициализации операции оплаты.

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

Вариант 2 - при нажатии на кнопку «оплатить» пользователь реально будет переходить на ваш скрипт, который уже и будет формировать уникальный номер счета, запоминать его, и перенаправлять пользователя на оплату этого счета.

Это естественные ограничения, однако, о них необходимо знать и помнить.

Примеры

Perl

Формирование URL переадресации пользователя на оплату

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# order properties

my $inv_id = 5; ### shop's invoice number

### (unique for shop's lifetime)

my $inv_desc = "desc"; ### invoice desc

my $out_summ = "5.12"; ### invoice summ

# build CRC value

my $crc = md5_hex("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

# build URL

my $url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&". "OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

# print URL if you need

print "Content-type: text/html\n\n";

print "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

# as a part of ResultURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass2");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# OK state

# print OK signature

print "Content-type: text/html\n\nOK$q{InvId}\n";

# perform some action (change order state to paid)

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

# as a part of SuccessURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass1");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# you can check here, that resultURL was called

# (for better security)

# OK, payment proceeds

print "Content-type: text/html\n\n";

echo "Thank you for using our service\n";

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Запрос состояния операции

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# connect module for requesting data via https

use Net::SSLeay;

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# order properties

my $inv_id = "5"; ### put your order number here

# build CRC

my $crc = md5_hex("$mrh_login:$inv_id:$mrh_pass2");

# make request

my $data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

my ($page) = Net::SSLeay::post_https("merchant. ", 443,

"/Handler/Xml/OpState. ashx", "", $data);

# analyze data

print "Content-type: text/xml\n\n";

print $page;

PHP

Формирование URL переадресации пользователя на оплату

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass1 = "securepass2"; // merchant pass1 here

// order properties

$inv_id = 5; // shop's invoice number

// (unique for shop's lifetime)

$inv_desc = "desc"; // invoice desc

$out_summ = "5.12"; // invoice summ

// build CRC value

$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

// build URL

$url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&".

"OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

// print URL if you need

echo "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

// as a part of ResultURL script

// your registration data

$mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

// HTTP parameters: $out_summ, $inv_id, $crc

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// print OK signature

echo "OK$inv_id\n";

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// as a part of SuccessURL script

// your registration data

$mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

echo "Thank you for using our service\n";

Запрос состояния операции

// you must have Curl module with HTTPS support installed

// to run this code

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

$inv_id = "5"; // put your order number here

// build CRC

$crc = md5("$mrh_login:$inv_id:$mrh_pass2");

// make request

$data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,

"https://merchant. /Handler/Xml/OpState. ashx");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// CURLOPT_RETURNTRANSFER doesn't work

$fp = tmpfile();

curl_setopt ($ch, CURLOPT_FILE, $fp);

if (!curl_exec($ch))

{

echo curl_error($ch);

}

curl_close($ch);

fseek($fp,0,SEEK_SET);

$page = fread($fp,1024);

fclose($fp);

// analyze data

echo $page;

ASP - JScript

Формирование URL переадресации пользователя на оплату

// install ASPHash. GenHash COM-object first

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass1 = "securepass1"; // merchant pass1 here

// order properties

var inv_id = 51; // shop's invoice number

// (unique for shop's lifetime)

var inv_desc = "desc"; // invoice desc

var out_summ = "5.12"; // invoice summ

// build CRC value

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+out_summ+":"+inv_id+":"+

mrh_pass1);

// build URL

var url = "https://merchant. /Index. aspx? MrchLogin="+mrh_login+"&"+

"OutSum="+out_summ+"&InvId="+inv_id+

"&Desc="+inv_desc+"&SignatureValue="+crc;

// print URL if you need

Response. Write("<a href='"+url+"'>Payment link</a>");

Получение уведомления об исполнении операции (ResultURL)

// install ASPHash. GenHash COM-object first

// as a part of ResultURL script

// your registration data

var mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters: out_summ, inv_id, crc

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass2);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// print OK signature

Response. Write("OK"+inv_id+"\n");

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// install ASPHash. GenHash COM-object first

// as a part of SuccessURL script

// your registration data

var mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass1);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service\n");

Запрос состояния операции

// install ASPHash. GenHash COM-object first

// install WinHttp. WinHttpRequest COM-object (from Microsoft site)

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

var inv_id = "5"; // put your order number here

// build CRC

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+inv_id+":"+mrh_pass2);

// make request

var data =

"<robox. opstate. req>"+

" <merchant_login>"+mrh_login+"</merchant_login>"+

" <merchant_invid>"+inv_id+"</merchant_invid>"+

" <crc>"+crc+"</crc>"+

"</robox. opstate. req>";

var sResponse = "";

try

{

var req = new ActiveXObject("WinHttp. WinHttpRequest");

req. SetTimeouts(10000, 10000, 15000, 15000);

req. Open("POST", "https://merchant. /Handler/Xml/OpState. ashx",

false);

req. SetRequestHeader(

"Content-Type",

"application/x-www-form-urlencoded");

req. Send(data);

sResponse = req. ResponseText;

}

catch(e)

{}

// analyze

Response. Write(sResponse);

Формирование URL переадресации пользователя на оплату

using System;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Init : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchLogin = "test";

string sMrchPass1 = "securepass1";

// order properties

decimal nOutSum = 5.12M;

int nInvId = 5;

string sDesc = "desc";

string sOutSum = nOutSum. ToString("0.00", CultureInfo. InvariantCulture);

string sCrcBase = string. Format("{0}:{1}:{2}:{3}",

sMrchLogin, sOutSum, nInvId, sMrchPass1);

// build CRC value

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sCrc = sbSignature. ToString();

// LinkButtonPay is System. Web. UI. WebControls. LinkButton;

LinkButtonPay. Text = "Payment link";

// build URL

LinkButtonPay. PostBackUrl = "https://merchant. /Index. aspx?" +

"MrchLogin=" + sMrchLogin +

"&OutSum=" + sOutSum +

"&InvId=" + nInvId +

"&Desc=" + sDesc +

"&SignatureValue=" + sCrc;

}

}

Получение уведомления об исполнении операции (ResultURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Result : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass2 = "securepass2";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass2);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

Response. Write(string. Format("OK{0}", sInvId));

// perform some action (change order state to paid)

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Success : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass1 = "securepass1";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass1);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

// you can check here, that ResultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service");

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

НЕ нашли? Не то? Что вы ищете?
Просмотр
REQUEST["InvId"];

$crc = Robokassa, описание интерфейсов | Контент-платформа Pandia.ru

Проект ориентирован на хранение и поиск узкоспециализированных данных, которые редко индексируются поисковыми системами

Robokassa, описание интерфейсов

Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ROBOKASSA

(Описание интерфейсов)

Общее описание

Интерфейсы сервиса ROBOKASSA предоставляют возможность получения Клиентом сервиса (магазином) средств от Покупателя в предпочитаемой им электронной валюте в заданном им количестве (объеме).

Покупатель выбирает в он-лайн магазине Клиента товар, магазин подсчитывает сумму Заказа в предпочитаемой Продавцом валюте и посылает запрос к серверу, на котором расположен сервис ROBOKASSA. Система возвращает серверу Клиента html код формы выбора валюты оплаты или кнопки оплаты, который используется на странице его сайта.

Покупатель выбирает на сайте Клиента или на странице Сервиса ROBOKASSA валюту платежа и приступает к платежу, нажав на кнопку оплаты. Сразу после оплаты Заказа Покупателем в выбранной им валюте производится конвертация полученных средств в валюту, предпочитаемую Продавцом и исходящий платеж в этой валюте на его счет в соответствующей платежной системе, указанный при регистрации.

После завершения операции в зависимости от ее исхода Покупатель перенаправляется на страницу исполненного платежа (в случае если он осуществил оплату), либо на страницу неисполненного (если он отказался от оплаты).

Сервис ROBOKASSA построен таким образом, что, в отличие от случая «подключения» непосредственно к серверу платежной системы, отпадает необходимость в усиленной защите данных в процессе обмена. Для интеграции кассы в сайт магазина, он-лайн казино или сайт предоставляющий платный доступ к контенту нет необходимости в установлении исходящих SSL соединений, подключении дополнительных компонент на сервере Клиента и т. п.. В этом заключено главное преимущество применения системы ROBOKASSA.

НЕ нашли? Не то? Что вы ищете?

Номер счета Клиента (магазина) на который будет поступать оплата товаров и/или услуг Продавца защищен от изменения, он задается только один раз – в момент регистрации Продавца в Сервисе. Это позволяет избежать одновременно и краж выручки посторонними лицами и любых злоупотреблений с денежными средствами со стороны обслуживающего персонала магазина.

Нежелательна возможность самостоятельной инициализации процедуры оплаты (путем ввода url с параметрами), иначе говоря, прежде чем пользователь станет оплачивать товар магазин должен сформировать у себя запись о начале процедуры оплаты (Заказ), определить требуемую сумму и отправить пользователя на оплату именно этого Заказа, с конкретной суммой. Реализовано это путем формирования MD5-контрольной суммы (подписи) параметров счета, и добавления подписи в URL системы, куда перенаправляется Покупатель для оплаты заказа. Подпись формируется по параметрам счета и паролю №1 магазина (устанавливается в интерфейсе администрирования).

Продавец может узнать у системы ROBOKASSA состояние операции оплаты, а также действующие в системе курсы обмена. Для этого используются XML интерфейсы, описанные в соответствующем разделе данного документа.

После оплаты обменный пункт отправляет сообщение магазину путем вызова ResultURL и передачей ему методом GET/POST/email параметров совершенного платежа, а также подписи, сформированной по параметрам оплаченного Заказа и паролю №2 магазина.

Запросы к XML-интерфейсам, информирующим о состоянии обменной операции, производятся с указанием контрольной суммы, сформированной по параметрам запроса + пароль2 магазина.

Примечание: Если не оговорено конкретно, понятия входяший/исходящий подразумеваются относительно системы ROBOKASSA.

Состав системы ROBOKASSA

Регистрационные данные Продавца

Online регистрация

Продавец (владелец магазина или сервиса) должен указать логин (далее sMerchantLogin), пароль для входа в Личный кабинет и внести в форму он-лайн регистрации следующие данные:

-  язык общения с администратором магазина;

-  наименование магазина;

-  URL сайта магазина (url главной страницы сайта)

-  e-mail адрес технического администратора магазина для связи;

-  пароль 1 (используется интерфейсом инициализации оплаты);

-  пароль 2 (используется интерфейсом оповещения о платеже, XML-интерфейсах);

-  Result URL (используется интерфейсом оповещения о платеже);

-  POST/GET/email метод отсылки данных в Result URL;

-  Success URL (используется в случае успешного проведения платежа);

-  POST/GET метод отсылки данных в Success URL;

-  Fail URL (используется в случае отказа проведения платежа);

-  POST/GET метод отсылки данных в Fail URL;

-  валюту, которую желает получать;

-  аккаунт в выбранной валюте, на который будут перечисляться средства.

Изменение регистрационной информации

После активации мерчанта изменение любых данных будет невозможно.

Интерфейс оплаты

Код встраиваемой кассы со списком возможных валют оплаты

При использовании как источник JScript-кода в HTML-тексте выводит окошко кассы с выбором сумм в различных валютах.

URL: http://merchant. roboxchange. local/Handler/MrchSumPreview. ashx

Параметры запроса (метод GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Culture=sCulture&

Encoding=sEncoding

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Если параметр не указан (пустая строка), то пользователю предоставляется возможность ввести сумму самостоятельно. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

sEncoding – кодировка, в которой возвращается HTML-код кассы. По умолчанию: windows-1251.

2. Инициализация оплаты

Магазин отправляет пользователя по данному адресу для произведения им оплаты. Предварительно магазин должен у себя запомнить счет (номер, сумма, дата формирования).

URL: https://merchant. /Index. aspx

Параметры запроса (метод POST либо GET):

MrchLogin=sMerchantLogin&

OutSum=nOutSum&

InvId=nInvId&

Desc=sDesc&

SignatureValue=sSignatureValue&

IncCurrLabel=sIncCurrLabel&

Email=sEmail&

Culture=sCulture

[&shpa=yyy&shpb=xxx...-пользовательские_параметры_начинающиеся_с_SHP_в_сумме_до_2048_знаков]

sMerchantLogin – login магазина в обменном пункте (обязательный параметр)

nOutSum – требуемая к получению сумма (обязательный параметр). Сумма должна быть указана в той валюте, которая была указана при регистрации магазина. Формат представления числа - разделитель точка.

nInvId – номер счета в магазине (должен быть уникальным для магазина). Может принимать значения от 1 до (2^31-1). Если содержит пустое значение, вовсе не указан, либо равен “0”, то при создании операции ей будет автоматически присвоен уникальный номер счета. Рекомендуется использовать данную возможность только в очень простых магазинах, где не требуется какого-либо контроля.

sDesc – описание покупки, можно использовать только английские или русские символы, цифры и знаки препинания. Максимальная длина 100 символов.

sSignatureValue – контрольная сумма MD5 (обязательный параметр) - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 - (устанавливается через интерфейс администрирования) т. е.

sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если переданы параметры shpb=xxx и shpa=yyy то подпись формируется из строки

...:sMerchantPass1:shpa=yyy:shpb=xxx

sIncCurrLabel – предлагаемая валюта платежа. Пользователь может изменить ее в процессе оплаты.

sEmail – опционально, e-mail пользователя. Пользователь может изменить его в процессе оплаты.

sCulture – опционально, язык общения с клиентом. Значения: en, ru. Если не установлен - берется язык региональных установок браузера.

Покупательатель отправляется на сайт оплату ROBOKASSA, после чего платеж в выбранной Продавцом валюте перечисляется (поступает) на его счет в выбранной им платежной системе. Промежуток времени между «началом операции» - «получением оплаты системой ROBOKASSA» ограничено одним часом, время завершения операции не ограничено. После оплаты сам Покупатель не заинтересован в затормаживании операции (ожидание завершения операции вполне можно прекратить через сутки).

3. Оповещение об оплате (ResultURL)

В случае успешного проведения оплаты робот системы проводит запрос по Result URL, с указанием следующих параметров (методом, выбранным в настройках):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue

[&пользовательские_параметры]

nOutSum – полученная магазином сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 - (устанавливается через интерфейс администрирования) т. е.

nOutSum:nInvId:sMerchantPass2[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy, то подпись формируется из строки

...:sMerchantPass2:shpa=yyy:shpb=xxx

Скрипт, находящийся по Result URL должен проверить правильность контрольной суммы и соответствия суммы платежа ожидаемой сумме. При формировании строки подписи учтите формат представления суммы (в строку при проверке подписи вставляйте именно полученное значение, без какого-либо форматирования).

Данный запрос производится после получения денег.

Факт успешности сообщения магазину об исполнении операции определяется по результату, возвращаемому обменному пункту. Результат должен содержать “OKnInvId”, т. е. для счета #5 должен быть возвращен текст “OK5”.

В случае невозможности связаться со скриптом по адресу Result URL (связь прерывается по time-out-у либо по отсутствию DNS-записи, либо получен не ожидаемый ответ) на email-адрес администратора магазина отправляется письмо и запрос Result URL считается завершенным успешно. В случае системаческого отсутствия связи между серверами магазина и обменного пункта лучше использовать метод определения оплаты с применением интерфейсов XML, а самый желательный и защищенный способ - совмещенный.

4. Переадресация пользователя при успешной оплате (SuccessURL)

В случае успешного исполнения платежа Покупатель может перейти по данному адресу.

Методом, выбранным при регистрации будет передан следующих параметр («чек» об оплате):

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 32-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass1 (указывается при регистрации) т. е.

nOutSum:nInvID:sMerchantPass1[:пользовательские параметры, в отсортированном порядке]

К примеру если при инициализации операции были переданы пользовательские параметры shpb=xxx и shpa=yyy то подпись формируется из строки

…:sMerchantPass1:shpa=yyy:shpb=xxx

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение по email-адресу, установленному в качестве Success URL через интерфейс администрирования.

Переход пользователя по данному адресу с корректными параметрами (соответствия CRC) означает, что платеж по реквизитам Продавца выполнен успешно. Сервис несет финансовую ответственность перед Продавцом в соответствии с Соглашением за достоверность такого подтверждения.

Однако для дополнительной защиты желательно, чтобы факт оплаты платежа проверялся скриптом исполняемым при переходе на Result URL, или путем запроса XML-интерфейса о результате данной платежной операции, и только при реальном наличии счета с номером nInvId в БД магазина.

5. Переадресация пользователя при отказе от оплаты (FailURL)

В случае отказа от исполнения платежа Покупатель перенаправляется по данному адресу.

Для того, чтобы Продавец мог разблокировать заказанный товар на складе при отказе от его оплаты методом, выбранным при регистрации, будет переданы параметры:

OutSum=nOutSum&

InvId=nInvID&

SignatureValue=sSignatureValue&

Culture=sCulture

[&пользовательские_параметры]

nOutSum – полученная сумма. Сумма будет передана в той валюте, которая была указана при регистрации магазина. Формат представления числа - Разделитель точка.

nInvId – номер счета в магазине

sCulture – язык общения с клиентом, выбранный при инициализации оплаты. Значения: en, ru.

Если в качетсве метода отправки данных выбран email, будет отправлено email сообщение об отказе Покупателя от оплаты Заказа по email-адресу, находящемуся в Fail URL.

Переход пользователя по данному адресу вообще говоря не означает окончательного отказа Покупателя от оплаты, нажав кнопку «Back» в броузере он может вернуться на страницы ROBOKASSA. Поэтому в случае блокировки товара на складе под заказ для его разблокировки желательно проверять факт отказа от платежа запросом запроса XML-интерфейса о результате данной платежной операции используя в запросе номер счета nInvId имеющийся в БД магазина (Продавца).

XML интерфейсы

1. Список валют обменного пункта.

По данному запросу Сервисом предоставляется полный список наименований электронных валют

URL: http://merchant. /Handler/Xml/CurrList. ashx

Параметров нет.

Ответ:

<robox. currlist. resp>

<item>

<curr>sCurrLabel</curr>

<curr_name>sCurrName</curr_name>

</item>

</robox. currlist. resp>

Тегов <item> может быть несколько, каждый из них описывает 1 валюту.

sCurrLabel – метка входящей валюты

sCurrName – имя входящей валюты (это наименование можно показывать пользователю).

2. Получение списка курсов обмена

URL: http://merchant. /Handler/Xml/Rate. ashx

Параметры запроса (метод POST):

<robox. rate. req>

<in_curr>sIncCurrLabel</in_curr>

<out_curr>sOutCurrLabel</out_curr>

<merchant_login>sMerchantLogin</merchant_login>

<out_cnt>nOutCount</out_cnt>

</robox. rate. req>

sIncCurrLabel – метка входящей валюты, если не указана будут возвращены курсы по всем возможным валютам

sOutCurrLabel – метка исходящей валюты

sMerchantLogin – login магазина в обменном пункте

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков. По умолчанию принимается 1.

Исходящая валюта определяется либо по параметру sOutCurrLabel, либо по sMerchantLogin-у (в качестве исходящей берется валюта, выбранная при регистрации). sMerchantLogin имеет приоритет

Ответ:

<robox. rate. resp>

<retval>nRetCode</retval>

<out_curr>sOutCurrLabelr</out_curr>

<out_cnt>nOutCount</out_cnt>

<date>sDateODBC120</date>

<ratelist>

<rate>

<in_curr>sIncCurrLabelr</in_curr>

<in_curr_name>sIncCurrName</in_curr_name>

<value>nValuet</value>

<ins_per_Xout>nInCount</ins_per_Xout>

</rate>

...

</ratelist>

</robox. rate. resp>

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

0 - нет ошибки.

1 - sIncCurrLabel задан неверно

2 - sOutCurrLabel задан неверно

3 - sMerchantLogin не найден

4 - nOutCnt задан неверно

sOutCurrLabel – метка исходящей валюты

nOutCount – количество денежных знаков исходящей валюты, по которым формировать количество входных денежных знаков

sDateODBC120 – дата, на которую возвращено состояние курсов. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”), GMT.

Тегов <rate> может быть несколько (особенно если в запросе не указан <in_curr>), каждый из них описывает 1 курс.

sIncCurrLabel – метка входящей валюты

sIncCurrName – имя входящей валюты (это наименование можно показывать пользователю).

nValue – количество денежных знаков входящей валюты, приходящиеся на 1 денежный знак исходящей валюты (sOutCurr), без округлений до элементарных единиц входящей валюты.

nInCount – количество денежных знаков входящей валюты, которые пользователь должен оплатить для получения магазином nOutCount - денежных знаков исходящей валюты (sOutCurrLabel). Округлено до элементарных единиц входящей валюты.

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

3. Интерфейс получения состояния операций

URL: https://merchant. /Handler/Xml/OpState. ashx

Параметры запроса (метод POST):

<robox. opstate. req>

<merchant_login>sMerchantLogin</merchant_login>

<merchant_invid>sInvId</merchant_invid>

<crc>sSignatureValue</crc>

</robox. opstate. req>

sMerchantLogin – login магазина в обменном пункте

sSignatureValue – контрольная сумма MD5 - строка представляющая собой 16-разрядное число в 16-ричной форме и любом регистре (всего 32 символа 0-9, A-F). Формируется по строке, содержащей все обязательные параметры, разделенные ‘:’, с добавлением sMerchantPass2 (указывается при регистрации) т. е.

sMerchantLogin:nInvId:sMerchantPass2

Ответ:

<robox. opstate. resp>

<retval>nRetCode</retval>

<date>sDateODBC120</date>

<out_curr>sOutCurrLabel</out_curr>

<opstate>

<out_cnt>nOutCount</out_cnt>

<state>nState</state>

</opstate>

</robox. opstate. resp>

sDateODBC120 – дата, на которую возвращено состояние операции. В формате ODBC120 (“yyyy-mm-dd hh:mm:ss”).

sOutCurrLabel – метка исходящей валюты

nRetCode - код возврата.

-100 - неверно сформирован запрос

(не все требуемые параметры заданы, либо запрос не разобран вовсе)

-9 - sSignatureValue не указана, либо неверного вида (длина должна быть 32

символа)

-2 - sInvId не задан либо не является числом

0 - нет ошибки. При этом присутствует тег <opstate>.

1 - указанный sMerchantLogin не найден

9 - неверно задана контрольная сумма

10 - операция с данным sInvId не найдена (возможно еще не инициирована)

nOutCount – количество денежных знаков исходящей валюты данной операции

nState - состояние операции :

5 - только инициирована, деньги не получены

10 - деньги не были получены, операция отменена

50 - деньги от пользователя получены, производится зачисление денег на счет магазина

60 - деньги после получения были возвращены пользователю

80 - исполнение операции приостановлено

100 - операция завершена успешно

Необходимо помнить, что операция инициируется не в момент ухода пользователя на оплату, а позже - после подтверждения его платежных реквизитов, т. е. вы вполне можете не находить операцию, которая по вашему мнению уже должна начаться.

Описание методов построения магазинов

Простейший магазин без формирования уникального номера счета.

Поскольку ваш сайт не может как-либо контролировать процесс, вам скорее всего придется самостоятельно отправлять товар.

Основная схема работы магазина:

·  сформировав подпись вы направляете пользователя на оплату, используя JScript-код кассы, в результате чего на странице появляется касса с выбором валюты оплаты, либо ссылку на оплату.

·  пользователь, выбрав валюту, и нажав кнопку "оплатить" попадает на страницы ROBOKASSA, и производит оплату (на кошелек магазина при этом поступают средства в вашей валюте).

·  по окончании процесса на email-адрес оператора магазина посылается сообщение о произведенной операции, а пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL. Вашему SuccessURL скрипту передаются те же параметры, что и при инициализации оплаты.

На этой странице вы можете расположить текст вида "В ближайшее время оператор отошлет вам купленный товар".
Либо можете расположить сам товар, в случае, если ваш скрипт получает переданные ему параметры и проверяет правильность подписи. В противном случае пользователь может самостоятельно, без оплаты, перейти на этот URL.

Для формирования/проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект

Если вы имеете в магазине несколько товаров либо несколько товаров с одинаковой ценой, то для их идентификации используйте пользовательские параметры - параметры магазина, начинающиеся с префикса 'shp'. Пользовательские параметры передаются наряду с другими в момент инициализации оплаты и должны быть учтены при формировании подписи.

При регистрации :

·  «ResultURL» - email-адрес оператора магазина, метод отправки данных - email,

·  «SuccessURL» - адрес страницы с товаром, куда отправится пользователь после оплаты, метод отправки данных не имеет значения

·  «FailURL» - адрес вашего магазина, метод отправки данных не имеет значения

Магазин, формирующий уникальный номера счета, но без формирования запросов

Схема работы магазина следующая:

·  скрипт магазина направляет пользователя на оплату, используя JScript-код кассы, либо URL калькулятора, при этом он может запретить произвольную инициализацию оплаты, закрыв данный URL подписью.

·  после оплаты, ROBOKASSA уведомляет магазин о том, что платеж совершен, вызывая скрипт, находящийся по адресу ResultURL - скрипту передаются параметры платежа, подписанные ROBOKASSA с использованием пароля#2. Скрипт, указанному заказу устанавливает в БД магазина состояние «оплачено». Если в момент оповещение между ROBOKASSA и магазином отсутствует связь - администратору магазина отправляется email-сообщение.

·  После оплаты, и после сообщения магазину, пользователь перенаправляется по скрипту, находящемуся по адресу SuccessURL - скрипту передаются те же параметры, но подписанные с использованием пароля#1. Скрипт анализирует данные, сверяет их с данными, ранее полученными скриптом ResultURL (однако, магазин может вовсе и не использовать скрипт ResultURL, полагаясь только на данные SuccessURL) и выдает товар.

Для формирования / проверки подписи используется алгоритм MD5, встроенный в языки Perl и PHP, на ASP используется COM-объект.

Вы можете вовсе не формировать сверять подпись, если считаете это уместным уровнем безопасности. В таком случае скрипт ResultURL должен сверять корректность данных только по ip-адресу, и URL скрипта ResultURL не должен быть известем третьим лицам. SuccessURL при этом должен лишь брать состояние заказа, устанавливаемое скриптом ResultURL и в случае состояние «оплачено» выдавать товар.

Магазин с применением всех интерфейсов

В случае если конфигурация вашего сервера позволяет производить исходящие http и https запросы на сервер ROBOKASSA, то вы можете дополнительно усложнить ваш магазин, используя XML-интерфейсы.

Они позволяют предварительно считывать курсы обмена ROBOKASSA, список принимаемых валют. Что значительно расширяет ваши возможности по построению удобного пользовательского интерфейса вашего сайта.

Также вы можете в любой момент времени проверить состояние оплаты вашего заказа - большая стабильность, повышенная безопасность. К примеру, ваша система может не использовать ResultURL, а скрипт SuccessURL перед выдачей товара может проверять состояние оплаты заказа непосредственно у ROBOKASSA.

Методы формирования страниц отправки на оплату

Как можно увидеть из спецификации интерфейсов при отправке пользователя на оплату магазин должен сформировать уникальный (в пределах магазина) номер счета, по которому будет производиться последующий контроль операции оплаты.

Соответственно инициировать 2 операции с одним и тем же номером счета нельзя.

С этим связано несколько особенностей.

Если вы будете предоставлять URL калькулятора с уникальным номером счета на HTML-странице, пользователь должен переходить по данному URL только 1 раз (если он зайдет первый раз, начнет операцию, вернется, и попытается начать операцию заново - его уже не пустят).

Из этого следует, что если вы, например, резервируете товар на складе под каждый номер счета, то может сложиться такая ситуация, что вскоре некоторая часть товара окажется зарезервированной, но не оплаченной.

Поэтому если кнопка оплаты находится в таких местах, где пользователь еще не готов покупать, а может лишь пробовать процесс - ввод конкретного номера счета явно нежелателен.

Вариант 1 - не указывайте номера счета - при этом в момент инициализации операции оплаты будет сформирован уникальный счет. Естественно вы не сможете тогда контролировать операцию оплату по номеру счета - вы его просто не знаете, однако для определения пренадлежности платежа к заказу вы можете использовать свободные поля SHPxxx=yyy, где xxx и yyy - произвольные строки.

Например, вы формируете в магазине заказ, резервируете под него товар и сохраняете.

Этот заказ вы передаете пользовательским параметром при инициализации операции оплаты.

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

Вариант 2 - при нажатии на кнопку «оплатить» пользователь реально будет переходить на ваш скрипт, который уже и будет формировать уникальный номер счета, запоминать его, и перенаправлять пользователя на оплату этого счета.

Это естественные ограничения, однако, о них необходимо знать и помнить.

Примеры

Perl

Формирование URL переадресации пользователя на оплату

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# order properties

my $inv_id = 5; ### shop's invoice number

### (unique for shop's lifetime)

my $inv_desc = "desc"; ### invoice desc

my $out_summ = "5.12"; ### invoice summ

# build CRC value

my $crc = md5_hex("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

# build URL

my $url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&". "OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

# print URL if you need

print "Content-type: text/html\n\n";

print "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

# as a part of ResultURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass2");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# OK state

# print OK signature

print "Content-type: text/html\n\nOK$q{InvId}\n";

# perform some action (change order state to paid)

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

# as a part of SuccessURL script

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# define function for retrieval http-paratemters

sub http_Prm;

# your registration data

my $mrh_pass1 = "securepass1"; ### merchant pass1 here

# load parameters

my %q = http_Prm();

# loaded parameters: $q{OutSum}, $q{InvId}, $q{SignatureValue}

$q{crc} =~ s/([a-z])/uc "$1"/eg; # force uppercase

# build own CRC

my $my_crc = md5_hex("$q{OutSum}:$q{InvId}:$mrh_pass1");

$my_crc =~ s/([a-z])/uc "$1"/eg; # force uppercase

# define the correctness state

my $is_correct = ($my_crc eq $q{SignatureValue} ? 1 : 0);

if (!$is_correct)

{

print "Content-type: text/html\n\nbad sign\n";

die "incorrect sign passed";

}

# you can check here, that resultURL was called

# (for better security)

# OK, payment proceeds

print "Content-type: text/html\n\n";

echo "Thank you for using our service\n";

exit();

# just function to load http parameters, you can use own

sub http_Prm

{

my %query;

{

# POST params

my ($q_sz, $i, @q, @cmd);

my $l = $ENV{'CONTENT_LENGTH'};

my $qtext = "";

while ($l>0)

{ $l-=sysread(STDIN, $qtext, $l, length($qtext)); }

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

{

# GET params

my ($q_sz, $i, $qtext, @q, @cmd);

$qtext = $ENV{'QUERY_STRING'};

@q = split("&", $qtext);

$q_sz = scalar(@q);

for($i=0; $i<$q_sz; $i++)

{

@cmd = split("=", $q[$i]);

$cmd[1] =~ s/\+/ /g;

$cmd[1] =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;

$query{$cmd[0]} = $cmd[1];

}

}

return %query;

}

Запрос состояния операции

# connect standard module for building MD5-signs

use Digest::MD5 qw(md5_hex);

# connect module for requesting data via https

use Net::SSLeay;

# your registration data

my $mrh_login = "test"; ### your login here

my $mrh_pass2 = "securepass2"; ### merchant pass2 here

# order properties

my $inv_id = "5"; ### put your order number here

# build CRC

my $crc = md5_hex("$mrh_login:$inv_id:$mrh_pass2");

# make request

my $data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

my ($page) = Net::SSLeay::post_https("merchant. ", 443,

"/Handler/Xml/OpState. ashx", "", $data);

# analyze data

print "Content-type: text/xml\n\n";

print $page;

PHP

Формирование URL переадресации пользователя на оплату

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass1 = "securepass2"; // merchant pass1 here

// order properties

$inv_id = 5; // shop's invoice number

// (unique for shop's lifetime)

$inv_desc = "desc"; // invoice desc

$out_summ = "5.12"; // invoice summ

// build CRC value

$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1");

// build URL

$url = "https://merchant. /Index. aspx? MrchLogin=$mrh_login&".

"OutSum=$out_summ&InvId=$inv_id&Desc=$inv_desc&SignatureValue=$crc";

// print URL if you need

echo "<a href='$url'>Payment link</a>";

Получение уведомления об исполнении операции (ResultURL)

// as a part of ResultURL script

// your registration data

$mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

// HTTP parameters: $out_summ, $inv_id, $crc

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// print OK signature

echo "OK$inv_id\n";

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// as a part of SuccessURL script

// your registration data

$mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

$out_summ = $_REQUEST["OutSum"];

$inv_id = $_REQUEST["InvId"];

$crc = $_REQUEST["SignatureValue"];

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

echo "Thank you for using our service\n";

Запрос состояния операции

// you must have Curl module with HTTPS support installed

// to run this code

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

$inv_id = "5"; // put your order number here

// build CRC

$crc = md5("$mrh_login:$inv_id:$mrh_pass2");

// make request

$data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,

"https://merchant. /Handler/Xml/OpState. ashx");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// CURLOPT_RETURNTRANSFER doesn't work

$fp = tmpfile();

curl_setopt ($ch, CURLOPT_FILE, $fp);

if (!curl_exec($ch))

{

echo curl_error($ch);

}

curl_close($ch);

fseek($fp,0,SEEK_SET);

$page = fread($fp,1024);

fclose($fp);

// analyze data

echo $page;

ASP - JScript

Формирование URL переадресации пользователя на оплату

// install ASPHash. GenHash COM-object first

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass1 = "securepass1"; // merchant pass1 here

// order properties

var inv_id = 51; // shop's invoice number

// (unique for shop's lifetime)

var inv_desc = "desc"; // invoice desc

var out_summ = "5.12"; // invoice summ

// build CRC value

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+out_summ+":"+inv_id+":"+

mrh_pass1);

// build URL

var url = "https://merchant. /Index. aspx? MrchLogin="+mrh_login+"&"+

"OutSum="+out_summ+"&InvId="+inv_id+

"&Desc="+inv_desc+"&SignatureValue="+crc;

// print URL if you need

Response. Write("<a href='"+url+"'>Payment link</a>");

Получение уведомления об исполнении операции (ResultURL)

// install ASPHash. GenHash COM-object first

// as a part of ResultURL script

// your registration data

var mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters: out_summ, inv_id, crc

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass2);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// print OK signature

Response. Write("OK"+inv_id+"\n");

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// install ASPHash. GenHash COM-object first

// as a part of SuccessURL script

// your registration data

var mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass1);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service\n");

Запрос состояния операции

// install ASPHash. GenHash COM-object first

// install WinHttp. WinHttpRequest COM-object (from Microsoft site)

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

var inv_id = "5"; // put your order number here

// build CRC

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+inv_id+":"+mrh_pass2);

// make request

var data =

"<robox. opstate. req>"+

" <merchant_login>"+mrh_login+"</merchant_login>"+

" <merchant_invid>"+inv_id+"</merchant_invid>"+

" <crc>"+crc+"</crc>"+

"</robox. opstate. req>";

var sResponse = "";

try

{

var req = new ActiveXObject("WinHttp. WinHttpRequest");

req. SetTimeouts(10000, 10000, 15000, 15000);

req. Open("POST", "https://merchant. /Handler/Xml/OpState. ashx",

false);

req. SetRequestHeader(

"Content-Type",

"application/x-www-form-urlencoded");

req. Send(data);

sResponse = req. ResponseText;

}

catch(e)

{}

// analyze

Response. Write(sResponse);

Формирование URL переадресации пользователя на оплату

using System;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Init : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchLogin = "test";

string sMrchPass1 = "securepass1";

// order properties

decimal nOutSum = 5.12M;

int nInvId = 5;

string sDesc = "desc";

string sOutSum = nOutSum. ToString("0.00", CultureInfo. InvariantCulture);

string sCrcBase = string. Format("{0}:{1}:{2}:{3}",

sMrchLogin, sOutSum, nInvId, sMrchPass1);

// build CRC value

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sCrc = sbSignature. ToString();

// LinkButtonPay is System. Web. UI. WebControls. LinkButton;

LinkButtonPay. Text = "Payment link";

// build URL

LinkButtonPay. PostBackUrl = "https://merchant. /Index. aspx?" +

"MrchLogin=" + sMrchLogin +

"&OutSum=" + sOutSum +

"&InvId=" + nInvId +

"&Desc=" + sDesc +

"&SignatureValue=" + sCrc;

}

}

Получение уведомления об исполнении операции (ResultURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Result : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass2 = "securepass2";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass2);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

Response. Write(string. Format("OK{0}", sInvId));

// perform some action (change order state to paid)

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Success : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass1 = "securepass1";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass1);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

// you can check here, that ResultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service");

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

НЕ нашли? Не то? Что вы ищете?
Просмотр
REQUEST["SignatureValue"];

$crc = strtoupper($crc); // force uppercase

// build own CRC

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1"));

if (strtoupper($my_crc) != strtoupper($crc))

{

echo "bad sign\n";

exit();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

echo "Thank you for using our service\n";

Запрос состояния операции

// you must have Curl module with HTTPS support installed

// to run this code

// your registration data

$mrh_login = "test"; // your login here

$mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

$inv_id = "5"; // put your order number here

// build CRC

$crc = md5("$mrh_login:$inv_id:$mrh_pass2");

// make request

$data =

"<robox. opstate. req>

<merchant_login>$mrh_login</merchant_login>

<merchant_invid>$inv_id</merchant_invid>

<crc>$crc</crc>

</robox. opstate. req>";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,

"https://merchant. /Handler/Xml/OpState. ashx");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// CURLOPT_RETURNTRANSFER doesn't work

$fp = tmpfile();

curl_setopt ($ch, CURLOPT_FILE, $fp);

if (!curl_exec($ch))

{

echo curl_error($ch);

}

curl_close($ch);

fseek($fp,0,SEEK_SET);

$page = fread($fp,1024);

fclose($fp);

// analyze data

echo $page;

ASP - JScript

Формирование URL переадресации пользователя на оплату

// install ASPHash. GenHash COM-object first

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass1 = "securepass1"; // merchant pass1 here

// order properties

var inv_id = 51; // shop's invoice number

// (unique for shop's lifetime)

var inv_desc = "desc"; // invoice desc

var out_summ = "5.12"; // invoice summ

// build CRC value

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+out_summ+":"+inv_id+":"+

mrh_pass1);

// build URL

var url = "https://merchant. /Index. aspx? MrchLogin="+mrh_login+"&"+

"OutSum="+out_summ+"&InvId="+inv_id+

"&Desc="+inv_desc+"&SignatureValue="+crc;

// print URL if you need

Response. Write("<a href='"+url+"'>Payment link</a>");

Получение уведомления об исполнении операции (ResultURL)

// install ASPHash. GenHash COM-object first

// as a part of ResultURL script

// your registration data

var mrh_pass2 = "securepass2"; // merchant pass2 here

// HTTP parameters: out_summ, inv_id, crc

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass2);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// print OK signature

Response. Write("OK"+inv_id+"\n");

// perform some action (change order state to paid)

Проверка параметров в скрипте заверешения операции (SuccessURL)

// install ASPHash. GenHash COM-object first

// as a part of SuccessURL script

// your registration data

var mrh_pass1 = "securepass1"; // merchant pass1 here

// HTTP parameters:

var out_summ = Request. QueryString("OutSum").Item;

var inv_id = Request. QueryString("InvId").Item;

var crc = Request. QueryString("SignatureValue").Item;

// build own CRC

var h = new ActiveXObject("ASPHash. GenHash");

var my_crc = h. MD5(out_summ+":"+inv_id+":"+mrh_pass1);

if (my_crc. toUpperCase() != crc. toUpperCase())

{

Response. Write("bad sign\n");

Response. End();

}

// you can check here, that resultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service\n");

Запрос состояния операции

// install ASPHash. GenHash COM-object first

// install WinHttp. WinHttpRequest COM-object (from Microsoft site)

// your registration data

var mrh_login = "test"; // your login here

var mrh_pass2 = "securepass2"; // merchant pass2 here

// order properties

var inv_id = "5"; // put your order number here

// build CRC

var h = new ActiveXObject("ASPHash. GenHash");

var crc = h. MD5(mrh_login+":"+inv_id+":"+mrh_pass2);

// make request

var data =

"<robox. opstate. req>"+

" <merchant_login>"+mrh_login+"</merchant_login>"+

" <merchant_invid>"+inv_id+"</merchant_invid>"+

" <crc>"+crc+"</crc>"+

"</robox. opstate. req>";

var sResponse = "";

try

{

var req = new ActiveXObject("WinHttp. WinHttpRequest");

req. SetTimeouts(10000, 10000, 15000, 15000);

req. Open("POST", "https://merchant. /Handler/Xml/OpState. ashx",

false);

req. SetRequestHeader(

"Content-Type",

"application/x-www-form-urlencoded");

req. Send(data);

sResponse = req. ResponseText;

}

catch(e)

{}

// analyze

Response. Write(sResponse);

Формирование URL переадресации пользователя на оплату

using System;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Init : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchLogin = "test";

string sMrchPass1 = "securepass1";

// order properties

decimal nOutSum = 5.12M;

int nInvId = 5;

string sDesc = "desc";

string sOutSum = nOutSum. ToString("0.00", CultureInfo. InvariantCulture);

string sCrcBase = string. Format("{0}:{1}:{2}:{3}",

sMrchLogin, sOutSum, nInvId, sMrchPass1);

// build CRC value

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sCrc = sbSignature. ToString();

// LinkButtonPay is System. Web. UI. WebControls. LinkButton;

LinkButtonPay. Text = "Payment link";

// build URL

LinkButtonPay. PostBackUrl = "https://merchant. /Index. aspx?" +

"MrchLogin=" + sMrchLogin +

"&OutSum=" + sOutSum +

"&InvId=" + nInvId +

"&Desc=" + sDesc +

"&SignatureValue=" + sCrc;

}

}

Получение уведомления об исполнении операции (ResultURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Result : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass2 = "securepass2";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass2);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

Response. Write(string. Format("OK{0}", sInvId));

// perform some action (change order state to paid)

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

Проверка параметров в скрипте заверешения операции (SuccessURL)

using System;

using System. Web;

using System. Text;

using System. Globalization;

using System. Security. Cryptography;

public partial class Success : System. Web. UI. Page

{

protected void Page_Load(object sender, EventArgs e)

{

// your registration data

string sMrchPass1 = "securepass1";

// HTTP parameters

string sOutSum = GetPrm("OutSum");

string sInvId = GetPrm("InvId");

string sCrc = GetPrm("SignatureValue");

string sCrcBase = string. Format("{0}:{1}:{2}",

sOutSum, sInvId, sMrchPass1);

// build own CRC

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bSignature = md5.ComputeHash(Encoding. ASCII. GetBytes(sCrcBase));

StringBuilder sbSignature = new StringBuilder();

foreach (byte b in bSignature)

sbSignature. AppendFormat("{0:x2}", b);

string sMyCrc = sbSignature. ToString();

if (sMyCrc. ToUpper() != sCrc. ToUpper())

{

Response. Write("bad sign");

return;

}

// you can check here, that ResultURL was called

// (for better security)

// OK, payment proceeds

Response. Write("Thank you for using our service");

}

private string GetPrm(string sName)

{

string sValue;

sValue = HttpContext. Current. Request. Form[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = HttpContext. Current. Request. QueryString[sName] as string;

if (string. IsNullOrEmpty(sValue))

sValue = String. Empty;

return sValue;

}

}

НЕ нашли? Не то? Что вы ищете?
Просмотр