Здравствуйте, гость ( Вход | Регистрация )

Навигация

Ссылки форума

Навигация по форуму

 
Reply to this topicStart new topic
2pay.ru, Помогите написать скрипт.
shOotzy
сообщение 23.6.2009, 14:04
Сообщение #1



Свой человек
Группа: Advanced Members
Сообщений: 176
Регистрация: 19.4.2008
Поблагодарили: 132 *


Для подключения необходимо:

1. Написать скрипт по нашему протоколу.( Пример скрипта на PHP (primer (UTF-8).php), реализующего наш стандартный протокол + его описание (2pay_API_ru.doc).)
Раскрывающийся текст
Код
<?

//    
//   Payment script 2pay
//   Popkov I. Sergey
//   ICQ: 14296442                      
//                                  

    header( 'Content-type: text/xml' );
    
    $check_ip="82.146.40.60";

// Секретный ключ
    $secret_key = "";
    $date=date("d.m.y");

// Дата которая пришла в запросе
//  $date = $_REQUEST['date'];
    $flag = $_REQUEST['command'];
    $md5 = $_REQUEST['md5'];
    
  
// Ник
    $v1 = $_REQUEST['v1'];    
    
// Имя сервера    
    $v2 = $_REQUEST['v2'];

    if (isset($_REQUEST['id'])) {$id=$_REQUEST['id'];} else {$id=0;}
    $kod=1;
    
// Проверяем подлинность IP адреса    
    if ((isset($v2))&&($v2 != "")&&($_SERVER['REMOTE_ADDR'] == $check_ip)) {
    
// Реализация выбора сервера (для конкретной игры). У Вас может быть другая логика работы
        for ($k=0; $k<count($game_server); $k++) {
            if ($game_server[$k]['name']==$v2) {
                $i=$k;
            }
        }
        
        $serv=$i;
// Соединение с БД        
        $conn=mysql_connect($game_server[$serv]['host'], $game_server[$serv]['user'], $game_server[$serv]['pass']) or db_error("Can't connect to database");
        mysql_select_db($game_server[$serv]['db']) or db_error("Can't select database ".$game_server[$serv]['db']);

// Если запрос на проверку возможности проведения платежа и если md5 хэш совпадает...        
        if (($flag == 'check')&&($md5 == md5($flag.$v1.$secret_key))) {
// Поиск персонажа в базе игры        
            $sql=mysql_query("SELECT * FROM `characters` WHERE `char_name`='".$v1."' LIMIT 0, 1");
            $rows = mysql_num_rows($sql);
            if ($rows > 0) {
                $kod=0;
                $desc='Character exists';
            } else {
                $kod=1;
                $desc='Character not found';
            }
        } else {
// Если запрос на оплату
            if (($flag == 'pay')&&($md5 == md5($flag.$v1.$id.$secret_key))) {
                $sql=mysql_query("SELECT * FROM `2pay_payment` WHERE `id`='".$_REQUEST['id']."' LIMIT 0, 1");
                $rows = mysql_num_rows($sql);
// Если платеж уже был проведен
                if ($rows > 0) {
                    $kod=0;
                    $desc='Payment was send earlier';
                } else {
// Иначе пытаемся провести платеж
                    $item_count=$_REQUEST['sum']; // Количество монет для зачисления, полученное в запросе                
                    $item=4037; // Идентификатор предмета CoL
                    $sql=mysql_query("SELECT * FROM `characters` WHERE `char_name`='".$v1."' LIMIT 0, 1");
                    $character=mysql_fetch_array($sql);
                    $account_ref=$character['account_name'];
// Если персонаж найден                
                    if(mysql_num_rows($sql)==1) {
// Добавляем персонажу количество купленных монет
                        $sql=mysql_query("INSERT INTO `items_delayed` (`owner_id`,`item_id`,`count`,`enchant_level`,`flags`,`payment_status`, `description`) VALUES ('".$character['obj_Id']."','".$item."','".$item_count."','0','0','0', '2pay date ".$date." ".$v1."')") or die(mysql_error());
                        $sql=mysql_query("INSERT INTO `2pay_payment` (`count`,`date`,`id`) VALUES ('".$_REQUEST['sum']."','".$date."','".$_REQUEST['id']."')");
                        $kod=0;
                        $desc="ok";
                     } else {
                        $kod=2;
                        $desc="Character not found";
                    }
                }
            } else {
// Обработка исключения: если не совпал md5 или неизвестный запрос
                $kod=2;
                $desc="Unknown request or account not found";
            }
        }
    } else {
        $desc="Parametrs or IP is not correct";
    }
// Формируем ответ    
    $html="<?xml version=\"1.0\" encoding=\"windows-1251\"?><response><id>".$id."</id><result>".$kod."</result><comment>".$desc."</comment></response>";

echo $html;

?>




Описание:
Раскрывающийся текст
Технический протокол
подключения к 2pay

Требования к Интерфейсу Продавца
1. Интерфейс должен принимать запросы по протоколу HTTP со следующих IP адресов:
82.146.40.60
2. Интерфейс должен обрабатывать параметры, передаваемые системой методом GET
3. Интерфейс должен формировать ответ системе в формате XML в кодировке WIN-1251 (если ответ содержит символы национальных алфавитов)
4. Обмен информацией ведется в режиме запрос-ответ, при этом скорость ответа не должна превышать 60 секунд, в противном случае система разрывает соединение по таймауту.
Основные принципы работы Интерфейса
1. Каждый платеж в системе имеет уникальный идентификатор, который передается провайдеру в переменной id – целое число. По этому идентификатору производится дальнейшая сверка взаиморасчетов и решение спорных вопросов.
2. sum – дробное число с точностью до сотых, в качестве разделителя используется "." (точка). Количество условных едениц, начисляемых абоненту.
3. В запросе на добавление платежа, система передает дату платежа в переменной date – дата в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС. Эту дату необходимо использовать для проведения сверок и бухгалтерских взаиморасчетов.
4. Провайдер идентифицирует своего абонента по уникальному идентификатору (номер лицевого счета, логин и т.д.). Идентификатор абонента передается в переменной v1 – строка, содержащая буквы, цифры и спецсимволы, длиной до 200 символов. v2, v3 – используются при необходимости для передачи дополнительных параметров, такие как номер ячейки в банке или сервер игры.
5. Оплата услуг провайдера производится системой в 2 этапа: проверка состояния абонента и непосредственно проведение платежа.
Тип запроса передается системой в переменной command – строка, принимающая значения "check" и "pay". При проверке статуса, провайдер должен проверить наличие в своей базе абонента с указанным идентификатором, и выполнить внутренние проверки идентификатора и суммы платежа в соответствии с принятой логикой пополнения лицевых счетов через платежные системы. При проведении платежа провайдер должен произвести пополнение баланса абонента.
6. В случае, если любой из запросов провайдеру завершается ошибкой, то провайдер возвращает код ошибки в соответствии с таблицей приведенной ниже. Все ошибки имеют признак фатальности. Фатальная ошибка означает для системы, что повторная отправка запроса с теми же параметрами, приведет к 100% повторению той же ошибки – следовательно, система прекращает обработку клиентского запроса и завершает его с ошибкой. Не фатальная ошибка – означает для системы, что повторение запроса с теми же параметрами через некоторый промежуток времени, возможно, приведет к успеху. Система будет повторять запросы, завершающиеся не фатальной ошибкой, постоянно увеличивая интервал, пока операция не завершится успехом или фатальной ошибкой или пока не истечет срок жизни клиентского запроса – 24 часа. Отсутствие связи с сервером провайдера является не фатальной ошибкой. Отсутствие в ответе элемента (некорректный XML, страница Service temporarily unavailable и т.д.) - является фатальной ошибкой.
7. В базе провайдера не должно содержаться двух успешно проведенных платежей с одним и тем же номером id. Если система присылает повторно запрос с уже существующим в базе провайдера id, то провайдер должен вернуть результат обработки предыдущего запроса.
8. Провайдер возвращает ответ на запросы системе в формате XML со следующей структурой:
9. <?xml version="1.0" encoding="windows-1251"?>

10. <response>

11. <id></id>

12. <id_shop></id_shop>

13. <result></result>

14. <comment></comment>

15. </response>

