更新时间: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 在浏览器打开即可完成支付。
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