Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: curl и робокасса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Zuldek
Отправлено: 30 Марта, 2011 - 07:29:32
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




В примерах скриптов инициации оплаты заказа робокассеры предлагают такой вариант -

CODE (htmlphp):
скопировать код в буфер обмена
  1. // сумма заказа
  2. ........
  3. // язык
  4. // language
  5. $culture = "en";
  6.  
  7. // формирование подписи
  8. // generate signature
  9. $crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item");
  10.  
  11. // форма оплаты товара
  12. // payment form
  13. print "<html>".
  14.       "<form action='https://merchant.roboxchange.com/Index.aspx' method=POST>".
  15.       "<input type=hidden name=MrchLogin value=$mrh_login>".
  16.       "<input type=hidden name=OutSum value=$out_summ>".
  17.       "<input type=hidden name=InvId value=$inv_id>".
  18.       "<input type=hidden name=Desc value='$inv_desc'>".
  19.  ...
  20.       "</form></html>";
  21.  


После инициации оплаты юзеру октрывается страница робокассы где он подтверждает платёж. В случае успеха робот делает запрос установленного типа на сайт магазина по reselt url. Однако, отсылать запрос таким способом не хочется. Не хочу чтобы посетитель видел значения параметров запроса в коде страницы (а он как минимум уже узнает логин в системе робокасса, id заказа, и получит пусть и в md5 контрольную строку, содержащую пароль доступа к системе.)

В общем хотел отправлять запрос через curl. - Простеший скрипт отправляет этот запрос
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. //валюта
  3. $in_curr = "PCR";
  4. //кодировка
  5. $encoding = "windows-1251";
  6. //сигнатура
  7. $sv=md5("darim:120:123456:Somepassword");
  8. //куда шлём
  9. $url = "http://test.robokassa.ru/Index.aspx";
  10. //записываем всё в переменную
  11. $postdata ="sMerchantLogin=darim&nOutSum=120&nInvId=123456&sInvDesc=Скидочный купон&sSignatureValue=$sv&sIncCurrLabel=$in_curr&sCulture=ru&Encoding=$encoding";
  12. if (($curl = curl_init($url))) {
  13.    curl_setopt_array($curl, array (
  14.        CURLOPT_RETURNTRANSFER => True,
  15.        CURLOPT_HEADER         => False,
  16.        CURLOPT_FOLLOWLOCATION => True,
  17.        CURLOPT_TIMEOUT        => 320,
  18.        CURLOPT_FAILONERROR    => True,
  19.        CURLOPT_AUTOREFERER    => True,
  20.        CURLOPT_POST           => True,
  21.        CURLOPT_POSTFIELDS     => $postdata)
  22.    );
  23.    $out=curl_exec($curl);
  24.    if (!$out) {
  25.        echo curl_error($curl);
  26.    } else {
  27.        echo 'Requset is done';
  28.    }
  29.    curl_close($curl);
  30. }
  31. ?>


Однако ответ от сервера робокассы на reselt url не приходит, скорее всего это изза того что после отправки запроса посетитель не переходит на саму страницу подтверждения платежа... .
Вроде бы стоит параметр - CURLOPT_FOLLOWLOCATION => True. Подскажите, нужно-ли использовать какой-то другой параметр для curl чтобы осуществлять такой переход на url, как в случае отправки запроса POST через простую Htm-форму?

(Отредактировано автором: 30 Марта, 2011 - 07:35:55)

 
 Top
ALEN
Отправлено: 30 Марта, 2011 - 11:22:11
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




FOLLOWLOCATION - позволяет скрипту в случае редиректа переходить глубже. А для редиректа пользователя нужно отправлять header("Location:...")
 
 Top
Zuldek
Отправлено: 30 Марта, 2011 - 11:27:40
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




ALEN пишет:
FOLLOWLOCATION - позволяет скрипту в случае редиректа переходить глубже. А для редиректа пользователя нужно отправлять header("Location:...")


То есть так?

CODE (htmlphp):
скопировать код в буфер обмена
  1.       <?php
  2. ...........
  3.             CURLOPT_AUTOREFERER    => True,
  4.             CURLOPT_POST           => True,
  5.             CURLOPT_POSTFIELDS     => $postdata)
  6.         );
  7.         $out=curl_exec($curl);
  8.         if (!$out) {
  9.             echo curl_error($curl);
  10.  


} else {
echo 'Запрос отправлен';
header("Location:http://test.robokassa.ru/Index.aspx")

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.          }
  3.          curl_close($curl);
  4.       }
  5.       ?>


В этом случае для сервера и для клиента такой способ будет полностью равнозначен отправке параметров через форму с Form action=http://test.robokassa.ru/Index.aspx ?

upd. Никто не делал интеграцию с робокассой через curl из форумчан?

(Отредактировано автором: 30 Марта, 2011 - 12:00:25)

 
 Top
ALEN
Отправлено: 30 Марта, 2011 - 12:01:24
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Попробую объяснить еще...
Смотри, ты делаешь запрос с помощью CURL на адрес http://test[dot]robokassa[dot]ru/Index[dot]aspx с определенными параметрами в ответ ты получишь ответ сервера http://test[dot]robokassa[dot]ru/Index[dot]aspx . Если на той странице стоит переадресация на другую страницу и ты хочешь, чтоб CURL перешел по ней и взял конечный результат, то необходимо указывать FOLLOWLOCATION . Далее если ты хочешь, чтоб после выполнения CURl пользователь открывший эту страницу перешел по другой ссылке автоматически, ты отправляешь заголовок header с переадресацией.
Думаю понятно!?
 
 Top
Zuldek
Отправлено: 30 Марта, 2011 - 12:18:18
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Да, это ясно.
На самом деле стоит задача перенаправить пользователя вот сюда http://test[dot]robokassa[dot]ru/Index[dot]aspx с параметрами в POST переданными через curl. Переадресации (сейчас проверил) на странице http://test[dot]robokassa[dot]ru/Index[dot]aspx никакой нет.
Эта страница подтверждения оплаты, она просто ждёт посетителя для подтверждения платежа и отобразит ошибку если параметры эти ей не передадут. Если параметры переданы, то юзер (уже на странице test.robokassa.ru/Index.aspx) клацает на подтвердить (или выбирает другую валюту и т.п.)
Соответственно я не хочу чтобы после передачи параметров и перенаправления юзера на ту страницу она ему нормально отобразилась. Функция curl тут только в том чтобы передать параметры в POSTE, а не передавать их в виде hidden полей формы. Задача такая же как тут http://php.su/forum/topic.php?fo...1&topic=2882

(Отредактировано автором: 30 Марта, 2011 - 12:47:31)

 
 Top
jmale
Отправлено: 01 Марта, 2012 - 22:52:02
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Зачем изобретать велосипед?
PHP:
скопировать код в буфер обмена
  1.  
  2. $robo = array("mrchlogin"=>.....);
  3.  
  4. foreach($robo as $k=>$v){
  5.        $post.=$k."=".$v."&";
  6. }
  7.                   $post = mb_substr($post,0,mb_strlen($post)-1);
  8.                   header("Location:".ROBO_URL."?".$post);
  9.                   die();
  10.  
  11.  
 
 Top
Давит
Отправлено: 01 Марта, 2012 - 23:51:15
Post Id



Частый гость


Покинул форум
Сообщений всего: 147
Дата рег-ции: Май 2011  


Помог: 2 раз(а)




[code=htmlphp][/code]

(Отредактировано автором: 01 Марта, 2012 - 23:52:02)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB