微信支付 & 支付宝 — 部署与问题总结
更新时间:2026-07-10
一、微信支付 ✅ 已上线
配置
| 项目 | 值 |
|---|
| --- | --- |
| 商户号 | 1115016766(普通商户) |
| AppID | wx0dbbb415f5f5527d(小程序 AppID) |
| 支付方式 | Native 扫码支付 |
| 回调地址 | `https://qianshi.cool/api/payment/wx_notify` |
全部问题及解决
| 问题 | 原因 | 解决 |
|---|
| --- | --- | --- |
| 接口报 NO_AUTH | 商户为「特约商户」,无 Native 支付权限 | 重新申请直连商户号 1115016766 |
| Native 支付要求 AppID | API v3 必填 appid 参数 | 使用小程序 AppID `wx0dbbb415f5f5527d`(实测可用) |
| 回调 trade_no/state 为空 | v3 回调 `resource` 字段是 AEAD_AES_256_GCM 加密的,直接 `json.loads` 读不到 | 手写 `cryptography.AESGCM` 解密,不依赖 SDK `callback()` |
| SDK callback() 报 "does not support algorithm: " | SDK 内部验签/解密流程与回调格式不兼容 | 弃用 SDK callback(),手动解密 |
| 金额小数被拒 | `int(0.1)` → 0,后端校验 `amount<0.1` 失败 | 所有金额改用 `float()` |
| gunicorn 日志无输出 | `logging.getLogger('app')` 不输出到 gunicorn | 用 `sys.stderr.write()` + `flush()` |
| 本地充值看不到记录 | 回调 URL `qianshi.cool` 指向云端,本地和云端是独立数据库 | 充值必须走 `https://qianshi.cool/recharge` |
| 多次充值积分未到账 | 上述回调加解密问题导致回调失败 | 修复后手动补积分 |
解密核心代码
if algorithm == "AEAD_AES_256_GCM" and ciphertext:
key = WECHAT_API_V3_KEY.encode("utf-8")
aesgcm = AESGCM(key)
plaintext = aesgcm.decrypt(nonce_bytes, base64.b64decode(ciphertext), ad_bytes)
resource = json.loads(plaintext.decode("utf-8"))
二、支付宝 ✅ 已上线
配置
| 项目 | 值 |
|---|
| --- | --- |
| APPID | 2021006171615599 |
| 签约产品 | 电脑网站支付 |
| 回调地址 | `https://qianshi.cool/api/payment/alipay_notify` |
| 签名方式 | RSA2 |
全部问题及解决
| 问题 | 原因 | 解决 |
|---|
| --- | --- | --- |
| insufficient-isv-permissions | 应用签约后权限未刷新 | 新建应用 `2021006171615599`,重新签约 |
| 签名配置错误 | `missing-signature-config`,公钥/私钥不匹配 | 用支付宝开放平台助手重新生成 RSA2 密钥对,上传应用公钥 |
| 应用未上线 | 应用状态为「审核中」 | 等待审核通过后点击「上线」 |
| 金额小数报错 | `int()` 截断小数 | 改用 `float()` |
| 回调验签失败 | Flask `request.form` 处理参数导致验签失败 | 用 `request.get_data()` 获取原始 body,`parse_qsl()` 解析 |
| 支付页面 ISV 权限不足 | 开发平台和商家中心分离:open.alipay.com 管应用,b.alipay.com 管签约 | 两个平台都要配置 |
回调处理核心代码
from urllib.parse import parse_qsl
raw = request.get_data().decode("utf-8")
data = dict(parse_qsl(raw))
三、充值页面
| 功能 | 状态 |
|---|
| --- | --- |
| 套餐充值 | 微信/支付宝按钮 |
| 自定义金额 | 0.1-10000 元,支持 2 位小数 |
| 支付方式提示 | 微信扫码支付 / 支付宝支付 |
| 充值记录 | 个人中心 + 管理员界面 |
四、测试
# 微信
curl -X POST http://127.0.0.1:8899/api/payment/custom -H 'Content-Type: application/json' -d '{"amount":0.1}'
# → {"ok":true, "qr_url":"weixin://..."}
# 支付宝
curl -X POST http://127.0.0.1:8899/api/payment/alipay -H 'Content-Type: application/json' -d '{"amount":0.1}'
# → {"ok":true, "pay_url":"https://openapi.alipay.com/..."}
充值必须走云端 `https://qianshi.cool/recharge`,本地无法接收回调。
千视科技 · 支付总结 · 2026-07-10