Подключение(интеграция) приема платежей 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
Заказать работу
предложить оффер

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

Archive

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