====== Передача информации по оплате заказа в АГБИС ====== Данный раздел подойдет для тех, кто самостоятельно интегрирует оплаты в свои мобильные приложения (МП) и личный кабинет (ЛК). Весь механизм оплат и все оплаты реализуется и хранится на стороне клиента. Наша сервисная служба (агент) примерно раз в 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: 57 158671 44708 31.88 4242 Visa 59 159060 44708 2125 4242 Visa ... где\\ //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: 0 На этом выгрузка заканчивается и оплаты появляются в программе АГБИС химчистка и ЛК. ==== Пример скрипта php обрабатывающий Load и SavePay запросы от агента ==== 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(); } ?> ==== Пример скрипта таблицы хранения информации об оплаченных заказов в 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 'Дата выгрузки в БД агбис', `token` VARCHAR(50) NULL DEFAULT NULL COMMENT 'token', `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