Files
gaokao-volunteer-system/docs/PAYMENT_PROVIDER_ONBOARDING.md
Hermes Agent 7fabc23715
Some checks failed
CI / pytest (Python 3.10) (push) Has been cancelled
CI / pytest (Python 3.11) (push) Has been cancelled
CI / pytest (Python 3.12) (push) Has been cancelled
fix(t12): close payment delivery and governance remediation
2026-06-15 11:39:31 +08:00

90 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# T12 真实支付 Provider 接入与上线验收
## 当前结论
- 当前仓库已完成 **Mock 支付本地闭环**
- 若要把 T12 推进到 **真实收款/线上验收完成**,当前最短路径建议:**支付宝优先,微信支付第二阶段补齐**。
- 当前机器/仓库未发现任何真实支付环境变量或证书路径配置,因此真实 provider 仍被外部条件阻塞。
## 为什么推荐支付宝优先
1. 当前支付模型只有 `checkout_url`,更贴合支付宝网页支付跳转模式。
2. 当前前端是静态 HTML + 少量 JS不是小程序优先也不是重前端。
3. Python/FastAPI 对接支付宝的工程形态更接近当前 checkout / return / notify 结构。
## 当前代码口径
- 本地闭环 provider: `mock`
- 上线前模拟支付宝 provider: `alipay_sim`
- 配置键:
- `GAOKAO_PAYMENT_PROVIDER`
- `GAOKAO_PAYMENT_BASE_URL`
- `GAOKAO_PAYMENT_WEBHOOK_SECRET` (生产环境必须显式设置强密钥,启动 fail-closed;P2-5)
- `GAOKAO_PAYMENT_NOTIFY_URL`
- `GAOKAO_PAYMENT_RETURN_URL`
- `GAOKAO_PAYMENT_APP_ID`
- `GAOKAO_PAYMENT_PRIVATE_KEY_PATH`
- `GAOKAO_PAYMENT_ALIPAY_PUBLIC_KEY_PATH`
## 接入前置检查
先跑:
```bash
python3 scripts/payment_provider_doctor.py
```
### 期望结果
- `provider=mock`ready=true只代表本地/测试闭环
- `provider=alipay_sim`ready=true代表“上线前模拟支付宝 checkout/回调验证”已可本地执行,但不代表真实支付宝已联通
- `provider=alipay`:若缺少 app_id / key_path / notify_url / return_url会返回 ready=false
## 支付宝最小上线前置
1. 企业/个体商户主体
2. 支付宝开放平台应用 `app_id`
3. 应用私钥文件
4. 支付宝公钥文件
5. 产品签约(电脑网站支付 / 手机网站支付)
6. 已备案域名
7. 公网可访问 `notify_url`
8. 明确 `return_url`
## 推荐环境变量模板
```bash
export GAOKAO_PAYMENT_PROVIDER=alipay
export GAOKAO_PAYMENT_BASE_URL=https://your-domain.example
export GAOKAO_PAYMENT_WEBHOOK_SECRET=replace-with-independent-payment-secret
export GAOKAO_PAYMENT_NOTIFY_URL=https://your-domain.example/api/public/payments/alipay/notify
export GAOKAO_PAYMENT_RETURN_URL=https://your-domain.example/portal/payment-return
export GAOKAO_PAYMENT_APP_ID=your-app-id
export GAOKAO_PAYMENT_PRIVATE_KEY_PATH=/secure/path/alipay_private.pem
export GAOKAO_PAYMENT_ALIPAY_PUBLIC_KEY_PATH=/secure/path/alipay_public.pem
```
## 当前外部阻塞(不可绕过)
- 无真实商户主体/签约产品
- 无真实支付证书/密钥文件
- 无公网 notify URL
- 无生产域名备案验收证据
## 真正完成 T12 的下一跳
当上面四类外部条件具备前,当前仓库已可先完成这些本地验证:
1. `GAOKAO_PAYMENT_PROVIDER=alipay_sim python3 scripts/payment_provider_doctor.py`
2. `pytest -q data/payments/tests/test_provider_alipay_sim.py`
3. `pytest -q data/payments/tests/test_provider_alipay.py admin/tests/test_payment_alipay_notify.py`
4. `GAOKAO_SKIP_INSTALL=1 bash scripts/dev-verify.sh`
当上面四类外部条件具备后,继续执行:
1. 配置真实 `GAOKAO_PAYMENT_*` 环境变量并跑 doctor ready=true
2. 沙箱联调
3. 生产域名回调联调
4. 真实下单→支付→回调→portal 状态页→报告交付验收
5. 再补对账任务 / 退款补偿 / 真实告警链