Прием платежей при помощи сервиса Robokassa

Прием платежей при помощи сервиса Robokassa

От автора: занимаясь инфобизнесом, так или иначе возникнет необходимость в приеме денежных средств у себя на сайте. Поэтому в данном уроке я хотел бы показать, как организовать у себя на сайте прием платежей, используя сервис Robokassa. Robokassa – это сервис, который позволяет продавцам товаров и услуг принимать платежи от клиентов практически в любой форме.

План урока

    1. Условия работы с сервисом Robokassa.

    2. Начало работы с сервисом.

    3. Автоматическая форма инициализации платежа.

    4. Ручная форма инициализации платежа.

    5. Страница RESULT URL.

    6. Страница SUCCESS URL.

    7. Страница FAIL URL.

скачать исходникискачать урок

1. Условия работы с сервисом Robokassa

Данный сервис выступает посредником, между Вами и Вашим клиентом, и при выполнении денежных переводов будет взиматься комиссия. О тарифах данного сервиса можно узнать по ссылке: http://www.robokassa.ru/ru/Tariff.aspx.

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

Для того, чтобы начать работу с сервисом по договору (как юридическое лицо) и получать денежные средства на свой расчетный счет, Вам нужно:

Ознакомиться с Договором-офертой, перейдя по ссылке http://www.oceanbank.ru/rtf/Dogovor_Robokassa.rtf

Скачать в Личном кабинете и проверить правильность заполнения уже заполненное «Заявление о присоединении к Договору-оферте».

Произвести настройки в Личном кабинете и ввести соответствующие данные.

Скачать в Личном кабинете и проверить правильность заполнения, заполненный «Акт о технической готовности Сторон».

Прислать на адрес: ecommerce@oceanbank.ru, указав свой Логин, заполненные документы в формате MS WORD без подписи, печати и БЕЗ указания даты.

При оформлении документов, для работы с сервисом ROBOKASSA как юридическое лицо. Будьте очень внимательны, так как после активации Вашей учетной записи, произвести изменения уже будет не возможно.

При работе с физическими лицами сервис принимает платежи и переводит электронную валюту. При этом договор не заключается, а сервис работает на основании обмена электронных денег. Комиссия сервиса взимается с Вас в момент платежа. Зачисление электронных денег на Ваш счет производится автоматически и мгновенно.

Для работы с сервисом Ваш сайт, или магазин должен удовлетворять следующим требованиям:

сайт должен быть полностью рабочим, с работающими внутренними ссылками;

сайт должен быть открыт для всеобщего посещения;

товары или услуги, представленные в Вашем магазине, не должны противоречить действующему законодательству РФ;

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

на сайте интернет-магазина должно быть указано полное фирменное наименование, ИНН, юридический и фактический адреса, телефон и адрес электронной почты организации, осуществляющей продажу товаров и услуг;

товары или услуги, которые Вы продаете должны иметь полное описание и цену;

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

2. Начало работы с сервисом

Итак, теперь переходим к работе с данным сервисом. Первым делом необходимо зарегистрироваться: http://www.robokassa.ru. Затем переходим по ссылке Подключиться сейчас! (https://www.roboxchange.com/Environment/Partners/Reg/Register.aspx?reg=MerchantBN&culture=ru).

Заполняем все поля, переходим по ссылке Зарегистрироваться. Далее заполняете данные Вашего магазина, указываете почту администратора и выбираете тип регистрации, то есть, на какое лицо будет зарегистрирована данная учетная запись. Если выбираете юридическое лицо, то при этом открываются соответствующие текстовые поля для ввода информации. Если выбрать физическое лицо, достаточно ввести только кошелек системы Webmoney, на который Вы будете получать средства. И в конце, указываете категорию к которой относится Ваш интернет-магазин.

Опять же заполняем все поля и переходим по ссылке Регистрация и попадаем в личный кабинет.

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

Здесь необходимо заполнить ряд очень Важных полей:

пароль 1 (sMerchantPass1) — используется системой для инициализации оплаты, то есть данный пароль необходим для начала процесса оплаты;

пароль 2 (sMerchantPass2) — используется системой для оповещения о платеже, используя данный пароль можно осуществить проверку правильности платежа;

