Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Внедрение Робокассы


Автор: qpile 25.11.2012, 15:45
Здравствуйте, уважаемые форумяне!
Чтобы сделать оплату на робокассу-сперва нужно сделать форму оплаты .
Сделал. Все понятно, кроме того как генерировать SignatureValue. Для его создания нужно знать InvID. То есть идентификатор транзации. А как его получить, если его нам возвращается сама робокасса.
Так же как нам подставить в эту форму сам сгенерированный signature? Как и когда его вызывать? Нашел php скрипт для генерации, но так и не понял как прикрутить. Помогите, пожалуйста, люди добрые smile

Код

<?php
    //Ваш логин в системе
    $login = "you_login";
    //Сумма платежа, с помощью точки можно указывать вещественное число, например 35.90
    $sum = 200;
    //Уникальный номер транзакции в вашем магазине, он может быть любым но состоять только //из цифр
    $id = 12345;
    //Описание товара
    $tovar = "Курс по ООП";      
    //Ваш пароль #1 который вы указывали в настройках
    $pass1 = pass1;
    //Теперь все это шифруем и передаем Робокассе, это своеобразный уникальный номер вашего магазина
    $signature = md5($login . ":" . $sum . ":" . $id . ":" . $pass1);
  ?>




Код

<form method="post" action="http://test.robokassa.ru/Index.aspx">
<input type="hidden" name="MrchLogin" value="" />
<input type="hidden" name="OutSum" value="1" />
<input type="hidden" name="InvId" value="0" />
<input type="hidden" name="Desc" value="desc" />
<input type="hidden" name="Culture" value="ru" />
<input type="hidden" name="SignatureValue" value="<?=$signature;?>" />
<input type="submit" value="Оплатить" />
</form>



Автор: Arantir 25.11.2012, 16:12
Первый раз этим занимаетесь?
Потому, что после второго все начинают внимательнее читать документацию:
Цитата

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


Вы сами должны сформировать ID и обеспечивать его уникальность. 
Вы же ведете учет выставленных счетов, я надеюсь? Вот приравняйте этот invID  к своему ID счета и отправляйте робокассе.

Автор: qpile 1.12.2012, 09:03
Спасибо, разобрался почти с этим вопросом вот скрипт самодельный
Код

<?php

$user="";
$pas="";
$host="localhost";
$link=@mysql_connect($host, $user, $pas) or die ("<b>Ошибка при подключении к серверу MySQL!<b>");
mysql_select_db("", $link);
$a = mysql_query("SELECT COUNT(1) FROM orders");
$b  = mysql_fetch_array($a);
$c=$b[0]+1;
mysql_query("INSERT INTO orders (orderNumber)VALUES ('$c')");
mysql_close($link);

 //Ваш логин в системе
    $login = "";
    //Сумма платежа, с помощью точки можно указывать вещественное число, например 35.90
    $sum = 200;
    //Уникальный номер транзакции в вашем магазине, он может быть любым но состоять только //из цифр
    $id = $c;
    //Описание товара
    $tovar = "За программное обеспечение";      
    //Ваш пароль #1 который вы указывали в настройках
    $pass1 = "";
    //Теперь все это шифруем и передаем Робокассе, это своеобразный уникальный номер вашего магазина
    $signature = md5($login . ":" . $sum . ":" . $id . ":" . $pass1);
    
echo $signature;
?>


Но как теперь это значение передать на форму мою? 

Код

<form method="post" action="http://test.robokassa.ru/Index.aspx">
<input type="hidden" name="MrchLogin" value="" />
<input type="hidden" name="OutSum" value="1" />
<input type="hidden" name="InvId" value="0" />
<input type="hidden" name="Desc" value="desc" />
<input type="hidden" name="Culture" value="ru" />
<input type="hidden" name="SignatureValue" value=GetRowsInTable.php />
<input type="submit" value="Оплатить" />
</form>

Автор: Arantir 1.12.2012, 09:28
Меня смущают 2 вещи:
Код
SELECT COUNT(1) FROM orders
Код
<input type="hidden" name="SignatureValue" value=GetRowsInTable.php />



Цитата(qpile @  1.12.2012,  08:03 Найти цитируемый пост)
Но как теперь это значение передать на форму мою? 

Ну а страницы на сайте вы как генерируете? 
Берете все это в один файл или же в файл с формой делаете require('самопоисный_скипт.php') и потом просто
Код
<input type="hidden" name="OutSum" value="<?php echo $sum; ?>" />

Автор: qpile 2.12.2012, 09:43
Вот так нужно сделать? Что то не выходит 
Код

<form method="post" action="http://test.robokassa.ru/Index.aspx" require 'GetRowsInTable.php'>
<input type="hidden" name="MrchLogin" value="kbrobot.ru" />
<input type="hidden" name="OutSum" value="1" />
<input type="hidden" name="InvId" value="0" />
<input type="hidden" name="Desc" value="desc" />
<input type="hidden" name="Culture" value="ru" />
<input type="hidden" name="SignatureValue" value="<?php echo $signature; ?>" />
<input type="submit" value="Оплатить" />
</form>



Добавлено через 2 минуты и 29 секунд
Ворд пресс использую

Автор: Arantir 2.12.2012, 10:50
Код

<form method="post" action="http://test.robokassa.ru/Index.aspx" require 'GetRowsInTable.php'>
Ну нельзя же так, в конце-то концов...

