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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия Следующая версия справа и слева
передача_информации_по_оплате_заказа_в_агбис [25.10.2021 14:23]
передача_информации_по_оплате_заказа_в_агбис [25.10.2021 14:23]
Anatoly [Пример скрипта php обрабатывающий Load и SavePay запросы от агента]
Строка 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('​token',​ $product['​token'​],​ $a); // token
 +      $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>​