Result URL — это специальная страница Вашего магазина, которая используется системой оповещения о платеже. Адрес данной страницы никто не должен знать, кроме Вас и системы ROBOKASSA. После выполнения платежа, на данную страницу отправляются данные, для выполнения проверок связанных с подлинностью и правильностью платежа.

Метод отсылки данных на страницу Result URL – на страницу Result URL система отправляет определенные данные о платеже и каким способом отправлять эти данные выбирается в данном меню.

Success URL – страница, которая используется в случае успешного проведения платежа (на данную страницу попадает пользователь после выполнения платежа);

Метод отсылки данных в Success URL – аналогично методу отсылки данных на страницу Result URL;

Fail URL – специальная страница, которая используется в случае отказа оплаты платежа;

Метод отсылки данных в Fail URL – аналогично методу отсылки данных на страницу Result URL;

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

3. Автоматическая форма инициализации платежа

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

<html>
<script language='javascript' type='text/javascript' 
src='https://auth.robokassa.ru/Merchant/Handler/MrchSumPreview.ashx?
MrchLogin=demo&
OutSum=10.96&
InvId=0&
Desc=Описание+тестового+товара&
Shp_code=Asp&
Shp_demo=0&
Shp_item=&
SignatureValue=a59cc0a610aaf876fe2cdb69d67133d2&
Culture=ru&
IncCurrLabel=WMRM&
Encoding=utf-8
'>
</script>
<!--sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном алфавитном порядке] -->
</html>

Как Вы видите, подключается файл по адресу https://auth.robokassa.ru/Merchant/Handler/MrchSumPreview.ashx, в который передаются следующие параметры, методом GET:

MrchLogin=demo – логин Вашей учетной записи, для примера, я использую Логин demo, так как наша учетная запись еще не активна. demo – это логин специальной учетной записи, использующейся для тестирования;

OutSum – сума платежа;

InvId – идентификатор платежа, должен быть уникальным;

Desc – описание платежа. Если в описании используется пробел, вместо него нужно использовать знак +;

Shp_code=Asp&,Shp_demo=0&,Shp_item=& — пользовательские данные, которые можно передавать вместе с данными платежа. Они будут возвращены Вам на страницах Result URL, Success URL, Fail URL

