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
Форумы портала PHP.SU :: Версия для печати :: интеграция с платежной системой
Форумы портала PHP.SU » » Работа с сетью » интеграция с платежной системой

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

1. spqtium - 16 Марта, 2013 - 21:53:53 - перейти к сообщению
Надо написать три обработчика для принятие запроса от сервера платежной системы через http(https) xml методом POST. ответ так же в виде xml. вроде все легко и просто, только одно но, я не очень хорошо знаю php и толком не знаю как реализовать прием\передачу xml данных.. помогите, пазязяУлыбка
2. YanisLaw - 16 Марта, 2013 - 22:56:16 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function xml2array(&$string) {
  2.     $parser = xml_parser_create();
  3.     xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
  4.     xml_parse_into_struct($parser, $string, $vals, $index);
  5.     xml_parser_free($parser);
  6.     $mnary=array();
  7.     $ary=&$mnary;
  8.     foreach ($vals as $r) {
  9.         $t=$r['tag'];
  10.         if ($r['type']=='open') {
  11.             if (isset($ary[$t])) {
  12.                 if (isset($ary[$t][0])) $ary[$t][]=array(); else $ary[$t]=array($ary[$t], array());
  13.                 $cv=&$ary[$t][count($ary[$t])-1];
  14.             } else $cv=&$ary[$t];
  15.             if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
  16.             $cv['_c']=array();
  17.             $cv['_c']['_p']=&$ary;
  18.             $ary=&$cv['_c'];
  19.         } elseif ($r['type']=='complete') {
  20.             if (isset($ary[$t])) { // same as open
  21.                 if (isset($ary[$t][0])) $ary[$t][]=array(); else $ary[$t]=array($ary[$t], array());
  22.                 $cv=&$ary[$t][count($ary[$t])-1];
  23.             } else $cv=&$ary[$t];
  24.             if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
  25.            
  26.             if (isset($r['value'])) $cv['_v'] = $r['value'];
  27.         } elseif ($r['type']=='close') {
  28.             $ary=&$ary['_p'];
  29.         }
  30.     }    
  31.    
  32.     _del_p($mnary);
  33.     return $mnary;
  34. }


этот код для перевода данных из xml в массивы (array() )
3. spqtium - 16 Марта, 2013 - 23:59:05 - перейти к сообщению
спасибо, конечно, большое) но меня интересуют непосредственно сама организация обмена данных. как она выглядит и как реализуется? мне надо сначала принять, а потом ответить! по парсингу много информации, а вот по обмену я толком так и не понял)
4. caballero - 17 Марта, 2013 - 00:39:50 - перейти к сообщению
Цитата:
этот код для перевода данных из xml в массивы (array() )

и нафига здесь нужен этот код, да еще и с древней версии PHP?

Цитата:
по парсингу много информации, а вот по обмену я толком так и не понял)

парсинг тут нафиг не нужен, simplexml в таких случаях более чем достаточно. А протокол обмена у каждой платежной системмы свой, что ты хочешь тут узнать.
5. spqtium - 17 Марта, 2013 - 00:54:55 - перейти к сообщению
caballero пишет:
парсинг тут нафиг не нужен, simplexml в таких случаях более чем достаточно. А протокол обмена у каждой платежной системмы свой, что ты хочешь тут узнать.


у них api не реализован. просто им надо указать три ссылки на три разных обработчки трех разных случаев. они присылают xml запрос, я им xml ответ. хочу узнать как принять этот запрос
6. caballero - 17 Марта, 2013 - 01:08:46 - перейти к сообщению
Цитата:
просто им надо указать три ссылки на три разных обработчки трех разных случаев

это и есть в данном случае api

Цитата:
они присылают xml запрос, я им xml ответ. хочу узнать как принять этот запрос

зависит от того как они присылают. прислать и по емейлу можно.
7. spqtium - 17 Марта, 2013 - 01:17:02 - перейти к сообщению
caballero пишет:
это и есть в данном случае api

разве? я им и они мне никаких интерфейсов не предоставляю.. или я что-то не допонимаю

сслыка что-то типо такой: http:/nameserver.by/ipay/tr_start.php и на эту они будут присылать мне xml содержанием типо такая-то дата. такой-то клиент, такой-то заказ. я им стоимость заказа и ещё что-то. но не суть.
я не понимаю как мне в tr_start.php реализовать прием\передачу
8. caballero - 17 Марта, 2013 - 01:24:49 - перейти к сообщению
Цитата:
разве? я им и они мне никаких интерфейсов не предоставляю.. или я что-то не допонимаю

если бы ты что то понимал - не задавал бы тут таких воаросов

Цитата:
я не понимаю как мне в tr_start.php реализовать прием\передачу

прием через $_GET отправка через echo.
9. spqtium - 17 Марта, 2013 - 01:36:12 - перейти к сообщению
caballero пишет:
прием через $_GET отправка через echo.

так методом POST должна осуществляться отправка
10. caballero - 17 Марта, 2013 - 10:04:08 - перейти к сообщению
Цитата:
так методом POST должна осуществляться отправка

ты ж написал что они тебя дергают а не ты их. Хочешь ответа -перестань партизанить и дай точную спецификацию кто кого в какой последовательности вызывает и какие данные в каком формате передаются.
11. spqtium - 17 Марта, 2013 - 11:36:03 - перейти к сообщению
caballero пишет:
ты ж написал что они тебя дергают а не ты их. Хочешь ответа -перестань партизанить и дай точную спецификацию кто кого в какой последовательности вызывает и какие данные в каком формате передаются.


аахха) ну я в начале вктрац писал , вроде. но вот с их документации

