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

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
передача_информации_по_оплате_заказа_в_агбис [25.10.2021 14:21]
Anatoly [Запрос выгрузки оплат]
передача_информации_по_оплате_заказа_в_агбис [25.10.2021 14:23]
Строка 1: Строка 1:
-====== Передача информации по оплате заказа в АГБИС ====== 
  
-Данный раздел подойдет для тех, кто самостоятельно интегрирует оплаты в свои мобильные приложения (МП) и личный кабинет (ЛК). 
- 
-Весь механизм оплат и все оплаты реализуется и хранится на стороне клиента. 
- 
-Наша сервисная служба (агент) примерно раз в 30 секунд посылает GET запрос на определенный скрипт (по адресу предоставленный клиентом),​ который отвечает за выгрузку оплат, и передает в него параметры.\\ ​ 
-В ответ скрипт будет сообщать нам данные (xml) об оплаченных заказах,​ после чего агент пометит заказы как оплаченные. 
- 
-Путь до скрипта должен быть для всех запросов **один**,​ например,​ %%https://​www.example.ru/​api/​pay.php%% 
- 
-После разработки скрипта,​ передать этот путь до скрипта,​ а также значения для параметров Ld и Pd, в АГБИС для дальнейшей настройки агента и тестирования работы выгрузки оплат. 
- 
-==== Запрос выгрузки оплат ==== 
- 
-Пример запроса агента на адрес: 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: 
- 
-<sxh xml> 
-<?xml version="​1.0"​ encoding="​utf-8"?>​ 
-<​Agbis>​ 
-  <Pay> 
-    <​mysql_id>​57</​mysql_id>​ 
-    <​dor_id>​158671</​dor_id>​ 
-    <​contr_id>​44708</​contr_id>​ 
-    <​amount>​31.88</​amount>​ 
-    <​token/>​ 
-    <​card_last_four>​4242</​card_last_four>​ 
-    <​card_type>​Visa</​card_type>​ 
-  </​Pay>​ 
-  <Pay> 
-    <​mysql_id>​59</​mysql_id>​ 
-    <​dor_id>​159060</​dor_id>​ 
-    <​contr_id>​44708</​contr_id>​ 
-    <​amount>​2125</​amount>​ 
-    <​token/>​ 
-    <​card_last_four>​4242</​card_last_four>​ 
-    <​card_type>​Visa</​card_type>​ 
-  </​Pay>​ 
-  ... 
-</​Agbis>​ 
-</​sxh>​ 
- 
-где\\ ​ 
-//​mysql_id//​ – ID строки из БД mysql на стороне клиента,​ обязательное поле;​\\ ​ 
-//dor_id// – ID заказа,​ обязательное поле;​\\ ​ 
-//​contr_id//​ – ID клиента химчистки,​ обязательное поле;​\\ ​ 
-//amount// – сумма оплаты заказа,​ обязательное поле;​\\ ​ 
-//token// - токен оплаты,​ обязательное поле (оставлять параметр пустым);​ 
-//​card_last_four//​ – последние 4 цифры карты оплаты;​\\ ​ 
-//​card_type//​ – тип карты/​банка оплаты. 
- 
-После обработки XML ответа,​ агент сохраняет в АГБИС все оплаты заказов. 
- 
-==== Запрос успешного сохранения оплат ==== 
- 
-Для определения успешной выгрузки оплат в АГБИС, агент отправляет 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: 
- 
-<sxh xml> 
-<?xml version="​1.0"​ encoding="​utf-8"?>​ 
-<​Agbis>​ 
-  <​Error>​0</​Error>​ 
-</​Agbis>​ 
-</​sxh>​ 
- 
-На этом выгрузка заканчивается и оплаты появляются в программе АГБИС химчистка и ЛК. 
- 
-==== Пример скрипта php обрабатывающий Load и SavePay запросы от агента ==== 
-<sxh php> 
-<?php 
-  ini_set('​display_errors',​ 0); 
-  error_reporting(E_ALL);​ 
- 
-  header('​Content-type:​ text/html; charset=UTF-8'​);​ 
- 
-  include('​_class/​mysql.php'​);​ 
-  include('​_class/​GenerateXML.php'​);​ 
- 
-  if (count($_GET) == 0) //если ни каких параметров в строке нет, то убиваем выполнение скрипта 
-    die('​Ошибка'​);​ 
-  $DB = new DB; 
-  if (!$DB->​link) 
-    die('​Ошибка базы данных!'​);​ 
- 
-  if (isset($_GET['​Lg'​]) && !empty($_GET['​Lg'​]) && isset($_GET['​Pd'​]) && !empty($_GET['​Pd'​])){ 
-    // проверка логина пароля 
-    $lg = substr($_GET['​Lg'​],​ 0, 50); 
-    $pd = substr($_GET['​Pd'​],​ 0, 50); 
-    // тут проверка на правильность $lg и $pd 
-  } 
-  else 
-    die('​Ошибка'​);​ // не позволяем работать дальше 
- 
-  if (isset($_GET['​guid'​]) && !empty($_GET['​guid'​])) 
-    $guid = $_GET['​guid'​];​ 
-  else 
-    die('​Ошибка'​);​ 
- 
-  $TABLE_PAY = '';​ // имя таблицы 
- 
-  if (isset($_GET['​Load'​])){ // Загружаем оплаты 
-    $sql = "​select 
-              id, 
-              dor_id, 
-              contr_id, 
-              amount, 
-              datetime_load_server,​ 
-              datetime_load,​ 
-              datetime_unloading,​ 
-              token, 
-              card_last_four,​ 
-              card_type, 
-              user_name, 
-              ip_address, 
-              transaction_id,​ 
-              email, 
-              is_loaded 
-            from $TABLE_PAY 
-            where is_loaded = 0"; 
-    $result = $DB->​query($sql) or die('​Ошибка'​);​ 
- 
-    $xml = new GenerateXML();​ 
-    while ($product=$DB->​fetch_array($result,​ MYSQL_BOTH)){ 
-      $a = $xml->​addEl('​Pay'​);​ 
-      $xml->​addEl('​mysql_id',​ $product['​id'​],​ $a); // ID записи из mysql 
-      $xml->​addEl('​dor_id',​ $product['​dor_id'​],​ $a); // dоr_id - id заказа 
-      $xml->​addEl('​contr_id',​ $product['​contr_id'​],​ $a); // contr_id - id клиента 
-      $xml->​addEl('​amount',​ $product['​amount'​],​ $a); // сумма оплаты 
-      $xml->​addEl('​card_last_four',​ $product['​card_last_four'​],​ $a); // неполный номер карты 
-      $xml->​addEl('​card_type',​ $product['​card_type'​],​ $a); // тип карты Visa, Mastercard/​краткое имя банка 
- 
-      $sql2 = "​update "​.$TABLE_PAY."​ set guid='"​.$DB->​real_escape_string($guid)."'​ where id = "​.$product['​id'​];​ // помечаем оплаты тек выгрузкой 
-      $result2 = $DB->​query($sql2) or die('​Ошибка'​);​ 
-    } 
- 
-    echo $xml->​saveXML();​ 
-  } 
-  else 
-  if (isset($_GET['​SavePay'​])){ // сохранение оплаты 
-    $sql2 = "​update "​.$TABLE_PAY."​ set is_loaded=1,​ token=null, datetime_unloading = CURRENT_TIMESTAMP() where guid = '"​.$DB->​real_escape_string($guid)."'";​ // помечает что оплаты выгрузились успешно 
-    $result2 = $DB->​query($sql2) or die('​Ошибка'​);​ 
- 
-    $xml = new GenerateXML();​ 
-    $xml->​addEl('​Error',​ 0); 
-    echo $xml->​saveXML();​ 
-  } 
-?> 
-</​sxh>​ 
- 
-==== Пример скрипта таблицы хранения информации об оплаченных заказов в MYSQL ==== 
- 
-<sxh sql> 
-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 
-</​sxh>​