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

У многих возникает множество вопросов по подключению робокассы к сайту или лендингу. А именно вопрос связан с тем, как добавлять дополнительные поля например 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

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

  1. 0

    filisonov

    Вот у меня возник вопрос. А каким образом запускается этот файл Action.php, т.е. на странице с формой должна быть кнопка оплатить или как?
    1 октября 2015 22:21 Ответить
    1. 0

      Kylaksizov

      Смотрите:
      В файле action.php на второй строке
      if(!empty($_POST["name"]) && !empty($_POST["email"]) && !empty($_POST["phone"])  && !empty($_POST["price"])){

      значит на странице должна быть форма содержащая такие инпуты, с такими name="" как name, email, phone и price, которые будут переданы через форму.
      Можно некоторые поля присвоить сразу в action.php
      Если ничего не поняли, могу написать скайп завтра, объясню...
      1 октября 2015 22:27 Ответить
      1. 0

        filisonov

        Да в скайпе вы уже у меня есть:) Просто есть сайт с простой формой тут (внизу сайта), а нужно чтобы передавалось еще ФИО,телефон,email и номер счета который сообщит оператор. Возможно так?
        1 октября 2015 22:35 Ответить
        1. 0

          Kylaksizov

          Можно всё что угодно конечно, только нужно всё разжевать мне что нужно именно. Напишите детально, а я завтра постараюсь помочь Вам.
          Разжуйте мне Ваши пожелания, а я разжую Вам как это сделать и завтра отвечу.
          1 октября 2015 22:51 Ответить
          1. 0

            filisonov

            Хорошо напишу вам в скайп.
            1 октября 2015 23:04 Ответить
  2. 0

    redzoome

    Здравствуйте, а нет ли файла формы который работал бы с данными файлами? В архиве его нет.
    15 марта 2016 14:09 Ответить
    1. 0

      Kylaksizov

      Файла самой формы нет к сожалению, думал что это все знают.
      Например в action.php есть:
      $_POST["email"];

      значит в форме должно быть поле типа:
      <input type="text" name="email">
      15 марта 2016 14:13 Ответить
      1. 0

        redzoome

        Понял, спасибо, буду разбираться, хоть и не уверен, т.к. подключаю робокассу к joomla3+K2 и цена должна браться с параметра доп. поля материала K2.
        15 марта 2016 14:35 Ответить
        1. 0

          Kylaksizov

          Цена указывается в поле price или создаётся в файле php, если не хотите, что бы пользователь менял цену.
          15 марта 2016 14:37 Ответить
          1. 0

            redzoome

            Не получается проверить работу робокассы в тестовом режиме. Всегда получаю результат "К сожалению, оплата счетов этого магазина сейчас невозможна. Магазин не активирован" пароли вписывал и тестовые и основные. Сайт находится на временном домене, в настройках робокассы прописан тоже этот временный домен, магазин не активировал. А вот как его теперь проверить в тестовом режиме - не понимаю.
            15 марта 2016 17:18 Ответить
            1. 0

              Kylaksizov

              Вы читали требования к сайтам? На сайте должны быть контакты продавца и т.д. Если сайт состоит из белой страницы из пару строк текста, то понятно всё. Другой причины не вижу.
              15 марта 2016 17:21 Ответить
  3. 0

    Александр

    Здравствуйте! Все сделал как надо но выдает ошибку что это может быть?

    я вам в скайпе напишу и скриншот отправлю ошибки....
    2 декабря 2016 02:48 Ответить
    1. +1

      Kylaksizov

      Не увидел Вас в скайпе, да и не нужно в скайп писать, создавайте тему на форуме forum.kylaksizov.ru и я Вам помогу.
      2 декабря 2016 09:48 Ответить
  4. 0

    Roksi

    Спасибо Владимир, наконец то получилось передать кириллицу.
    30 января 2017 22:49 Ответить
  5. 0

    Виктор Алтуфьев

    Не получается, настроить оплату. Загрузил ваш скрипт на свой сайт с изминениями, которые требовались. Но работа так и не пошла. У меня на сайте есть кнопка, какую ссылку туда вставить чтобы работа робокассы началась?
    18 апреля 2017 03:36 Ответить
    1. 0

      Kylaksizov

      Нужно посмотреть, что бы понять в чем проблема. Это равносильно тому, если я скажу, что у меня в доме что-то поломалось, не подскажите в чем дело?
      18 апреля 2017 08:53 Ответить
      1. 0

        Виктор Алтуфьев

        Каким образом могу с Вами связаться, для того чтобы помочь мне с настройкой или вы могли подсказать, как сделать?
        18 апреля 2017 17:31 Ответить
        1. 0

          Kylaksizov

          Внизу есть скайп
          18 апреля 2017 17:33 Ответить
  6. 0

    Константин

    как сделать тестовый вариант?

    в action.php если указать http:// test.robokassa.ru / Index.aspx то выходит главная страница сайта робкассы
    28 апреля 2017 13:49 Ответить
    1. 0

      Kylaksizov

      На сколько я помню, у них нет тестовой оплаты.
      28 апреля 2017 13:50 Ответить
      1. 0

        Константин

        вообще есть http://docs.robokassa.ru/ru#2388
        28 апреля 2017 14:01 Ответить
        1. 0

          Kylaksizov

          Значит ошибся. Видите и сами нашли)
          28 апреля 2017 14:02 Ответить
          1. 0

            Константин

            найти та я нашел, но как его применит ???
            28 апреля 2017 14:04 Ответить
      2. 0

        Константин

        но как проверит это с ваших не как не пойму. :(
        28 апреля 2017 14:02 Ответить
        1. 0

          Kylaksizov

          Там все четко написано, нужно добавить поля. Если Вы не владеете языком верски и PHP, то обратитесь к web-программисту. Если владеете, то там все понятно.
          28 апреля 2017 14:04 Ответить
          1. 0

            Константин

            ок, спасибо
            28 апреля 2017 14:05 Ответить
  7. 0

    Гость Евгений

    Добрый вечер,у меня почему то при нажатии кнопки купить не отправляется на сайт робокассы,подскажите пожалуйста
    вот сайт (сайт скркыт)
    22 мая 2017 21:43 Ответить
    1. 0

      Kylaksizov

      Ваш сайт не работает
      29 сентября 2017 20:02 Ответить
  8. 0

    Лера

    Добрый день, а подскажите как вообще внедрить в сайт, созданный на виски систему робокассы
    спасибо!
    29 сентября 2017 19:33 Ответить
    1. 0

      Kylaksizov

      Возможно вы имели ввиду Wix ? Если сайт создан на конструкторе, то навряд-ли. Если есть доступ FTP, то можно.
      29 сентября 2017 20:04 Ответить
  9. 0

    Роман Трунин

    Добрый день!
    Нам необходимо "прикрутить" агрегатор к нашей платформе, сайту. Вы могли бы поучаствовать в этой успешной операции?
    И каковы ваши условия...
    3 ноября 2017 16:08 Ответить
    1. 0

      Kylaksizov

      К сожалению не могу помочь, так как сам загружен сейчас.
      3 ноября 2017 17:39 Ответить
  10. 0

    Гость Андрей

    Здравствуйте, у меня вопрос, а что если файла count.txt нету и он не требуется на сайте?Т.е номер заказа на сайте вообще не нужен.. Можно просто вырезать этот участок кода, или что? Подскажите пожалуйста.. И в другой txt файл у вас не информация об оплате заносится почему-то..
    11 ноября 2017 06:29 Ответить
    1. 0

      Kylaksizov

      Дело в том, что робокасса требует этот номер. И если номер будет всегда один и тот же, то робокасса будет выдавать ошибку и оплатить человек не сможет. Занесение данных можете сделать куда угодно, хоть в базу.
      11 ноября 2017 09:29 Ответить
      1. 0

        Гость Андрей

        Тогда у меня ещё 2 вопроса: файлы count.txt и last_order.txt должны быть изначально пустыми?И как сделать так что бы в Out_summ заносилась цена, которую пользователь пишет в форме?
        11 ноября 2017 11:45 Ответить
        1. 0

          Kylaksizov

          Да, пустыми. Что бы сумму заполнял покупатель, просто из формы её передавайте в обработчик, а в нем уже принимаете.
          11 ноября 2017 11:49 Ответить
          1. 0

            Гость Андрей

            Если я делаю так out sum='$price' то на странице оплаты робокассы пишет что некорректные данные..
            12 ноября 2017 08:05 Ответить
            1. 0

              Kylaksizov

              Скиньте скриншот кода формы, с которой производиться переход на оплату. Уверен, у Вас выводится вместо цены, сама переменная.
              12 ноября 2017 08:08 Ответить
  11. 0

    Гость Андрей

    Kylaksizov,
    а тут особо кидать и нечего, вот код формы:
    ...
    Где стоит hidden и заполнено value, это заполняется автоматически..
    12 ноября 2017 08:16 Ответить
    1. 0

      Kylaksizov

      Нужно проинспектировать элемент формы и сделать скрин кода, а не то что Вы мне скинули. (Посмотреть код через браузер)
      12 ноября 2017 08:18 Ответить
  12. 0

    Гость Андрей

    Вот скриншот
    12 ноября 2017 08:37 Ответить
    1. 0

      Kylaksizov

      Судя по скриншоту, проблем не вижу. Прочтите документацию робокассы. Возможно Вы не правильно указали дополнительные поля, которые должны начинаться с определенных символов и по очереди в алфавитном порядке. В общем прочтите лучше документацию.
      12 ноября 2017 08:41 Ответить
      1. 0

        Гость Андрей

        Так вы мне сказали, что что бы в робокассу передавалось введённая сумма, нужно её вывести в обработчик, и использовать дальше, я так и сделал: сначала - $price = trim(htmlspecialchars(strip_tags(base64_encode(urlencode($_POST["price"])))))
        ; а потом подставил это в - $out_summ = "$price"; больше я почти ни чего не трогал...
        12 ноября 2017 08:48 Ответить
        1. 0

          Kylaksizov

          Я подсказал куда двигаться, но я не говорил вам что куда вписать нужно. Вы владеете языком php? Если нет, то сомневаюсь, что Вы сделали все правильно.
          12 ноября 2017 08:54 Ответить
          1. 0

            Гость Андрей

            Ну, по крайней мере до этого форма регистрации с обработчиком работала нормально, и информация заносилась и заносится сейчас в БД нормально.. Может робокасса просто данные из переменных не принимает?Как мне тогда связать данные из формы с вашим обработчиком? И да, я владею языком php
            12 ноября 2017 09:15 Ответить
  13. 0

    Kylaksizov

    Ну если владеете, то разберитесь сами, так как я не вижу ваш код целиком. Но и скидывать сюда не нужно, я разбираться точно не буду. Я предоставил рабочий код на сайте, а если вносите изменения, то и ошибки тоже сами исправляйте пожалуйста. Либо закажите правки на фрилансе и т.д.
    12 ноября 2017 09:18 Ответить
    1. -1

      Гость Андрей

      Т.е. если код ваш, то вы и помогать не будете?)Хорошая логика..
      12 ноября 2017 09:27 Ответить
      1. 0

        Kylaksizov

        Код - точная копия того, что предлагает робокасса, и немного переделана под другую задачу.
        И если бы даже я с нуля его написал, то разумеется я не веду поддержку, так как он бесплатно распространяется. Другое дело если бы я за это брал деньги, тогда поддержка бы была. А так я подсказал, так ещё и ложку с медом дать? Ахаха!
        12 ноября 2017 09:41 Ответить
    2. +1

      Гость Андрей

      В общем сделал я))Поместив сам обработчик на ту же страницу, где находится форма, и прописав цену так:$price = $_POST['price'], рискну предположить, что разработчики поправили наконец то, про что вы писали, что без кодировки данные не принимаются..
      12 ноября 2017 09:42 Ответить
      1. 0

        Kylaksizov

        Я вообще уже давно не пользуюсь робокассой, потому что они с самого начала сделали все тяп-ляп и не прислушивались к клиентам. У них была одна цель, срубить побольше бабла.
        12 ноября 2017 09:51 Ответить
        1. 0

          Гость Андрей

          Да, теперь кодировка данных не нужна, робокасса и без неё нормально распознаёт данные)можете убрать кодировку данных из своей статьи..
          12 ноября 2017 12:51 Ответить
          1. 0

            Kylaksizov

            Ну если вы сделаете все по ихним материалам, то я сомневаюсь что не будет кроказябров.А из статьи я точно не буду убирать, так как пользователям помогает мое решение.
            12 ноября 2017 12:56 Ответить
            1. 0

              Гость Андрей

              Я всё делал по вашей статье, но как это ни странно, данные не принимались у меня именно из-за того что они были в кодировке.. Как я сразу её убрал, так всё стало нормально.. Вывод? Проблема именно в кодировке данных.. И вопрос - почему может не работать вывод модального окна, оплата прошла успешно?Я сделал всё в точности как вы написали.. Или надо ещё что-то добавить?
              13 ноября 2017 09:58 Ответить
  14. 0

    Kylaksizov

    Гость Андрей,
    Возможно робакасса и обновила свое API, что мало вероятно. Ну и хорошо что заработало. А на счет модального окна, это вопрос не ко мне, у меня нет никакого окна в коде, вы что-то напутали. У меня написан скрипт, который открывает его, но самого окна нет, это вы уже сами пишите.
    13 ноября 2017 10:03 Ответить
  15. 0

    Макс

    Здравствуйте, у меня вот какая беда, при переходе на action.php просто пустая страница, header не срабатывает, в чем может быть проблема?
    22 ноября 2017 00:01 Ответить
    1. 0

      Kylaksizov

      Возможно до этого происходит какой-то вывод. Измените его просто на echo.
      22 ноября 2017 09:08 Ответить
  16. 0

    Гость Николай

    У меня сайт на wix. Зарегистрировался в Робокассе как физ лицо. И под него зарегистрировал магазин. Поможите установить на сайт все что нужно для отправки платежей с сайта и их приема в магазине?
    3 декабря 2017 11:37 Ответить
    1. 0

      Kylaksizov

      Сейчас нет времени помогать, извините.
      3 декабря 2017 12:37 Ответить


Отправить

В корзине: 0 шт.

на сумму: 0

Всего: 0

Оформить заказ Очистить корзину