Python 接入
本页是 Python(FastAPI)商户的完整接入教程,从零到收款五步,代码都可以整段复制。 读完本页即可完成接入,其他页面作为字典备查。
第一步:确认手里有这些
api_secret 放环境变量或配置中心,不要写进代码,不要提交到代码仓库。
第二步:初始化
第三步:服务端三个路由
充值功能在服务端就是三个路由:下单、收回调、给前端查状态。以下可直接粘贴:
webhook 路由的第一行必须是 await request.body() 拿原文。签名针对请求体原始字节,
任何先做 JSON 解析的写法都会导致验签失败。这是接入中最常踩的一个坑。
第四步:前端充值页
前端要做的只有两件事:展示 pay_url、轮询自家后端的订单状态。可直接用的最小实现:
要点:支付完成时 PC 页面不会收到任何事件,靠的就是这个轮询;到账的依据是你后端的 订单状态(由 webhook 驱动),不是支付页的跳转。
可选:银联商务聚合码(一张码微信/支付宝/云闪付都能扫)
顽兔侧开通银商渠道后,下单多传一个 channel 就能出聚合码,回调、查单、退款完全不变:
前端有一处不同:这条渠道的 pay_url 是二维码内容(不能 iframe、浏览器打不开),
要用二维码库渲染成码图:
按下单返回的 channel 字段分支两种渲染即可(完整写法见 fastapi_demo.py 的演示页,
三个按钮都有)。
页面在微信里打开(公众号菜单、聊天链接)时展示二维码是没法付的——改传
pay_mode="redirect"(可带 return_url),拿到的 pay_url 直接整页跳转过去,
银商收银台会唤起微信支付,你不需要有自己的公众号。
参数细节与微信内完整示例见发起支付。
第五步:联调核对
按 联调与上线 的用例走,每步预期如下:
本地开发收不到回调时:回调地址需公网可达(内网穿透),排查前先用查单接口确认支付 本身是否成功。遇到任何报错,直接查常见问题排查,按症状对号入座。