问题背景
最近接入微信支付,微信官方并没有提供Python版的服务端SDK,因而只能根据文档手动实现一版,这里记录一下微信支付的整体流程、踩坑过程与最终具体实现。
微信支付APP下单流程
根据微信官方文档: 开发指引-APP支付 | 微信支付商户平台文档中心
下单流程:
和支付宝不同,微信多了一个预付单的概念,这里把APP下单实际分为四大部分,其中包含请求微信后端需要的首次签名和需要返回给APP的二次支付信息签名--这里踩一个小坑,流程图中并没把第二次签名支付信息需要返回给APP的步骤画出来(即下面的步骤6.5),因而一开始误以为只需要返回prepay_id给客户端,导致校验失败。
一. 对应步骤1~4,APP 请求业务后端,业务后台进行V3签名后,请求微信后端生成预付单prepay_id
二. 对应步骤5~6.5,业务后端收到微信后端返回prepay_id,将支付相关参数打包进行二次签名后返回给APP,这里相比流程图多了一个6.5--即业务后端返回签名支付信息到APP
三. 对应步骤7~18,APP收到业务后端返回签名支付信息后调起SDK发起支付请求,收到同步消息结果通知
实现方法:
这是我实际的商品购买的业务代码,用户需要登录授权之后,在下单是把用户的openid和商品价格商品描述发送给后端。
需要安装
wechatpayv3
pip install wechatpayv3
我封装好的支付方法: Pay.py
import json
from wechatpayv3 import WeChatPay, WeChatPayType
from utils.pay.config import *
class Pay():
def __init__(self):
"""
:param wechatpay_type: 微信支付类型,示例值:WeChatPayType.MINIPROG
:param mc