Все переменные, которые вы выводите через echo, должны быть объявлены в этом же скрипте. То есть либо в этом же файле, либо в файлах, подключенных через include/require.
Вордпресс вордпрессом. Это не мешает вам добавить чуть выше вашей формы кусочек php-кода.
Может вам стоит почитать что-то вроде "основы PHP"? Если у вас есть опыт программирования, разобраться будет легко.

Что у вас делает скрипт GetRowsInTable.php?

Вообще, у вас в первом посте этой темы оба куска кода вполне правильные. Вам просто надо было их поместить в один файл. Да и во втором вашем посте, где вы уникальность ID обеспечили, тоже все ОК, кроме лишнего echo.

Скрипт - это вам не картинка. Вы не можете сделать echo в конце скрипта и ожидать, что при подключении его в любое место, там вместо него появится то, что он выводит. include/require включают код скрипта в текущий файл точно так же, как если бы вы вместо строчки с require скопировали туда ведь код подключаемого скрипта вручную.

Автор: qpile 2.12.2012, 11:58
Все оказалось банально просто. Не позволяет wordpress напрямую устанавливать скрипты в посты.Поставил плагин Exec php и все заработало. Читаю мануал по робокассе дальше smile
Кому интересно: вот код.Но почему то он не дает ставить сгенерированый signature. Только четко определенный. Наверное, это ньюанс тестового сервера робокассы
Код

<?php

$user="";
$pas="";
$host="localhost";
$link=@mysql_connect($host, $user, $pas) or die ("<b>Ошибка при подключении к серверу MySQL!<b>");
mysql_select_db("", $link);
$a = mysql_query("SELECT COUNT(1) FROM orders");
$b  = mysql_fetch_array($a);
$c=$b[0]+1;
mysql_query("INSERT INTO orders (orderNumber)VALUES ('$c')");
mysql_close($link);

 //Ваш логин в системе
    $login = "";
    //Сумма платежа, с помощью точки можно указывать вещественное число, например 35.90
    $sum = 200;
    //Уникальный номер транзакции в вашем магазине, он может быть любым но состоять только //из цифр
    $id = $c;
    //Описание товара
    $tovar = "За программное обеспечение";      
    //Ваш пароль #1 который вы указывали в настройках
    $pass1 = "";
    //Теперь все это шифруем и передаем Робокассе, это своеобразный уникальный номер вашего магазина
    $signature = md5($login . ":" . $sum . ":" . $id . ":" . $pass1);
    $signature ="0e98c8fff0ee23e5ba1d6b723a18d673";
?>
<form method="post" action="http://test.robokassa.ru/Index.aspx" >
<input type="hidden" name="MrchLogin" value="" />
<input type="hidden" name="OutSum" value="1" />
<input type="hidden" name="InvId" value="0" />
<input type="hidden" name="Desc" value="desc" />
<input type="hidden" name="Culture" value="ru" />
<input type="hidden" name="SignatureValue" value="<?=$signature;?>" />
<input type="submit" value="Оплатить" />
</form>

Автор: qpile 2.12.2012, 12:22
вроде все получилось у меня  с горем пополам. 
Если кто будет заниматься тем же, то вот в помощь
http://www.sdelaysite.com/seo-verstka-wordpress/wordpress-plugin-6
http://mzcoding.ru/?p=881
Вторая ссылка короче и проще, а первая основательнее разбирает все ньюансы

Автор: qpile 9.12.2012, 10:10
Разобрался но не полностью  smile 
Как сделать так, что бы при нажатии сначала считывалась OutSumm из Input, потом это значение передавалось в php скрипт, который генерирует Signature, а потом уже это значение шлется на сервер робокассы.
Код прикрепил
Код

?php

$user="";
$pas="";
$host="localhost";
$link=@mysql_connect($host, $user, $pas) or die ("<b>Ошибка при подключении к серверу MySQL!<b>");
mysql_select_db(", $link);
$a = mysql_query("SELECT COUNT(1) FROM orders");
$b  = mysql_fetch_array($a);
$c=$b[0]+1;
mysql_query("INSERT INTO orders (orderNumber)VALUES ('$c')");
mysql_close($link);

 //Ваш логин в системе
    $login = "";
    //Сумма платежа, с помощью точки можно указывать вещественное число, например 35.90
    $sum =1;
    //Уникальный номер транзакции в вашем магазине, он может быть любым но состоять только //из цифр
    $id =0;
    //Описание товара
    $tovar = "За программное обеспечение";      
    //Ваш пароль #1 который вы указывали в настройках
    $pass1 = "";
    //Теперь все это шифруем и передаем Робокассе, это своеобразный уникальный номер вашего магазина
    $signature = md5("$login:$sum:$id:$pass1");
    
?>

<center>
<form id=payment method="post" action="https://merchant.roboxchange.com/Index.aspx">
    <fieldset>
        <legend>Введите сумму</legend>
        <ol>
            <li>
                <input id=summ  name="OutSum" type="text" required>
            </li>
        </ol>
    </fieldset>
<input type="hidden" name="MrchLogin" value="" />
<input type="hidden" name="InvId" value="<?=$id;?>" />
<input type="hidden" name="Desc" value="За программное обеспечение" />
<input type="hidden" name="Culture" value="ru" />
<input type="hidden" name="SignatureValue" value="<?=$signature;?>" />
    <fieldset>
        <button type=submit>Купить сейчас!</button>
    </fieldset>
</form>
</center>


Добавлено через 3 минуты и 20 секунд
Просто в моей форме узверь сам вводит сумму для оплаты

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)