diff --git a/.workbuddy/memory/2026-07-16.md b/.workbuddy/memory/2026-07-16.md new file mode 100644 index 0000000..f042e97 --- /dev/null +++ b/.workbuddy/memory/2026-07-16.md @@ -0,0 +1,31 @@ +# 2026-07-16 + +## 续费扫码支付链路修复(前后端联动) + +### 问题1:小程序 pay 页扫码后误显"支付成功" + +- 文件:`websopy-taro/src/passport/pay/index.tsx` +- 根因:`fetchDetail` 用 `subscription.status === 'active'` 判定已支付。但后端 `renewPay` 为了避免放弃支付导致服务中断,**故意保留** `status='active'`、仅设 `payStatus=0`。 +- 修复:判断改为 `payStatus === 1`;同时处理 `cancelled`/`expired` 状态。详见 `websopy-taro/.workbuddy/memory/2026-07-16.md`。 + +### 问题2:用户点"立即支付"后端返回"该订阅已激活" + +- 文件:`/Users/gxwebsoft/JAVA/websopy-java/src/main/java/com/gxwebsoft/app/controller/AppSubscriptionController.java` +- 根因:`pay/{id}`(line 339-341)和 `mp-prepay`(line 539-541)两处拦截只看 `status='active'`,与上次 `mp-confirm` 同样的坑——续费的 `active+payStatus=0` 被误拦。 +- 修复:两处拦截条件对齐 `mp-confirm`,改为 `status='active' && payStatus==1` 才拦截,放行续费的 `active+payStatus=0`。 +- commit:`7c95f8e` (本地 main,待 push + 服务器部署)。 + +### 关键规则(防回归) + +判断"是否已支付"必须用 `payStatus`(0=未支付 / 1=已支付),**不能**用 `status`(订阅生命周期 active/pending/expired/cancelled)。续费场景下这两个字段完全解耦:后端 `renewPay` 保留 `status='active'` + 设 `payStatus=0`。 + +后端三处拦截条件现在全部对齐: +- `pay/{id}` line 339-343 +- `mp-prepay` line 541-545 +- `mp-confirm` line 573(之前已修) + +### 部署待办(用户操作) + +1. 后端:`cd /Users/gxwebsoft/JAVA/websopy-java && git push`,然后远程服务器 `git pull && mvn clean package -DskipTests && docker-compose up -d --build cms-api`(或对应重启方式)。 +2. 小程序端:`websopy-taro` 重新编译上传体验版/正式版。 +3. 联调验证:admin 点"立即续费" → 弹码 → 微信扫码 → 进小程序应显示"确认支付"页(不再误显成功)→ 点"立即支付" → 微信支付 → 显示"支付成功" → 跳转 `/user/apps/index`。 diff --git a/index.html b/index.html index 16cfd57..27a0f3b 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ -