Подключение(интеграция) приема платежей WeChat Pay на сайте

Author Автор: Роман Чернышов    Опубликовано: 31 июля 2020

wechatpay интеграция Сегодня я расскажу о своем опыте работы с WeChat Pay, а именно о подключении данного способа оплаты к интернет магазину, по средствам работы с APi Яндекс.Кассы — она предоставляет возможность принимать платежи через эту платежную систему, но готовых модулей для CMS/CRM систем пока нет, по этому возможно только самостоятельная интеграция(путем написание собственного кода для этого). Сам WeChat(Wēixìn) это мобильное приложение, мессенджер китайского происхождения, который очень популярен у них, но еще не так популярен у нас. Данный мессенджер включает в себя большое количество разнообразного функционала, в том числе и возможность производить онлайн платежи(отдельный сервис WeChat Pay). О том как подключить WeChat Pay к своему сайту и его особенностях, читайте ниже.

Особенности

Первым делом стоит обратить внимание на особенности оплаты данным способом, в частности на сценарий подтверждения платежа и срок оплаты(время в течении которого необходимо подтвердить платеж).

  • Провайдер: Яндекс Касса (именно этот платежный сервис обрабатывает Wechat Pay);
  • Тип способа оплаты в API: wechat;
  • Сценарий подтверждения: QR-код;
  • Срок оплаты: 2 минуты;
  • Холдирование: нельзя платить в две стадии;
  • Код в реестре: WP;
  • Возврат: да, полный и частичный; есть ограничения;
  • Срок возврата: моментально;
  • Автоплатежи: нет;
  • Лимиты: минимальный размер платежа — 1 рубль, максимальный — $10 000, есть дополнительные ограничения.
  • Подготовка: Ваш сайт должен быть подготовлен для китайских пользователей, например если вы используете CDN от Google для загрузки jQuery на котором вы будите писать скрипт приема платежей, то помните, что Google в Китае заблокирован и библиотека у китайских пользователей не загрузится. Размещайте все скрипты и библиотеки локально, на сайте.

Схема оплаты

Так как сценарий подтверждения это QR-код, то схема оплаты и следовательно работа скрипта приема платежей на сайте будет следующая:

  1. Формируем форму для оплаты с указанием суммы платежа;
  2. Отправляем данные запроса формы на сервер Яндекс Кассы и получаем в ответ ссылку вида: weixin://wxpay/bizpayurl?pr=kxK2lXq
  3. Далее преобразуем полученную ссылку в изображение QR-код и отображаем его пользователю;
  4. Пользователь с помощью мобильного приложения Wechat, должен сканировать QR-код, для подтверждения оплаты (на это дается 2 минуты);
  5. В ходе ожидания пока пользователь сканирует QR-код, наш скрипт(форма приема платежей) должен делать запросы на сервер Яндекс Кассы(например раз в секунду), с указанием выставленного счета, с целью получения статуса платежа;
  6. В случае ответа с положительным статусом «succeeded», выводим пользователю сообщение, что платеж получен. В иных вариантах полученного статуса, также выводим пользователю соответствующие сообщения: вышло время ожидания, ошибка платежа, ошибка системы, и т.д.
  7. Если вы принимаете платежи в рамках какого либо проекта, CMS или CRM системы, но на завершающем этапе необходимо передать в систему данные о статусе платежа, например перевести статус заказа в CRM на «Оплачен».

Описание методов Yandex.Checkout API PHP Client Library

Документация по Wecaht Pay
Yandex.Checkout API PHP Client Library

Подключение библиотеки в проект

Импортируйте нужные классы

use YandexCheckout\Client;

Авторизация

Создайте экземпляр объекта клиента и задайте идентификатор магазина и секретный ключ (их можно получить в личном кабинете Яндекс.Кассы). Как выпустить секретный ключ

$client = new Client();
$client->setAuth('shopId', 'secretKey');

Создание платежа

Создайте платеж, в объекте payment_method_data передайте тип wechat, в объекте confirmation передайте тип qr, а в параметре capture передайте значение true, чтобы платеж автоматически перешел в статус succeeded после оплаты.

<?php
    $client->createPayment(
        array(
            'amount' => array(
                'value' => 2,
                'currency' => 'RUB',
            ),
            'payment_method_data' => array(
                'type' => 'wechat',
            ),
            'confirmation' => array(
                'type' => 'qr'
            ),
            'capture' => true,
            'description' => 'Заказ №72',
        ),
        uniqid('', true)
    );

Пример созданного объекта платежа

{
    "id": "2475f981-000f-5000-8000-1538b1392c2a",
    "status": "pending",
    "paid": false,
    "amount": {
        "value": "2.00",
        "currency": "RUB"
    },
    "confirmation": {
        "type": "qr",
        "confirmation_data": "weixin://wxpay/bizpayurl?pr=kxK2lXq"
    },
    "created_at": "2019-05-21T11:49:21.279Z",
    "description": "Заказ № 72",
    "metadata": {},
    "payment_method": {
        "type": "wechat",
        "id": "2475f981-000f-5000-8000-1538b1392c2a",
        "saved": false
    },
    "recipient": {
        "account_id": "100001",
        "gateway_id": "1000001"
    },
    "refundable": false,
    "test": false
}

Получение информации о статусе платежа

<?php
  $response = $client->getPaymentInfo($paymentId);

Пример объекта платежа в статусе succeeded

{
    "id": "2475f981-000f-5000-8000-1538b1392c2a",
    "status": "succeeded",
    "paid": true,
    "amount": {
        "value": "2.00",
        "currency": "RUB"
    },
    "captured_at": "2019-05-21T12:10:19.732Z",
    "created_at": "2019-05-21T12:10:12.509Z",
    "description": "Заказ № 72",
    "metadata": {},
    "payment_method": {
        "type": "wechat",
        "id": "2475f981-000f-5000-8000-1538b1392c2a",
        "saved": false
    },
    "recipient": {
        "account_id": "100001",
        "gateway_id": "1000001"
    },
    "refundable": true,
    "refunded_amount": {
        "value": "0.00",
        "currency": "RUB"
    },
    "test": false
}

Скриншоты

Заключение

Платежи через WeChat Pay пока не так популярны у нас в стране, да и вообще во всем западном мире, по этому встроенной поддержки в плагинах и модулях различных платежных решений для CMS(eCommerce, WP, JoomShopping) нет. Остается только вариант написать скрипты интеграции под своё проект самостоятельно. Если вам нужна помощь по интеграции данного метода оплаты в вашу систему, сайт, CMS, CRM систему — то буду рад сотрудничеству, обращайтесь!

1 Comment to “Подключение(интеграция) приема платежей WeChat Pay на сайте”

  • Юрий 08.05.2023 в 10:06 дп

    Здравствуйте, Роман,

    нашел описание Вашего алгоритма интеграции с WeChatPay за 2020 год. С тех пор Яндекс.касса превратилась в ЮКассу, а она не поддерживает трансфер с WeChatPay.

    Но такая задача (принимать оплату на сайт от WeChatPay и AliPay) передо мной стоит тем не менее.
    Видите ли Вы возможности для такой реализации сейчас?

    Заранее благодарен,
    Юрий Алпеев

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Оформить предзаказ
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка