Профессиональная
разработка сайтов

Полная документация API для автоматической оплаты товаров в интернет-магазинах по QR-коду через месенджер Wechat

Для реализации работы данного API необходимо зарегистрироваться на сервисе PDT-Group (). Процесс оплаты происходит в 3 шага

1. Получение токена. Обязательный шаг. Вы отправляете POST-запрос на сервиси получаете в ответ токен - специальную последовательность символов, которую будете использовать во всех дальнейших запросах. Срок жизни токена довольно велик, поэтому один токен вы можете использовать для нескольких последующих запросов.

2. Отправка данных для оплаты и получение ссылки на QR-код. Обязательный шаг. Вы отправляете POST-запрос с данными о вашей сделке и получаете в ответ ссылку на QR-код для оплаты. После этого QR-код вы можете показать в любом месте вашей страницы.

3. Подтверждение факта оплаты в автоматическом режиме. Не обязательный шаг и может быть пропущен. На данном этапе происходит посещение указанной вами в параметрах вашей сделки адреса страницы, подтверждающей факт успешной оплаты. Если таковой страницы у вас нет, то автоматическое подтверждение оплаты не происходит и вам придётся обработать платёж вручную.

Получение токена.

Для получения токена на адрес

http://pay.pdt-group.ru/index.php?route=api/login

отправляется POST-запрос с параметром key, содержащим полученный при регистрации в сервисе ключ

Например (реализация с использованием библиотеки cURL PHP)

$key = "poluchennyi_klyuch";
$server = "http://pay.pdt-group.ru/"; // Сервер шлюза
$urikey = $server . "index.php?route=api/login";
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
curl_setopt($ch,CURLOPT_URL, $urikey);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "key=" . $key );
$response = curl_exec($ch);
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error ( $ch );
curl_close ( $ch );
if($httpStatusCode != 200){
	throw new Exception("invalid 1 httpstatus:{$httpStatusCode} ,response:$response,detail_error:".$error,$httpStatusCode);
	return json_encode ( array() );
}
$json = json_decode ( $response,true );
if ( isset ( $json['success'] ) ) {
	$token = $json['token'];
}

Если запрос выполнен успешно, то переменная $token будет содержать необходимый для выполнения дальнейших запросов параметр.

Получение QR-кода

Для получения ссылки на QR код вам необходимо передать методом POST на адрес

index.php?route=api/wechatpay&token=Полученный_вами_на_шаге_1_токен

следующие параметры

1. Сумма (summa). Обязательный параметр. Представляет собой сумму, которая будет списана с Wechat кошелька вашего покупателя. Заметьте, что платёжная система платформы Wechat работает только с валютой ЮАНЬ, поэтому конвертацию суммы из другой валюты вам необходимо выполнить самостоятельно. Также платформа Wechat не работает с десятыми и сотыми долями юаня и расчёт ведется только по целому числу юаней. Из указанной суммы будет вычтена комиссия в размере 4%. Значение суммы передаётся в параметре summa

2. ID заказа (order). Обязательный параметр. Представляет собой ID заказа в вашем магазине и должен представлять собой целое число. В случае несоблюдения этого условия ID заказа может принять 0 или быть приведён к целому числу автоматически, что может негативно отразиться на статистике ваших платежей. Значение ID заказа передаётся в параметре order

3. Дополнительные параметры. Необязательное значение. Передаётся в параметре params и может содержать дополнительные характеристики заказа, которые при наличии среди них параметра return, будут переданы по указанному в последнем адресу методом POST. Кроме параметра return вы можете указать здесь параметры title для обозначения названия товаров или товара в заказе, параметра description для описания заказа и прочие другие на собственное усмотрение.

4. Флаг среды (wechat). Необязательный параметр. Если флаг среды не установлен, то будет использовано значение по умолчанию (N) и интерфейс будет предлагать QR для сканирования, что не будет работать внутри среды Wechat. Для того, чтобы оплата произошла внутри среды Wechat необходимо в переменной wechat передать параметр 'Y' (без кавычек). Определить же среду исполнения возможно при помощи функции, описанной в примере.

