Оплата WeChat делится на оплату JSAPI, оплату скан-кодом, оплату через приложение, оплату через апплет и другие способы оплаты. Но общий процесс оплаты тот же.В этой статье для описания всего процесса разработки платежа в качестве примера используется платеж JSAPI, то есть платеж H5 в WeChat.
настроить
Продавцам необходимо заранее открыть платформу продавца и перейти на общедоступную платформу или открытую платформу, чтобы отправить платежное приложение WeChat для получения номера продавца и ключа.
Подробную документацию можно найти здесь
Процесс оплаты
Чертеж процесса оплаты WeChat очень полный, и весь процесс должен быть ясен до начала разработки.
Во всем процессе сервер должен сделать три вещи.
- После срабатывания внешней кнопки оплаты сервер вызоветединый порядокИнтерфейс возвращает информацию о предоплаченном заказе, параметры платежа и подписи параметров во внешний интерфейс. Внешний интерфейс вызывает платежи на основе этих параметров.
- Когда платеж пользователя будет успешным, WeChat отправит нам уведомление обратного вызова, чтобы сообщить нам о результате платежа. На этом этапе требуется операция «Завершить заказ», отметив, что пользователь успешно оплатил, и вход в процесс «Доставка».
- Укажите интерфейс запросов, чтобы позволить переднему концу восстановления, является ли платеж успешной.
единый порядок
Перед оплатой торговая система сначала вызывает этот интерфейс, чтобы сгенерировать заказ на транзакцию с предоплатой в фоновом режиме оплаты WeChat. Аналогичным образом, торговая система также должна записать «незавершенный заказ» в свою собственную таблицу. После генерации правильная информация о предоплаченном заказе, параметры платежа и подпись параметра возвращаются в интерфейс. Внешний интерфейс вызывает платежи на основе этих параметров.
интерфейс
https://api.mch.weixin.qq.com/pay/unifiedorder
Есть так много параметров, пожалуйста, обратитесь к документации для получения подробной информации.
Здесь нужно объяснить, что когда мы вызываем этот интерфейс, нам нужно подписать имя для проверки в WeChat, WeChat также возвращает новую подпись для проверки для нас, а затем мы должны вернуть во внешний интерфейс подпись, используется для призыва к оплате. Ни одна из трех подписей не является одинаковой.
Мы не можем напрямую вернуть подпись, возвращенную вызовом единого интерфейса заказа во внешний интерфейс, ноПереподписать по параметрам фронтенда вызывающего платеж.
Примечание, даПереподписать по параметрам фронтенда вызывающего платеж, так как имя параметра внешнего интерфейса и имя параметра внутреннего интерфейса будут немного отличаться, здесь нужно быть осторожным.
Описание: Целью подписи является проверка личности. Текущий конец передает эти параметры в WeChat. WeChat удалит подпись и повторно подпишет параметры вызова, чтобы проверить правильность подписи. Поэтому имена параметров, используемые для подписи должно быть таким же, как Параметры внешнего интерфейса такие же.
Уведомление о результате платежа
При оформлении заказа мы заполнили параметр под названиемnotify_url
, который является интерфейсным адресом сервера. После успешной оплаты пользователем WeChat перезвонит по этому адресу, чтобы сообщить нам о результате платежа.
Подробности смотрите в документации
На этом этапе все еще необходимо выполнить многоточечную проверку, чтобы не воспользоваться ею.
- Проверьте, прошел ли платеж успешно, если нет, сразу верните «FAIL»
- Подтвердить подпись и appid
- Проверить, выполнен ли заказ (идемпотентная проверка, предотвращающая множественные обратные вызовы из WeChat, ведущие к написанию нескольких заказов)
- Проверка суммы заказа
Вы можете заниматься делами, связанными с бизнесом, после ввода пароля. Не забудьте вернуть «Успех» после всех операций, иначе WeChat продолжит инициировать обратные вызовы.
Суммировать
- Описание блок-схемы очень понятное, пожалуйста, внимательно прочитайте блок-схему.
- После вызова интерфейса заказа требуется вторая подпись.Параметры подписи зависят от того, какие параметры используются для фронтальной проверки подписи.Даже если это один и тот же параметр, имя поля будет отличаться от первой подписи.
- После того, как предварительный платеж будет завершен, WeChat перезвонит, и нам нужно проверить следующие моменты:
- Выполните идемпотентную обработку (поскольку одно и то же уведомление WeChat может быть отправлено несколько раз).
- Проверьте подпись и проверьте APPID.
- Проверьте сумму заказа.
- Статус заказа делится на 0-неоплаченный 1-платеж выполнен 2-платеж не выполнен:
- Когда пользователь запускает платежный компонент, а затем закрывает или уничтожает процесс, WeChat не будет давать никакого ответа в фоновом режиме, и он всегда будет 0-неоплаченным, поэтому это состояние также является состоянием сбоя платежа.
- Сбои в платежах относительно редки (до сих пор не сталкивались с ними), например, ошибки подписи (возникающие на этапе отладки).
- В таблице квитанций WeChat максимально подробно записываются все необходимые параметры, возвращаемые WeChat, чтобы подготовиться к устранению неполадок в случае возникновения проблем, которые можно напрямую закинуть в mongodb.