Для обмена данными в режиме on-line между процессинговым центром iPay и постав-
щиком услуг используются сообщения в формате XML.
Сообщения передаются по протоколу HTTP (или HTTPS) методом POST на сервер об-
работки запросов поставщика услуг. Содержимое сообщения передаётся в параметре с име-
нем XML.

и ещё

Если клиент подтверждает свое желание оплатить заказ, то система iPay выполняет за-
прос ServiceInfo к поставщику услуг, который в ответ возвращает стоимость заказа и, при
необходимости, дополнительную информацию о заказе. Полученные данные показываются
клиенту.
12. dmitriy_dd - 13 Марта, 2015 - 19:29:27 - перейти к сообщению
и что на этом все закончилось ? кусок парсера для xml ? кто-то сделал что то интересное ? Хм
13. zloy dyx - 20 Марта, 2015 - 00:28:31 - перейти к сообщению
Сложный агрегатор вы не потяните, накидаю вам пример для worldkassa.ru
С вас +)
И так config.php
PHP:
скопировать код в буфер обмена
  1. <?
  2. $id_shop='1052';//ID площадки на WorldKassa
  3. $hash='dfhdhrturuy768fhjfgjioipuop89ioo89io98';//Секретный ключ (HASH)
  4. ?>


Потом index.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. /* Постоём передаём сколько купить*/
  4. include_once 'config.php';
  5. $type='0';
  6. if (isset($_POST['gold']) && is_numeric($_POST['gold']))
  7.         {
  8.                 $summa=$_POST['gold'];
  9.     }
  10.         if (isset($summa))
  11.         {
  12.         include_once '../inc/db.php'; //Коннект к БД
  13.     include_once '../inc/sesion.php';  //тут проверка авторизации
  14.         $data=file_get_contents('http://worldkassa.ru/user/oplata.php?id_shop='.$id_shop.'&summa='.$summa.'&hash='.$hash);
  15.         if (is_numeric($data))
  16.                 {
  17.                 $id= $_SESSION['user']['id'];
  18.                 $time = time();
  19.                 $query = "insert into worldkassa (`id_user`, `id_bill`, `time`, `summa`) values ('$id','$data','$time','$summa')";
  20.             $result_pist = mysqli_query($dbc, $query) or die ('ошибка записи юзера в бд');
  21. ?>             
  22. <head>
  23. <meta http-equiv="refresh" content="0;URL=http://worldkassa.ru/user/oplata.php?uniq=<?=$data ?>" />
  24. </head>
  25. <?PHP
  26.                 exit();
  27.                 }
  28.                 else
  29.                 {
  30.                 echo $data;
  31.                 }
  32.         }
  33. ?>
  34.  

Обработчик. (в настройке агрегатора укажете его)
PHP:
скопировать код в буфер обмена
  1. <?
  2. include_once 'config.php';
  3. include_once '../inc/db.php';
  4.  
  5.  
  6. if (isset($_POST['id_shop']) && is_numeric($_POST['id_shop']) && isset($_POST['id_bill']) && is_numeric($_POST['id_bill']) && isset($_POST['summa']) && is_numeric($_POST['summa']) && isset($_POST['hash']))
  7.         {
  8.         $sql=mysql_query("SELECT * FROM `worldkassa` WHERE `id_bill` = '".$_POST['id_bill']."'");
  9.         if (mysql_num_rows($sql)>0)
  10.                 {
  11.                 $data=mysql_fetch_assoc($sql);
  12.                 if ($_POST['summa']<$data['summa'])
  13.                         {
  14.                         //Можно поставить уведомление на подмену суммы пополнения
  15.                         }
  16.                         elseif($_POST['hash']!=md5($hash.$id_shop.$_POST['id_bill'].$_POST['summa']))
  17.                         {
  18.                         //Можно поставить уведомление, что не совпал хеш
  19.                         }
  20.                         else
  21.                         {
  22.             $gg = $_POST['summa'];
  23.             //зачисляем голд
  24. mysql_query("UPDATE `gold` SET `col` = `col`+".$gg." WHERE `id` = '".$data['id_user']."'");
  25.                         //статстика
  26. mysql_query("UPDATE `worldkassa` SET `time_oplata` = '".time()."' WHERE `id` = '".$data['id']."'");                    
  27.                         }
  28.                 }
  29.         }
  30. ?>

Ну и страницы ошибок свои. (настроите у агрегатора) работает только для worldkassa
А дам для бд статистики
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE IF NOT EXISTS `worldkassa` (
  3.   `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID платежа (Внутренний ID)',
  4.   `id_user` int(11) UNSIGNED NOT NULL COMMENT 'ID пользователя',
  5.   `id_bill` int(11) UNSIGNED NOT NULL COMMENT 'ID платежа в Worldkassa',
  6.   `time` int(11) UNSIGNED NOT NULL COMMENT 'Время инициализации платежа',
  7.   `time_oplata` int(11) UNSIGNED DEFAULT '0' COMMENT 'Время оплаты',
  8.   `summa` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT 'Сумма',
  9.   `type` enum('0', '1', '2') DEFAULT '0' ,
  10.   PRIMARY KEY (`id`)
  11. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Статистика платежей через WorldKassa' AUTO_INCREMENT=1 ;
  12.  
14. dmitriy_dd - 29 Марта, 2015 - 19:42:58 - перейти к сообщению
Уже что-то )))) и так все просто у вордкасы))) смотрел на айпэе апи, то там на первый взгляд запутанно, повторно не разглядывал, пока меня не трогают вот я и молчу ))))

 

Powered by ExBB FM 1.0 RC1