SignatureValue=a59cc0a610aaf876fe2cdb69d67133d2& — контрольная подпись платежа – используется для проверки подлинности платежа и формируется путем шифрования (однонаправленное шифрование md5) следующей строки: sMerchantLogin:nOutSum:nInvId:sMerchantPass1[:пользовательские параметры, в отсортированном алфавитном порядке. То есть другими словами формируете строку со следующими данными Логин, разделитель, Сумма платежа, разделитель, идентификатор платежа, разделитель, Первый пароль, разделитель, пользовательские параметры, отсортированные в алфавитном порядке (формат Shp_code=Asp – имя параметра = значение параметра). В качестве разделителя используется :. Пользовательские параметры это любые данные, которые Вы хотите передать во время выполнения платежа. Единственное условие - имена этих параметров должны начинаться с Shp в любом регистре;

Culture=ru – язык общения с пользователем;

IncCurrLabel – предпочитаемая форма оплаты, здесь передаем метку удобной формы оплаты. О всех возможных метках валют можно узнать перейдя по ссылке: https://merchant.roboxchange.com/WebService/Service.asmx/GetCurrencies?MerchantLogin=demo&language=ru

Encoding=utf-8 – страниц оплаты.

Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:

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

Данная страница автоматически генерируется под выбранный способ оплаты. Теперь если Вы хотите использовать приведенный выше код, Вам необходимо активировать Вашу учетную запись и вписать свой Логин в параметр MrchLogin и соответственно сформировать цифровую подпись платежа.

4. Ручная форма инициализации платежа

Теперь давайте рассмотрим ручное создание формы инициализации платежа, для этого создадим новый файл (формата HTML) вот такого содержания:

<?
$mrh_login = "Meits";
$mrh_pass1 = "1234567890q";

// номер заказа
$inv_id = 1;

// описание заказа
$inv_desc = "Оплата за тестовый товар";

// сумма заказа
$out_summ = "100";

// артикул товара товара
$shp_art = "05622";

$in_curr = "WMRM";

// язык
$culture = "ru";

// формирование подписи
$crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_Art=$shp_art");

echo "Сумма оплаты - ".$out_summ."<br />";
echo "Описание товара - ".$inv_desc."<br />";
// форма оплаты товара
///https://auth.robokassa.ru/Merchant/Index.aspx
print "<html>".
      "<form action='http://test.robokassa.ru/Index.aspx' method=POST>".
      "<input type=hidden name=MrchLogin value=$mrh_login>".
      "<input type=hidden name=OutSum value=$out_summ>".
      "<input type=hidden name=InvId value=$inv_id>".
      "<input type=hidden name=Desc value='$inv_desc'>".
      "<input type=hidden name=SignatureValue value=$crc>".
      "<input type=hidden name=Shp_Art value='$shp_art'>".
	   "<input type=hidden name=IncCurrLabel value=$in_curr>".
      "<input type=hidden name=Culture value=$culture>".
      "<input type=submit value='Pay'>".
      "</form></html>";
?>

Как Вы видите это обычная html форма, при помощи которой необходимо передать определенный набор скрытых полей, которые являются параметрами инициализации платежа. В атрибуте action данной формы необходимо передавать адрес скрипта обработчика - https://auth.robokassa.ru/Merchant/Index.aspx, но в нашем случае это http://test.robokassa.ru/Index.aspx, так как учетная запись еще не активирована, да и перед активацией нужно выполнить несколько тестов. После активации не забудьте сменить значение атрибута action.

Теперь давайте рассмотрим значения скрытых полей формы:

MrchLogin – логин Вашей учетной записи в системе ROBOKASSA – значение переменная $mrh_login;

OutSum – сумма платежа – значение – переменная $out_summ;

InvId – идентификатор платежа, либо другое уникальное значение – значение переменная $inv_id;

Desc – описание платежа – значение переменная $inv_desc;

SignatureValue – цифровая подпись платежа – значение переменная $crc. Обратите внимание, как сформирована данная переменная – вначале формируем строку, а затем шифруем при помощи шифрования MD5. Важное замечание: все пользовательские параметры, которые Вы хотите передать через форму (в нашем случае это Shp_Art=$shp_art – артикул товара), необходимо обязательно включать в данную строку.

IncCurrLabel – форма оплаты – значение переменная $in_curr. В нашем случае я принял за форму оплаты кошелек системы Webmoney (рублевый), Вы же можете либо ввести свою форму оплаты либо предложить пользователю самому. К примеру можно создать выпадающий список, используя который пользователь смог бы выбрать удобную для него валюту. Как получить метки всех доступных валют, мы с Вами рассмотрели Выше;

Culture value – язык общения сервиса с покупателем - значение переменная $culture.

То есть визуально данная форма представляет собой просто кнопку Оплатить, поэтому для наглядности, лучше вывести пользователю сумму оплаты и наименование покупаемого товара. Давайте перейдем в браузер и посмотрим, что у нас получилось:

Создавая данную страницу Вы должны сохранить, к примеру в базе данных все данные по текущему заказу, то есть сумму оплаты, описание, артикул и т.д Что бы после нажатия на кнопку оплатить у Вас в базе данных были все необходимые данные по заказу. Теперь давайте нажмем кнопку оплатить и посмотрим, что у нас получилось:

Обратите внимание, что когда мы работаем с тестовым сервером, то, нажимая кнопку оплатить мы не попадаем на страницу оплаты, а попадаем на страницу тестирования страниц Result URL, Success URL, Fail URL.

5. Страница RESULT URL

Данная страница необходима для проверки подлинности платежа, то есть, после успешного выполнения платежа (после снятия денег у пользователя). На данную страницу, пользователь ни когда не попадет, так как к ней обращается только сервер системы ROBOKASSA и отправляет ей специальные данные, необходимые для проверки. Главная задача этой страницы – проверка подлинности и правильности платежа. Вот примерный код данной страницы:

<?
$pass = "0987654321q";


$out_summ = $_POST["OutSum"];
$inv_id = $_POST["InvId"];
$shp_art = $_POST["Shp_Art"];
$crc = $_POST["SignatureValue"];


$crc = strtoupper($crc);

$my_crc = strtoupper(md5("$out_summ:$inv_id:$pass:Shp_Art=$shp_art"));

// проверка корректности подписи
// check signature
if ($my_crc !=$crc)
{
  echo "bad sign\n";
  exit();
}

// признак успешно проведенной операции
echo "OK$inv_id\n";
?>

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

Данные которые получает страница RESULT URL методом POST:

$_POST["OutSum"] – сумма платежа – должна полностью совпадать с суммой которую Вы указывали при инициализации платежа;

$_POST["InvId"] – идентификатор платежа – должен полностью совпадать с идентификатором указанным при инициализации платежа;

$_POST["Shp_Art"] – пользовательские параметры, в нашем случае артикул товара. Все параметры что Вы передавали через форму инициализации платежа, вернуться к Вам на данную страницу;

$_POST["SignatureValue"] – цифровая подпись платежа. Обратите внимание как она сформирована: сумма платежа, разделитель, идентификатор платежа, разделитель, второй пароль (который Вы указывали в настройках) , разделитель, пользовательские параметры, отсортированные в алфавитном порядке, в формате ипя параметра = значение.

То есть для получения и проверки цифровой подписи используем следующий код:

$my_crc = strtoupper(md5("$out_summ:$inv_id:$pass:Shp_Art=$shp_art"));

И полученная цифровая подпись должна полностью совпадать с той, что Вам передает сервер системы ROBOKASSA. Данная проверка необходима для защиты платежа от подмены данных, так как смотрите большинство данных мы получаем через метод POST, за исключением пароля №2, который знаете только Вы и сервис ROBOKASSA.

После проверки цифровой подписи, Вы можете также осуществить ряд проверок, по своему усмотрению, к примеру проверить пользовательские параметры и т.д. Если Вы полностью уверены, что платеж верен, можете обновить данные по заказу, в базе данных, и к примеру установить состояние заказа – ОПЛОЧЕНО. Так как когда сервер обращается к странице Result URL – платеж уже был совершен успешно. И в конце необходимо вернуть специальную строку – признак успешно выполненной проверки:

// признак успешно проведенной операции
echo "OK$inv_id\n";

То есть, как бы выводим на экран строку OK и идентификатор платежа.
Теперь давайте нажмем на кнопку получить данные (в блоке страницы Result URL) и тем самым протестируем наш скрипт.

6. Страница SUCCESS URL

На данную страницу переадресовывается пользователь после успешного перевода платежа. И что выполнять и выводить на экран браузера, используя данную страницу – это уже решать Вам. К примеру можно опять же выполнить проверку цифровой подписи платежа, так как на данную страницу, опять же сервер передает определенный набор данных, включая Ваши пользовательские параметры, так же можно вывести на экран пользователю квитанцию об успешной оплате и т.д. Вот примерный код данной страницы:

<?

// регистрационная информация (пароль #1)
// registration info (password #1)
$pass1 = "1234567890q";

// чтение параметров
// read parameters
$out_summ = $_POST["OutSum"];
$inv_id = $_POST["InvId"];
$shp_art = $_POST["Shp_Art"];
$crc = $_POST["SignatureValue"];

$crc = strtoupper($crc);

$my_crc = strtoupper(md5("$out_summ:$inv_id:$pass1:Shp_Art=$shp_art"));

// проверка корректности подписи
// check signature
if ($my_crc != $crc)
{
  echo "bad sign\n";
  exit();
}

echo "YES";
?>

Как Вы видите, данные, что приходят на эту страницу аналогичны, тем что приходят на страницу Result URL. Но обратите внимание, что цифровая подпись здесь формируется иначе, а именно: сумма платежа, разделитель, идентификатор платежа, разделитель, пароль №1, разделитель, пользовательские параметры, отсортированные в алфавитном порядке в формате имя = значение.

Далее если в браузере нажать Перейти в блоке страницы Success URL, нас переадресуют на страницу успешно проведенного платежа – эту же страницу и увидят Ваши покупатели, при покупке товара.

7. Страница FAIL URL

Данная страница необходима, если покупатель, по каким то причинам откажется от платежа. Сервер при этом передает на нее, только идентификатор платежа. Вот примерный код данной страницы:

<?

$inv_id = $_POST["InvId"];
echo "Вы отказались от оплаты. Заказ# $inv_id\n";

?>

Теперь давайте перейдем по ссылке, перейти в блоке страницы FAIL URL и посмотрим, что выведется на экране.

Как Вы видите это действительно страница Fail URL, код которой мы с Вами создали ранее.

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

Ну а теперь давайте прощаться. Всего Вам доброго и удачного кодирования!

Хотите узнать, что необходимо для создания сайта?

Посмотрите 3-х минутное видео и у Вас будет четкий пошаговый план по созданию сайта с нуля!

Смотреть видео

Метки: ,

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (19)

  1. Система Ценностей

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

    • Виктор Гавриленко

      Здравствуйте!
      Конечно, каждая платежная система чем то хороша, и у каждой есть свои собственные недостатки. На мой взгляд Робокасса одна из лучших платежных систем, но опять же вполне можно пользоваться и другими. Партнерсакая программа у нее есть, вот ссылка: http://www.roboxchange.com/Environment/Partners/Default.aspx

  2. Сергей

    Посмотрел, почитал. Вопрос: робокасса списывает средства с плательщика и только после этого проверяет сумму и остальные параметры, а что если они не верны? Средства на счет покупателя возвращаются? Или что? Логичнее было бы проверять эти данные в момент платежа, как это реализовано в мерчанте вебмани.

    • Виктор Гавриленко

      Здравствуйте, Сергей!
      Смотрите, изначально Вы передаете сервису Робокасса данные по платежу, то есть сумма и за что покупатель платит и т.д.
      Покупатель когда переходит на страницу оплаты видит, сумму оплаты и за что он платит. После проведения платежа и списания средств, Робокасса отправляет данные Вам для проверки, то есть присылает опять же данные: сумма платежа, артикул и т.д. Затем Вы судя по этим данным отмечаете у себя — факт оплаты товара.
      То есть данная проверка нужна именно Вам, что бы знать какой товар оплачен и кем он был оплачен.

  3. Рашит

    6 апреля 2014 года по номеру заказа оплатил купон…

  4. Алексей

    я регистрируюсь как физ лицо и там просят указывать данные паспорта, чтоб зачислять на webmoney деньги это нормально?

    • Алексей

      Почитал отзывы про ROBOKASSA — одни негативные!!, говорят, что одно кидалово

  5. OldMen

    Виктор добрый день, можете подсказать как то возможно вместо вот этой части кода
    «».
    и убогой кнопки «Pay» заменить на формы-кнопки которые представлены на сайте робокассы ну например вот на эту:
    auth.robokassa.ru/Merchant/PaymentForm/FormSS.js
    кнопки вот на этой странице
    robokassa.ru/ru/Doc/Ru/Interface.aspx
    думаю так бы ло бы на много красивее, или это не возможно.

  6. Инна

    Подскажите пожалуйста, где ошибка? На сайте proshivka-tv.ru/ при добавлении товара в корзину, появляется 2 формы робокассы.

    • Андрей Кудлай

      Очевидно в код поместили форму дважды, соответственно, одну из форм нужно убрать.

      • Инна

        В файлах Cart.php и Checkout.php вижу повторение. Может здесь ошибка?

        • Андрей Кудлай

          Возможно. Я с Вашим кодом не работал, поэтому что-то конкретное подсказать невозможно. Точно может сказать только разработчик сайта.

  7. Alexey

    А можете подсказать как установить робокассу на wordpress?

  8. Геннадий

    С самим скриптом всё более-менее понятно. Но не ясно, как конкретно (каким местом) его прикрутить к отдельно взятому движку сайта?
    Что, как и куда конкретно нужно вставлять в движок сайта?
    Или он заточен подо что-то узко специализированное?

    • Виктор Гавриленко

      Здравствуйте!
      Скрипт, который был создан в уроке, по сути — это отдельная страница оплаты, некого товара. То есть на данную страницу, должен быть переадресован пользователь для оплаты товара. Значит перед отображением формы инициализации платежа, Вам необходимо передать в нее данные об оплачиваемом товаре. То есть в движке сайта необходимо располагать ссылку на данную форму.

  9. Егор

    В скрипте для resultUrl можно возвращать текст ОК? Не будет ли ошибки? Потому что в документации сказано «Результат должен содержать текст OK и параметр InvId».

  10. Система SMOService

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

    Могли бы подсказать более подробно о подключении сейчас к системе для компаний ООО — юридических лиц, конкретно какие документы заполнить, что и куда нужно отправить. Заранее спасибо!

  11. Михаил

    Доброго времени суток! Удачи в делах, а можно сделать так, чтобы без кнопки («») автоматом переходило на форму платежа. С уважением, Михаил

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree