мета-данные страницы
  •  

Это старая версия документа!


Передача информации по оплате заказа в АГБИС.docx

Передача информации по оплате заказа в АГБИС.

Данный раздел подойдет для тех, кто самостоятельно интегрирует оплаты в свои мобильные приложения (МП) и личный кабинет (ЛК).

Весь механизм оплат и все оплаты реализуется и хранится на стороне клиента.

Наша сервисная служба (агент) примерно раз в 30 секунд посылает GET запрос на определенный скрипт (по адресу предоставленный клиентом), который отвечает за выгрузку оплат, и передает в него параметры. В ответ скрипт будет сообщать нам данные (xml) об оплаченных заказах, после чего агент пометит заказы как оплаченные.

Путь до скрипта должен быть для всех запросов один, например, https://www.example.ru/api/pay.php.

После разработки скрипта, передать этот путь до скрипта, а также значения для параметров Ld и Pd, в АГБИС для дальнейшей настройки агента и тестирования работы выгрузки оплат.

  1. Запрос выгрузки оплат:

Пример запроса агента на адрес: https://www.example.ru/api/pay.php?Load&guid=guid&Lg=login&Pd=pwd

где guid - GUID текущей выгрузки (формируется агентом),

login и pwd - авторизационные параметры (предоставляются клиентом клиентом).

Скрипт должен проверять login и pwd на правильность, если совпадают, то продолжает дальше работать.

Параметр Load сообщает скрипту, что нужно найти все не выгруженные записи оплат, и пометить найденные оплаты в БД mysql переданным guid, формируя XML и возвращает в ответе на запрос.

Пример XML ответа на запрос параметром Load:

  1. <?xml version=«1.0» encoding=«utf-8»?>

  2. <Agbis>

  3. >

    <Pay>

  4. >

    <mysql_id>57</mysql_id>

  5. >

    <dor_id>158671</dor_id>

  6. >

    <contr_id>44708</contr_id>

  7. >

    <amount>31.88</amount>

  8. >

    <token/>

  9. >

    <card_last_four>4242</card_last_four>

  10. >

    <card_type>Visa</card_type>

  11. >

    </Pay>

  12. >

    <Pay>

  13. >

    <mysql_id>59</mysql_id>

  14. >

    <dor_id>159060</dor_id>

  15. >

    <contr_id>44708</contr_id>

  16. >

    <amount>2125</amount>

  17. >

    <token/>

  18. >

    <card_last_four>4242</card_last_four>

  19. >

    <card_type>Visa</card_type>

  20. >

    </Pay>

  21. ……

  22. </Agbis>

где mysql_id – ID строки из БД mysql на стороне клиента,

dor_id – ID заказа,

contr_id – ID клиента химчистки,

amount – сумма оплаты заказа,

card_last_four – последние 4 цифры карты оплаты,

card_type – тип карты/банка оплаты.

После обработки XML ответа, агент сохраняет в АГБИС все оплаты заказов.

  1. Запрос успешного сохранения оплат:

Для определения успешной выгрузки оплат в АГБИС, агент отправляет GET запрос в скрипт.

Пример запроса агента на адрес: https://www.example.ru/api/pay.php?SavePay&guid=guid&Lg=login&Pd=pwd

где guid - GUID текущей выгрузки, сформированный агентом, еще при отправке запроса Load;

login и pwd - авторизационные параметры (предоставляются клиентом клиентом).

Скрипт должен проверять login и pwd на правильность, если совпадают, то продолжает дальше работать.

Если передан параметр SavePay, тогда скрипт находит в БД mysql все оплаты помеченные guid (GUID прошлой выгрузки), и делает отметку, что эти оплаты выгружены в химчистку успешно и возвращает XML об успешном выполнении.

Пример XML ответа на запрос параметром SavePay:

  1. <?xml version=«1.0» encoding=«utf-8»?>

  2. <Agbis>

  3. >

    <Error>0</Error>

  4. </Agbis>

На этом выгрузка заканчивается и оплаты появляются в программе АГБИС химчистка и ЛК.