5. Адрес возврата из интерфейса оплаты (r). Параметр не является обязательным, т.к. возврат может быть и не предусмотрен. Однако, если из интерфейса оплаты необходимо вернуться на определённую страницу, то параметр следует явно указать. По умолчанию примет пустое значение. Параметр можно игнорировать, если не планируется принимать оплату внутри среды Wechat.

Например (реализация с использованием библиотеки cURL PHP)

if ( isset ( $json['success'] ) ) { // строки получения токена из предыдущего шага
    $token = $json['token'];        // можно также использовать полученную ранее переменную
    $uripay = $server . "index.php?route=api/wechatpay&token=" . $token;
    $ch = curl_init();

    // Формируем адрес для получения QR-кода
    $uripay = $uripay . "&token=" . $token;

    //Определения флага среды исполнения (Y-внутри Wechat,
    // N - вне Wechat, по умолчанию)
    $wechat = strripos($_SERVER['HTTP_USER_AGENT'],'micromessenger') ? 'Y' : 'N'; 

    // URL возврата из интерфейса оплаты
    $r = urlencode ( HTTP_SERVER . $_SERVER[REQUEST_URI] );

    $summa = 100; // Сумма в целых юанях
    $order = 10001; // ID заказа в вашем магазине
    // Дополнительные параметры в виде строки
    // ( title=title&description=description&return=http://yoursite.com )
    $params = ''; 

    // Формируем параметры для отправки
    $datapay = "r=" . $r . "&wechat=" . $wechat . "&order=" . $order . "&summa=" . $summa;
    if ( $params ) $datapay .= "&params=" . $params;

    curl_setopt($ch,CURLOPT_URL, $uripay );
    curl_setopt($ch, CURLOPT_TIMEOUT, 600);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $datapay );
    $response = curl_exec($ch);
    $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error ( $ch );
    curl_close ( $ch );
    if($httpStatusCode != 200){
	throw new Exception("invalid 1 httpstatus:{$httpStatusCode} ,response:$response,detail_error:".$error,$httpStatusCode);
	return json_encode ( array() );
    }
    $json = json_decode ( $response,true );
    if ( isset ( $json['url'] ) )
        $qrUrl = $json['url']; //url QR-кода для оплаты
    }

}

В переменной $qrUrl вы получите либо часть адреса изображения QR-кода (в случае, если код выполняется вне среды Wechat) или часть адреса для перехода к интерфейсу оплаты внутри Wechat. Для того, чтобы получить полный адрес QR-кода необходимо

$qrUrl = $server . 'index.php?route=api/wechatpay/getqr&token=' . $token . '&' . $json['url'];

где $server - переменная адреса сервера из первой части, а $token - токен, полученный вами в результате первого шага. В случае выполнения кода внутри Wechat к полученной части следует добавить

$url = $server . 'index.php?route=api/wechatpay/directpay&' . $json['url'];

При переходе по указанной ссылке вам будет предложено совершить оплату. По завершении оплаты при нажатии кнопки "Готово" вы будете переброшены на страницу, указанную в параметре r.

Подтверждение факта оплаты в автоматическом режиме

Если вы в дополнительных параметрах указали параметр return с адресом страницы вашего магазина, то на этот адрес будет отправлен POST-запрос, содержащий параметр summa, order и params

Например, если в предыдущем примере в дополнительных параметрах было указано

title=title&description=description&return=http://yoursite.com/success_pay.php

то на адрес http://yoursite.com/success_pay.php с нашего сервиса (pay.pdt-group.ru) придёт следующий запрос

POST /success_pay.php HTTP/1.1
Host: yoursite.com
order=10001&title=title&description=description&return=http://yoursite.com/success_pay.php

где order=10001 - ID заказа из предыдущего запроса.

Далее страница может обработать полученные данные и произвести необходимые действия (отправить почту, изменить статус заказа и т.п.) Ответ страницы не требуется и никак не обрабатывается роботом нашего сервиса. Переход на указанный в параметре return адрес происходит ТОЛЬКО после удачной оплаты вашего товара. Для более надёжной работы данной страницы мы рекомендуем применять динамически формируемый адрес (например, http://yoursite.com/success_pay.php?time=3738494004), а также контролировать полученные от нашего сервиса параметры.

Контакты

Кратко опишите задачу или проблему и
мы свяжемся с вами в ближайшее время

ОТПРАВИТЬ

Мы свяжемся с вами в ближайшее время

OK