Robokassa – Как подключить оплату на сайте

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

Легко тем, у кого есть Stripe например – подключил и вперёд, дальше можно уже состредоточиться лишь на бизнесе и на качестве того, что вы продаёте. Тем не менее, можно мечтать, а можно что-то делать, поэтому ещё в 2020 я подключил робокассу и вообще не жалею о ней.

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

Шаг 1. Создание формы (или кнопки) оплаты на сайте

Кстати, если вы не планируете кодить всё это сами, пишите нам, мы вам поможем.

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

страница оплаты Robokassa
Язык страницы зависит от языка в браузере.

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

Редирект происходит по URL https://auth.robokassa.ru/Merchant/Index.aspx, причём подходит как обычный редирект (методом GET), так и отправка формы методом POST.

Параметры

А вот список параметров:

MerchantLogin
Это идентификатор магазина (Shop ID), который вы можете найти в настройках магазина в личном кабинете робокассы.
OutSum
Сумма платежа, числовое значение.
InvId
Уникальный идентификатор заказа. Например я создаю заказы как произвольные типы записей и использую ID поста в качестве значения этого параметра.
Description
Описание заказа.
SignatureValue
Проверка подлинности. Что-то типо одноразовых чисел в WordPress. Является строкой вида MerchantLogin:OutSum:InvId:Receipt:MerchantPass:Парам1=Значение1:Парам2=Значение2, которая хешируется в MD5. Если страшно, то сразу переходите в пример, если очень страшно, пишите нам, мы вам всё сделаем. Нужно для того, чтобы например кто-то не подставил другую сумму платежа и т.д.
Email
Адрес электронной почты покупателя, который предзаполнится на странице оплаты.
Shp_*****
Любой произвольный параметр (и любое их количество), который мы можем использовать в дальнейшем.
Receipt
Информация для отправки чека, подробнее ниже.
IsTest
Укажите в значение 1, если сейчас вы только тестируете платежи, также нужно будет указать другие, тестовые значения MerchantLogin и MerchantPass.

Робочеки

Супер-главным преимуществом робокассы является то, что не нужно париться с онлайн-кассой. Единственной запарой будет создать массив с параметрами чека, преобразовать его в JSON и передать в параметр Receipt. Ура-ура.

Пример

Давайте наконец опробуем всё это в действии. В качестве примера я воспользуюсь обычным редиректом на страницу оплаты.

// набор параметров, которые мы получили чуть ранее
$description = 'Покупка курса о WordPress.';
$amount = 3500; // используется валюта из настроек магазина кстати
$shop_id = 'mishamisha';
$pass = ''; // указываем значение Password1 из настроек магазина
$order_id = 54321; // ID заказа
$course_id = 511; // ID курса/товара
$email = 'no-reply@misha.agency'; // email покупателя
 
// информация для робочеков
$receipt = json_encode( array(
	'sno' => 'usn_income',
	'items' => array(
		array(
			'name' => $description, 
			'quantity' => 1,
			'sum' => $amount,
			'payment_method' => 'full_payment',
			'payment_object' => 'service',
			'tax' => 'none'
		)
	)
) );
 
// генерируем подпись
$crc = md5("$shop_id:$amount:$order_id:$receipt:$pass:Shp_courseid={$course_id}:Shp_email=$email");
 
$redirect = add_query_arg(
	array(
		'MerchantLogin' => $shop_id, // ID магазина
		'OutSum' => $amount, // общая стоимость заказа
		'InvId' => $order_id, // ID заказа
		'Description' => $description, // описание
		'SignatureValue' => $crc, // подпись
		'Email' => $email, // email для страницы оплаты
		'Shp_courseid' => $course_id, // ID курса например
		'Shp_email' => $email, // Email пользователя
		'Receipt' => urlencode( $receipt ), // инфа о чеке
	),
	'https://auth.robokassa.ru/Merchant/Index.aspx'
);
 
// редиректим на оплату
wp_redirect( $redirect );
exit;

Обратите внимание, что я использовал функции add_query_arg() и wp_redirect(), потому что предполагаю, что это код будет использоваться в WordPress. Если же нет, то эти функции вам понадобится заменить на альтернативные.

Шаг 2. Обработка платежей

Я более чем уверен, что вы бы хотели, чтобы ваши заказы обрабатывались автоматически. Например, чтобы ваш сайт сам мог определять, прошла ли оплата или что-то пошло не так. Для этого нам понадобится указать в настройках магазина робокассы три URL.

URL для обработки платежей в Robokassa
  • Result URL – по этому урлу будет пинговать сама робокасса при успешном платеже. Именно тут мы будем отправлять письма пользователям, открывать доступ к курсам и т.д.
  • Success URL – перенаправляем на эту страницу пользователей при успешной оплате.
  • Fail URL – перенаправляем на эту страницу пользователей при отказе от оплаты.

Result URL

Начнём с самого главного. Как вы уже могли заметить на скриншоте выше, по сути это какой-то произвольный PHP-файл, к которому будет обращаться Robokassa при успешной оплате чего-либо пользователем.

Какое содержание может быть у этого файла? Примерно такое:

// основные параметры
$OutSum = ! empty( $_POST[ 'OutSum' ] ) ? $_POST[ 'OutSum' ] : '';
$InvId = ! empty( $_POST[ 'InvId' ] ) ? $_POST[ 'InvId' ] : '';
$SignatureValue = ! empty( $_POST[ 'SignatureValue' ] ) ? strtoupper( $_POST[ 'SignatureValue' ] ) : '';
$mrh_pass2 = ''; // значение Password2 из настроек магазина в личном кабинете робокассы
// наши произвольные параметры
$Shp_courseid = ! empty( $_POST[ 'Shp_courseid' ] ) ? $_POST[ 'Shp_courseid' ] : '';
$Shp_email = ! empty( $_POST[ 'Shp_email' ] ) ? $_POST[ 'Shp_email' ] : '';
 
// проверяем подлинность
if( $SignatureValue == strtoupper( md5( "$OutSum:$InvId:$mrh_pass2:Shp_courseid=$Shp_courseid:Shp_email=$user_email" ) ) ) {
 
	// ура, оплата прошла, всё ок!
 
	// выводим также инфу для робокассы, что всё ок
	echo 'OK'.$InvId;
}

Success URL

По этому адресу будет перенаправлен пользователь в случае успешной оплаты на сайте. Тут никаких серьёзных вещей рекомендую не делать, максимум предоставить инфу о заказе и написать «Спасибо».

В любом случае, если захотите что-либо сделать на этой странице, не забудьте проверить подпись, практически так же, как мы это делали тут, но только используем Пароль 1.

if( $SignatureValue == strtoupper( md5( "$OutSum:$InvId:$mrh_pass1:Shp_courseid=$Shp_courseid:Shp_email=$user_email" ) ) ) {
 
}

Fail URL

На эту страницу будет перенаправлен пользователь с Робокассы в случае, если он отказался от оплаты. Тут уже никаких подписей проверять не нужно и нам будет доступно всего лишь два параметра – OutSum и InvId.

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

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

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал