Loading...

Подключение робокассы к сайту

У многих возникает множество вопросов по подключению робокассы к сайту или лендингу. А именно вопрос связан с тем, как добавлять дополнительные поля например email или телефон и как их потом получать после оплаты.
Скрипт взят с сайта робокассы, но я изменил его немного, что бы Вы поняли как именно нужно подключать свои поля к робокассе.
Сейчас не проверял, но раньше при отправке данных кириллицей назад возвращались каракули и вообще не правильно проверялись данные в итоге чего неправильно работал скрипт робокассы. Я решил эту проблему, разберём её далее в скрипте.
 

Задача у нас будет такая

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

Настройка магазина робокассы

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

1. Идентификатор магазина - вбиваем любое слово, обычно я пишу доменное имя своего сайта без зоны (обязательно латинскими).

2-3. Пароль #1 и пароль #2 на ваше усмотрение, главное что бы не совпадали и запомните их или запишите куда-то, потом используем их в скриптах.

4. Result Url - вставляем адрес вашего сайта и дописываем путь к файлу result.php
   Если все файлы скрипта вы загрузите в корень, то разумеется прописываем так http://ваш-сайт.com/result.php

5-6. Остальные файлы также указываем как на картинке.
Метод отсылки данных везде должен стоять POST.
 

Настройка скриптов робокассы

Страницу с формой показывать не буду, думаю там итак всё понятно, обычная простая форма да и всё.
Все файлы прокомментированы. Если останутся вопросы, буду рад помочь, пишите вопросы в комментариях.

Action.php

<?php

if(!empty($_POST["name"]) && !empty($_POST["email"]) && !empty($_POST["phone"])  && !empty($_POST["price"])){ // если был пост
    
    $name = trim(htmlspecialchars(strip_tags(base64_encode(urlencode($_POST["name"]))))); // принимаем параметры с формы
    $email = trim(htmlspecialchars(strip_tags(base64_encode(urlencode($_POST["email"]))))); // принимаем параметры с формы
    $phone = trim(htmlspecialchars(strip_tags(base64_encode(urlencode($_POST["phone"]))))); // принимаем параметры с формы
    
    $mrh_login = "ident"; // идентификатор магазина
    $mrh_pass1 = "password-1"; // пароль #1
    
    $inv_id = file_get_contents("count.txt"); //получаем номер заказа с файла count.txt
    
    $inv_desc = "Тестовая оплата"; // описание заказа
    
    $out_summ = "100"; // сумма
    
    $shp_item = 1; // тип товара
    
    $in_curr = ""; // предлагаемая валюта платежа
    
    $culture = "ru"; // язык
    
    $encoding = "utf-8"; // кодировка
    
    $crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item:shp_mulo=$email:shp_names=$name:shp_phone=$phone"); // формирование подписи
    
    // Перенаправляем пользователя на страницу оплаты
    Header("Location: http://auth.robokassa.ru/Merchant/Index.aspx?MrchLogin=$mrh_login&OutSum=$out_summ&InvId=$inv_id&IncCurrLabel=$in_curr".
          "&Desc=$inv_desc&SignatureValue=$crc&Shp_item=$shp_item".
          "&Culture=$culture&Encoding=$encoding&shp_mulo=$email&shp_names=$name&shp_phone=$phone");
      
}

?>

В этом файле мы принимаем параметры отправленные с формы и сразу же перекидываем пользователя на страницу с оплатой.
Можно конечно было сделать предварительную запись информации в базу данных, но я не стал писать много кода, что бы вас не запутать.
Как вы заметили, я принимаю данные и сразу их кодирую в base64_encode и urlencode, из-за того что робокасса не может нормально принимать русские символы. Не знаю почему разработчики спустя 5 лет уже никак не могут допилить это нормально.

Result.php

<?php

/*
==========================
    Скрытая работа скрипта
==========================
*/

$mrh_pass2 = "password-2"; // пароль #2 

// чтение параметров
$out_summ = $_REQUEST["OutSum"]; // по умолчанию (не трогать)
$inv_id = $_REQUEST["InvId"]; // по умолчанию (не трогать)
$shp_item = $_REQUEST["Shp_item"]; // по умолчанию (не трогать)
$crc = $_REQUEST["SignatureValue"]; // по умолчанию (не трогать)

