мета-данные страницы
Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
передача_информации_по_оплате_заказа_в_агбис [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> |