Где:
o <response> – тело ответа
o <id> – номер транзакции в системе 2pay, который передается провайдеру в переменной id. (при проверке реквизитов не передается)
o <id_shop> – номер транзакции в системе провадера. (при проверке реквизитов не передается)
o <result> – код результата завершения запроса.
o <comment> – необязательный элемент – комментарий завершения операции.
Пример запроса на проверку состояния абонента
Платежное приложение провайдера payment_app.cgi, располагается по адресу service.someprv.ru, сервер поддерживает HTTP соединения.
Для проверки состояния абонента, система генерирует запрос следующего вида:
http://service.someprovider.ru/payment_app...835959&md5=
Запрос содержит переменные:

command=check – запрос на проверку
v1 – идентификатор абонента
md5=md5[check+v1+secret_key] – md5 подпись запроса (без символов +)
Ответ провайдера должен выглядеть так:
<?xml version="1.0" encoding="windows-1251"?>

<response>

<result>0</result>

</response>

Или так:
<?xml version="1.0" encoding="windows-1251"?>

<response>

<result>5</result>

<comment>The subscriber has gone to Bobruisk...</comment>

</response>

Где:
· result=0 означает, что указанный в запросе, лицевой счет абонента, может быть пополнен. После успешной проверки состояния, система переходит к отправке запроса на пополнение баланса.
· result=7 означает, что прием платежа для данного абонента запрещен по техническим причинам. Данная ошибка является фатальной. Клиентский запрос получает отказ с соответствующим кодом ошибки.
Пример запроса на пополнение лицевого счета
http://service.someprovider.ru/payment_app...date=ГГГГ-ММ-ДД ЧЧ:ММ:СС&v1=0957835959∑=10.45
Запрос содержит переменные:

command=pay – запрос на пополнение баланса абонента
id=123456 - внутренний номер платежа
date= ГГГГ-ММ-ДД ЧЧ:ММ:СС -дата системы учета платежа
v1 – идентификатор абонента
v2, v3 – доп поля для идентификатора абонента
sum=10.45 сумма к зачислению на лицевой счет абонента в у.е.
md5=[pay+v1+id+secret_key] - md5 подпись запроса (без символов +)
Пример ответа:
<?xml version="1.0" encoding="windows-1251"?>

<response>

<id>123456</id>

<id_shop>1234</id_shop>

<sum>123.45</sum>

<result>0</result>

</response>

</pre>

Или так:
<?xml version="1.0" encoding="windows-1251"?>

<response>

<id>123456</id>

<id_shop>1234</id_shop>

<sum>123.45</sum>

<result>1</result>

<comment> Temporarily database error</comment>

</response>

Где:
· result=0 – продавец сообщает об успешном завершении операции пополнения. Система полностью завершает обработку транзакции, сообщая абоненту об успехе.
· result=1 – временная ошибка обработки запроса с дополнительным комментарием в поле "comment". Система будет повторять посылку запроса, пока он не завершится успехом, отказом или пока не истечет время жизни платежа.
Список кодов завершения
При обработке запросов от системы, провайдер должен сопоставить все возникающие в его приложении ошибки с приведенным ниже списком и возвращать соответствующие коды в элементе . Знак "+" в столбце фатальность – показывает то, как система будет интерпретировать данную ошибку.

Код Комментарий Фатальность
0 Ок -
1 Временная ошибка повторите запрос позже -
2 Неверный идентификатор абонента +
3 Неверная подпись md5 +
4 Не верный формат запроса(неверная сумма, не полный набор параметров) +
5 Другая ошибка Продавца(желательно описать ее в comment) +



В php я не силён =\
Go to the top of the page
 
+Quote Post
Гость_kolgan_*
сообщение 28.6.2009, 3:28
Сообщение #2




Guests


Поблагодарили: *


UP!!!
Go to the top of the page
 
+Quote Post
MonsterKILL
сообщение 9.8.2009, 0:43
Сообщение #3



32
Группа: La2base Clients
Сообщений: 161
Регистрация: 23.9.2008
Поблагодарили: 5 *


Со скриптом могу помочь, обратитесь в ICQ 1-390-072
Go to the top of the page
 
+Quote Post
aSSeR44
сообщение 16.9.2009, 15:17
Сообщение #4



Познающий
Группа: Members
Сообщений: 88
Регистрация: 21.9.2008
Поблагодарили: 8 *


Помогите разобраться в скрипте!
Нужно для сборки la2base!
Вышлите готовый скрипт у кого есть плз!!!
d94fefdbba8d.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 13.6.2026, 11:29