$shp_mulo = $_REQUEST["shp_mulo"]; // принимаем дополнительный параметр
$shp_names = $_REQUEST["shp_names"]; // принимаем дополнительный параметр
$shp_phone = $_REQUEST["shp_phone"]; // принимаем дополнительный параметр

$crc = strtoupper($crc); // переводим ключ в верхний регистр

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_item=$shp_item:shp_mulo=$shp_mulo:shp_names=$shp_names:shp_phone=$shp_phone")); // формируем новый ключ

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

$count = file_get_contents("count.txt"); //получаем номер покупки

$fp = fopen('count.txt', 'w'); //перезаписываем номер покупки в файл count.txt
fwrite($fp, $count+1);
fclose($fp);

// конвертируем полученные данные в нормальный режим
$email_k = urldecode(base64_decode($shp_mulo));
$name_k = urldecode(base64_decode($shp_names));
$phone_k = urldecode(base64_decode($shp_phone));

$result = $email_k."\r\n".$name_k."\r\n".$phone_k; // поместим данные в одну переменную

// записываем информацию о последней покупке с сайта в файл last_order.txt
// конечно лучше заносить данные в базу, но я показал простой вариант
$fp = fopen('last_order.txt', 'w');
fwrite($fp, $result);
fclose($fp);

echo "OK$inv_id\n"; // признак успешно проведенной операции (обязательно!)

?>
 
Этот файл отвечает за приём данных, которые отправляет робокасса в фоновом режиме. Т.е. человек на эту страницу не попадает. После оплаты скрипт робокассы отсылает данные на эту страницу, а она в свою очередь уже обрабатывает полученные данные и проверяет была ли оплата или нет. Как Вы уже заметили мы конвертируем полученные данные в обратный нормальный режим используя функции urldecode(base64_decode());
После конвертации мы заносим данные в файл last_order.txt
Также мы перезаписываем файл count.txt с новым номером заказа.

Success.php

<?php

/*
==========================================
    Страница, на которую будет переведён
    пользователь после успешной оплаты.
    Данная страница не обязательна, вместо
    неё можно переводить пользователя на
    главную страницу сайта, но лучше так.
==========================================
*/

$mrh_pass1 = "password-1"; // пароль #1

// чтение параметров
$out_summ = $_REQUEST["OutSum"]; // по умолчанию (не трогать)
$inv_id = $_REQUEST["InvId"]; // по умолчанию (не трогать)
$shp_item = $_REQUEST["Shp_item"]; // по умолчанию (не трогать)
$crc = $_REQUEST["SignatureValue"]; // по умолчанию (не трогать)

$shp_mulo = $_REQUEST["shp_mulo"]; // если нужно принимаем дополнительный параметр
$shp_names = $_REQUEST["shp_names"]; // если нужно принимаем дополнительный параметр
$shp_phone = $_REQUEST["shp_phone"]; // если нужно принимаем дополнительный параметр

$crc = strtoupper($crc); // переводим ключ в верхний регистр

$my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item:shp_mulo=$shp_mulo:shp_names=$shp_names:shp_phone=$shp_phone")); // формируем новый ключ

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

// если всё прошло гладко, то переводим пользователя на любую страницу Вашего сайта,
// например я перевожу на главную и передаю GET параметр order со значением ok
// а на главной странице проверяю, если значение order = ok, то выдаю ему модальное окошко (спасибо за оплату)
header("Location:/?order=ok");

?>

На эту страницу будет направлен пользователь после успешной оплаты. В ней так же можно проверить прошла ли оплата или нет и затем что-то делать. Например в этом скрипте я проверяю, если оплата прошла успешно, то перенаправляю пользователя на главную страницу сайта с GET запросом /?order=ok а на главной странице уже можно написать jquery скрипт, который будет проверять был ли get запрос такой.

Я сделал у себя вот так:

$(function(){
    var loc = window.location.search;
    if(loc == "?order=ok"){
        $(".order").css("display", "block");
    }
})

Т.е. мы показываем модальное окно, "Оплата прошла успешно".
 

Fail.php

<?php

/*
========================================
    Страница отказа от оплаты или ошибки
========================================
*/

$inv_id = $_REQUEST["InvId"];
echo "Вы отказались от оплаты. Заказ# $inv_id\n";
echo "You have refused payment. Order# $inv_id\n";

?>

Простой файл, на который будет отправлен пользователь если оплата не прошла или человек просто отказался от оплаты.
 
Можете скачать скрипт для подключения робокассы на своём сайте.
Буду рад комментариям и помочь в случае возникновения вопросов.
Внимание! У Вас нет прав для просмотра скрытого текста.
Если у Вас возникли проблемы или Вы не владеете языком php, можете заказать настройку у меня. Контакты внизу сайта.


Автор: Kylaksizov
Поделиться:

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


  1. avatar_/templates/Kylaksizov/dleimages/noavatar.png
    filisonov 1 октября 2015 22:21
    • 0
    Ответить
    Вот у меня возник вопрос. А каким образом запускается этот файл Action.php, т.е. на странице с формой должна быть кнопка оплатить или как?
    1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
      Kylaksizov 1 октября 2015 22:27
      • 0
      Ответить
      Смотрите:
      В файле action.php на второй строке
      if(!empty($_POST["name"]) && !empty($_POST["email"]) && !empty($_POST["phone"])  && !empty($_POST["price"])){

      значит на странице должна быть форма содержащая такие инпуты, с такими name="" как name, email, phone и price, которые будут переданы через форму.
      Можно некоторые поля присвоить сразу в action.php
      Если ничего не поняли, могу написать скайп завтра, объясню...
      1. avatar_/templates/Kylaksizov/dleimages/noavatar.png
        filisonov 1 октября 2015 22:35
        • 0
        Ответить
        Да в скайпе вы уже у меня есть:) Просто есть сайт с простой формой тут (внизу сайта), а нужно чтобы передавалось еще ФИО,телефон,email и номер счета который сообщит оператор. Возможно так?
        1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
          Kylaksizov 1 октября 2015 22:51
          • 0
          Ответить
          Можно всё что угодно конечно, только нужно всё разжевать мне что нужно именно. Напишите детально, а я завтра постараюсь помочь Вам.
          Разжуйте мне Ваши пожелания, а я разжую Вам как это сделать и завтра отвечу.
          1. avatar_/templates/Kylaksizov/dleimages/noavatar.png
            filisonov 1 октября 2015 23:04
            • 0
            Ответить
            Хорошо напишу вам в скайп.
  2. avatar_/templates/Kylaksizov/dleimages/noavatar.png
    redzoome 15 марта 2016 14:09
    • 0
    Ответить
    Здравствуйте, а нет ли файла формы который работал бы с данными файлами? В архиве его нет.
    1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
      Kylaksizov 15 марта 2016 14:13
      • 0
      Ответить
      Файла самой формы нет к сожалению, думал что это все знают.
      Например в action.php есть:
      $_POST["email"];

      значит в форме должно быть поле типа:
      <input type="text" name="email">
      1. avatar_/templates/Kylaksizov/dleimages/noavatar.png
        redzoome 15 марта 2016 14:35
        • 0
        Ответить
        Понял, спасибо, буду разбираться, хоть и не уверен, т.к. подключаю робокассу к joomla3+K2 и цена должна браться с параметра доп. поля материала K2.
        1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
          Kylaksizov 15 марта 2016 14:37
          • 0
          Ответить
          Цена указывается в поле price или создаётся в файле php, если не хотите, что бы пользователь менял цену.
          1. avatar_/templates/Kylaksizov/dleimages/noavatar.png
            redzoome 15 марта 2016 17:18
            • 0
            Ответить
            Не получается проверить работу робокассы в тестовом режиме. Всегда получаю результат "К сожалению, оплата счетов этого магазина сейчас невозможна. Магазин не активирован" пароли вписывал и тестовые и основные. Сайт находится на временном домене, в настройках робокассы прописан тоже этот временный домен, магазин не активировал. А вот как его теперь проверить в тестовом режиме - не понимаю.
            1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
              Kylaksizov 15 марта 2016 17:21
              • 0
              Ответить
              Вы читали требования к сайтам? На сайте должны быть контакты продавца и т.д. Если сайт состоит из белой страницы из пару строк текста, то понятно всё. Другой причины не вижу.
  3. avatar_/templates/Kylaksizov/dleimages/noavatar.png
    Александр 2 декабря 2016 02:48
    • 0
    Ответить
    Здравствуйте! Все сделал как надо но выдает ошибку что это может быть?

    я вам в скайпе напишу и скриншот отправлю ошибки....
    1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
      Kylaksizov 2 декабря 2016 09:48
      • +1
      Ответить
      Не увидел Вас в скайпе, да и не нужно в скайп писать, создавайте тему на форуме forum.kylaksizov.ru и я Вам помогу.
  4. avatar_/templates/Kylaksizov/dleimages/noavatar.png
    Roksi 30 января 2017 22:49
    • 0
    Ответить
    Спасибо Владимир, наконец то получилось передать кириллицу.
  5. avatar_//kylaksizov.ru/uploads/fotos/foto_724.jpg
    Виктор Алтуфьев 18 апреля 2017 03:36
    • 0
    Ответить
    Не получается, настроить оплату. Загрузил ваш скрипт на свой сайт с изминениями, которые требовались. Но работа так и не пошла. У меня на сайте есть кнопка, какую ссылку туда вставить чтобы работа робокассы началась?
    1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
      Kylaksizov 18 апреля 2017 08:53
      • 0
      Ответить
      Нужно посмотреть, что бы понять в чем проблема. Это равносильно тому, если я скажу, что у меня в доме что-то поломалось, не подскажите в чем дело?
      1. avatar_//kylaksizov.ru/uploads/fotos/foto_724.jpg
        Виктор Алтуфьев 18 апреля 2017 17:31
        • 0
        Ответить
        Каким образом могу с Вами связаться, для того чтобы помочь мне с настройкой или вы могли подсказать, как сделать?
        1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
          Kylaksizov 18 апреля 2017 17:33
          • 0
          Ответить
          Внизу есть скайп
  6. avatar_/templates/Kylaksizov/dleimages/noavatar.png
    Константин 28 апреля 2017 13:49
    • 0
    Ответить
    как сделать тестовый вариант?

    в action.php если указать http:// test.robokassa.ru / Index.aspx то выходит главная страница сайта робкассы
    1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
      Kylaksizov 28 апреля 2017 13:50
      • 0
      Ответить
      На сколько я помню, у них нет тестовой оплаты.
      1. avatar_/templates/Kylaksizov/dleimages/noavatar.png
        Константин 28 апреля 2017 14:01
        • 0
        Ответить
        вообще есть http://docs.robokassa.ru/ru#2388
        1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
          Kylaksizov 28 апреля 2017 14:02
          • 0
          Ответить
          Значит ошибся. Видите и сами нашли)
          1. avatar_/templates/Kylaksizov/dleimages/noavatar.png
            Константин 28 апреля 2017 14:04
            • 0
            Ответить
            найти та я нашел, но как его применит ???
      2. avatar_/templates/Kylaksizov/dleimages/noavatar.png
        Константин 28 апреля 2017 14:02
        • 0
        Ответить
        но как проверит это с ваших не как не пойму. :(
        1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
          Kylaksizov 28 апреля 2017 14:04
          • 0
          Ответить
          Там все четко написано, нужно добавить поля. Если Вы не владеете языком верски и PHP, то обратитесь к web-программисту. Если владеете, то там все понятно.
          1. avatar_/templates/Kylaksizov/dleimages/noavatar.png
            Константин 28 апреля 2017 14:05
            • 0
            Ответить
            ок, спасибо
  7. avatar_/templates/Kylaksizov/dleimages/noavatar.png
    Гость Евгений 22 мая 2017 21:43
    • 0
    Ответить
    Добрый вечер,у меня почему то при нажатии кнопки купить не отправляется на сайт робокассы,подскажите пожалуйста
    вот сайт (сайт скркыт)
    1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
      Kylaksizov 29 сентября 2017 20:02
      • 0
      Ответить
      Ваш сайт не работает
  8. avatar_/templates/Kylaksizov/dleimages/noavatar.png
    Лера 29 сентября 2017 19:33
    • 0
    Ответить
    Добрый день, а подскажите как вообще внедрить в сайт, созданный на виски систему робокассы
    спасибо!
    1. avatar_http://kylaksizov.ru/uploads/fotos/foto_1.jpg
      Kylaksizov 29 сентября 2017 20:04
      • 0
      Ответить
      Возможно вы имели ввиду Wix ? Если сайт создан на конструкторе, то навряд-ли. Если есть доступ FTP, то можно.
    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent

В корзине: 0 шт. 0 руб.
Отключите расширение AdBlock на нашем сайте!

Собеседники

Переписка

Нименование Количество Цена / 1 шт.
Всего: 0 руб.