微信支付 & 支付宝 — 部署与问题总结


更新时间:2026-07-08



一、微信支付


部署状态


项目详情
------
商户号**1115016766**(普通商户)
商户平台[pay.weixin.qq.com](https://pay.weixin.qq.com)
Native 支付产品中心可见,待激活
SDK`wechatpayv3`,已安装
证书`certs/1115016766/apiclient_cert.pem` + `apiclient_key.pem`
APIv3 密钥已设置
公钥 ID``
代码`webui/payment.py` → `create_order()` / `create_custom_order()`
充值页面`/recharge`,套餐选择 + 自定义金额 + 微信按钮

阻塞问题


~~缺少 AppID~~ → 已解决。经测试,小程序 AppID wx0dbbb415f5f5527d 可用于 Native 支付,无需单独注册服务号。


当前状态


✅ 微信支付已全线打通:下单 → 返回 code_url → 生成二维码 → 扫码支付 → 回调积分到账




二、支付宝


部署状态


项目详情
------
APPID**2021006171615599**(新应用,已开通电脑网站支付)
开发平台[open.alipay.com](https://open.alipay.com)
签约产品电脑网站支付(已提交审核,收到通过短信)
SDK`python-alipay-sdk`,已安装
私钥`zhifubao/readme.md` 中记录
支付宝公钥已上传
回调地址`https://qianshi.cool/api/payment/alipay_notify`
网关正式环境 `https://openapi.alipay.com/gateway.do`
代码`webui/payment.py` → `create_alipay_order()` / `verify_alipay_notify()`
充值页面`/recharge`,套餐选择 + 自定义金额 + 支付宝按钮

阻塞问题


~~insufficient-isv-permissions~~ → 已重新创建应用(APPID: 2021006171615599),已开通电脑网站支付。需更新 payment.py 中的密钥后测试。




三、充值页面说明


功能状态
------
套餐充值完成(微信+支付宝按钮)
自定义金额完成(1 元起)
支付宝跳转API 已通,权限待刷新
微信二维码代码已通,缺 AppID
支付回调`/api/payment/wx_notify` + `/api/payment/alipay_notify`
积分到账回调后自动 `update_points` + `add_log`



四、代码架构


文件结构


webui/
├── payment.py          # 微信+支付宝核心模块
│   ├── 微信: create_order() / create_custom_order() / verify_and_fulfill()
│   └── 支付宝: create_alipay_order() / verify_alipay_notify()
├── app.py              # 路由层
│   ├── /recharge                    → 充值页面
│   ├── /api/payment/create          → 微信套餐下单
│   ├── /api/payment/custom          → 微信自定义金额下单
│   ├── /api/payment/alipay          → 支付宝下单
│   ├── /api/payment/wx_notify       → 微信支付回调
│   └── /api/payment/alipay_notify   → 支付宝回调
└── template.html       # 前端充值页面(套餐+自定义金额+QR码)

支付流程


用户登录 → /recharge 充值页面
    │
    ├── 选套餐 → 点"微信" or "支付宝"
    │       └── selectPlan(idx, type)
    │            └── type==='wechat' → createPayment() → POST /api/payment/create
    │            └── type==='alipay' → createAlipayOrder() → POST /api/payment/alipay
    │
    └── 输入自定义金额 → 点"微信" or "支付宝"
            └── createCustomPayment(type)
                 └── type==='wechat' → POST /api/payment/custom
                 └── type==='alipay' → POST /api/payment/alipay
    │
    ▼
后端 payment.py
    │
    ├── 微信: 调用 wechatpayv3 SDK pay() 方法
    │       └── 微信返回 code_url (weixin://wxpay/bizpayurl?pr=xxx)
    │            └── 前端用 google qrserver 生成二维码图片
    │                 └── 用户扫码 → 支付成功 → 微信回调 /api/payment/wx_notify
    │                      └── verify_and_fulfill() → update_points() → add_log()
    │
    └── 支付宝: 调用 python-alipay-sdk api_alipay_trade_page_pay()
            └── 返回 pay_url (https://openapi.alipay.com/gateway.do?...)
                 └── 前端 window.open(pay_url) 打开支付宝收银台
                      └── 用户支付 → 支付宝回调 /api/payment/alipay_notify
                           └── verify_alipay_notify() → update_points() → add_log()

二维码生成(微信)


前端 JS 代码流程:


// 1. 调用后端下单 API
let r = await fetch('/api/payment/custom', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({amount: 1})
});
let j = await r.json();

// 2. 后端返回 code_url
// j.qr_url = "weixin://wxpay/bizpayurl?pr=xxx"

// 3. 通过 Google QR Server 生成二维码图片
let qrUrl = 'https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=' 
          + encodeURIComponent(j.qr_url);

// 4. 展示二维码
document.getElementById('qrCode').innerHTML 
    = '';

支付宝支付跳转


// 1. 调用后端下单 API
let r = await fetch('/api/payment/alipay', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({amount: 1})
});
let j = await r.json();

// 2. 后端返回 pay_url(支付宝收银台完整 URL)
// j.pay_url = "https://openapi.alipay.com/gateway.do?app_id=..."

// 3. 新窗口打开支付宝收银台
window.open(j.pay_url);

积分到账流程


支付平台回调 → 验签(RSA/SM2)
    │
    ├── 通过 → 从 _order_store 取出订单信息
    │         → update_points(uid, points)  // 加积分
    │         → add_log(uid, "充值", points, "微信/支付宝 xxx")  // 记录日志
    │         → 返回 success
    │
    └── 失败 → 返回 fail → 支付平台稍后重试回调



五、测试命令


支付宝测试


curl -X POST http://127.0.0.1:8899/api/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"email":"admin@qianshi.cool","password":"admin123"}' -c /tmp/test.txt

curl -X POST http://127.0.0.1:8899/api/payment/alipay \
  -b /tmp/test.txt \
  -H 'Content-Type: application/json' \
  -d '{"amount":1}'

应返回 {"ok":true, "pay_url":"https://openapi.alipay.com/..."}, 将 pay_url 在浏览器打开即可完成支付。


微信测试(需先配置 AppID)


curl -X POST http://127.0.0.1:8899/api/payment/custom \
  -b /tmp/test.txt \
  -H 'Content-Type: application/json' \
  -d '{"amount":1}'

应返回 {"ok":true, "qr_url":"weixin://..."}, 前端据此生成支付二维码。


千视科技 · 支付部署总结 · 2026-07-08