Пример скрипта php обрабатывающий Load и SavePay запросы от агента:

  1. >

    <?php

  2. ini_set('display_errors', 0);

  3. error_reporting(E_ALL);

  4. header('Content-type: text/html; charset=UTF-8');

  5. include('_class/mysql.php');

  6. include('_class/GenerateXML.php');

  7. if (count($_GET) == 0) //если ни каких параметров в строке нет, то убиваем выполнение скрипта

  8. die('Ошибка');

  9. $DB = new DB;

  10. if (!$DB→link)

  11. die('Ошибка базы данных!');

  12. if (isset($_GET['Lg']) && !empty($_GET['Lg']) && isset($_GET['Pd']) && !empty($_GET['Pd'])){

  13. // проверка логина пароля

  14. $lg = substr($_GET['Lg'], 0, 50);

  15. $pd = substr($_GET['Pd'], 0, 50);

  16. // тут проверка на правильность $lg и $pd

  17. }

  18. else

  19. die('Ошибка'); // не позволяем работать дальше

  20. if (isset($_GET['guid']) && !empty($_GET['guid']))

  21. $guid = $_GET['guid'];

  22. else

  23. die('Ошибка');

  24. $TABLE_PAY = ''; // имя таблицы

  25. if (isset($_GET['Load'])){ // Загружаем оплаты

  26. $sql = «select

  27. id,

  28. dor_id,

  29. contr_id,

  30. amount,

  31. datetime_load_server,

  32. datetime_load,

  33. datetime_unloading,

  34. token,

  35. card_last_four,

  36. card_type,

  37. user_name,

  38. ip_address,

  39. transaction_id,

  40. email,

  41. is_loaded

  42. from $TABLE_PAY

  43. where is_loaded = 0»;

  44. $result = $DB→query($sql) or die('Ошибка');

  45. $xml = new GenerateXML();

  46. while ($product=$DB→fetch_array($result, MYSQL_BOTH)){

  47. $a = $xml→addEl('Pay');

  48. $xml→addEl('mysql_id', $product['id'], $a); // ID записи из mysql

  49. $xml→addEl('dor_id', $product['dor_id'], $a); // dоr_id - id заказа

  50. $xml→addEl('contr_id', $product['contr_id'], $a); // contr_id - id клиента

  51. $xml→addEl('amount', $product['amount'], $a); // сумма оплаты

  52. $xml→addEl('card_last_four', $product['card_last_four'], $a); // неполный номер карты

  53. $xml→addEl('card_type', $product['card_type'], $a); // тип карты Visa, Mastercard/краткое имя банка

  54. $sql2 = «update ».$TABLE_PAY.« set guid='».$DB→real_escape_string($guid).«' where id = ».$product['id']; // помечаем оплаты тек выгрузкой

  55. $result2 = $DB→query($sql2) or die('Ошибка');

  56. }

  57. echo $xml→saveXML();

  58. }

  59. else

  60. if (isset($_GET['SavePay'])){ // сохранение оплаты

  61. $sql2 = «update ».$TABLE_PAY.« set is_loaded=1, token=null, datetime_unloading = CURRENT_TIMESTAMP() where guid = '».$DB→real_escape_string($guid).«'»; // помечает что оплаты выгрузились успешно

  62. $result2 = $DB→query($sql2) or die('Ошибка');

  63. $xml = new GenerateXML();

  64. $xml→addEl('Error', 0);

  65. echo $xml→saveXML();

  66. }

  67. >

    ?>

Пример скрипта таблицы хранения информации об оплаченных заказов в MYSQL:

CREATE TABLE `payment_orders ` (

`id` BIGINT(20) NOT NULL AUTO_INCREMENT,

`guid` VARCHAR(50) NULL DEFAULT NULL COMMENT 'GUID выгрузки',

`contr_id` BIGINT(20) NOT NULL COMMENT 'контрагент в БД',

`dor_id` BIGINT(20) NULL DEFAULT NULL COMMENT 'заказ в БД',

`amount` DOUBLE NOT NULL COMMENT 'сумма оплаты',

`datetime_load_server` TIMESTAMP NULL DEFAULT NULL COMMENT 'Дата создания по времени сервера',

`datetime_load` TIMESTAMP NULL DEFAULT NULL COMMENT 'Дата создания по времени сервера оплаты',

`datetime_unloading` TIMESTAMP NULL DEFAULT NULL COMMENT 'Дата выгрузки в БД агбис',

`card_last_four` VARCHAR(4) NULL DEFAULT NULL COMMENT 'последние 4 цифры',

`card_type` VARCHAR(50) NULL DEFAULT NULL COMMENT 'тип кары',

`user_name` VARCHAR(500) NULL DEFAULT NULL COMMENT 'Имя пользователя карты',

`ip_address` VARCHAR(500) NULL DEFAULT NULL COMMENT 'ip клиента',

`transaction_id` VARCHAR(500) NULL DEFAULT NULL COMMENT 'номер транзакции',

`email` VARCHAR(250) NULL DEFAULT NULL COMMENT 'email адрес плательщика',

`is_loaded` TINYINT(4) NOT NULL DEFAULT '0' COMMENT 'Признак успешной выгрузки True/False',

`waiting` TINYINT(4) NULL DEFAULT NULL COMMENT 'Ожидание подтверждения от системы оплаты. 1 ожидание, 0 - уже оплачено',

`com` VARCHAR(500) NULL DEFAULT NULL,

PRIMARY KEY (`id`)

)

COMMENT='Оплаты заказов из ЛК'

COLLATE='utf8_general_ci'

ENGINE=MyISAM