对象:
java分支 3 个提交 + 1 个 jar + 1 个 dist.zip + 1 个必跑 SQL。 状态:已提交、未 push(push 由你做)。origin/java =f09e9cce; 写本文件时git rev-list --count origin/java..java= 8(上批 region 5 个 + 本批 3 个;本文件自身的提交不计入)。
原文:「开放api不用传市了,传省份或者ip,ip精确度更高所以优先级高于省份字段,两个可以同时传也可以只传其中一个,只传省份且有多个市级门店的情况下随机使用其中一个门店」
裁定与落地:
out_biz_no 恒挑同一家);out_biz_no 为空 ⇒ 随机city_code 字段删除;误传须响亮失败(Jackson UnrecognizedPropertyException,不静默忽略)省份编码不存在: 99 / 用户 IP 无法解析出归属地: 1.2.3.4 / 该地区没有可用门店: 省 32(带市时 该地区没有可用门店: 4301(省 43))third_shop_id)优先——传了就不挑原文:「开放接口中暴露了上游har,把名字换了,不要暴露给调用方」
裁定与落地:
alipay:/payment/openapi/har/** → /payment/openapi/alipay/**。
双白名单同名改(SecurityConfig 的 permitAll + TenantApiKeyAuthFilter 的前缀/放行清单)——只改一处就是「被放行 + 无人认证」的零鉴权(2026-09-24 踩过)HAR → AP(仅新单;存量单号不动)/#/checkout/har/<token> → /#/checkout/alipay/<token>(路由名 HarCheckout 不变;后端 PATH_PREFIX 与前端路由段必须同名改,单边改 = 整页 404)biz 不再回吐给调用方;留空时服务端按 trade_type 派生(alipay_un_stage ⇒ har_ali_un_stage)HarOrderController 只改了一句 javadoc;/payment/har/checkout/... 等后台端点原样)原文与裁定:「1、维持租户级兜底,一个租户本来只有一个回调地址 2、存量不补推 做」;另:「直接用我们后台页面生成的checkout码进行支付,会给商家回调吗?如果没有的话也要做」
裁定与落地:
har.callback-max-retries 可配notify_count / last_notify_timenotify_count=8)| # | commit | 内容 | 规模 |
|---|---|---|---|
| C | 94d120d1 |
feat(汇安融): 开放 API 挑店改版 —— 传顾客 IP 或省码(IP 优先、省码回退),不再收市码 | 8 文件 +263/−109 |
| B | d16f6f75 |
feat(汇安融): 开放接口去上游化 —— 路径改 /payment/openapi/alipay、订单号前缀改 AP、biz 不再回吐 | 24 文件 +312/−70 |
| A | 6a0c72a6 |
feat(汇安融): 下游回调失败自动重试 —— 对齐乐收赢:首推一次 + 每分钟一轮,上限 8 次 | 11 文件 +774/−77 |
全批 36 个文件(33 改 + 3 新:OpenapiAuthWiringTest.java、HarCallbackServiceTest.java、db/har-callback-retry.sql)。
拆分方法(时序重放):三件事改在同一批文件上(HarOrderService、har-openapi.md、多个测试类被三件事同时动过),逐文件 git add 拆不干净。做法:把后做任务的 hunk 逐条 Edit 反向抹掉 → 只留 C 的树 → 提交 → 从 logs/_split-2026-10-09/ 的基线字节级还原(逐文件 cmp 核过)→ 再抹掉 A → 提交 B → 还原全部 → 提交 A。每阶段做了残留令牌扫描(只看 changed line,排除 hunk 头回声)确认没有串味;git commit 带显式 pathspec,两个预暂存的 D logs/*.log.gz 没有被卷进去。拆分中间树不是全绿的,只跑各阶段相关测试类;全量只在最终树跑。
OpenapiAuthWiringTest 2 条 —— 关掉「白名单改了、filter 没认」的零鉴权盲区)日志:logs/_split-2026-10-09/stage-{c,b,a}-test.log
1266 条 / 0 失败 / 0 错误 / 0 跳过 / BUILD SUCCESS(上批 region 1232 ⇒ +34)。
日志:logs/_split-2026-10-09/final-full-suite.log
java/target/payment-platform-1.0.0.jar:143,152,531 字节,mtime 2026-10-09 13:37:33,
sha256 8662237ebc127bb5b28b43b96d54c578036e85c96d21861e4169ddc127ee29f6
(覆盖上批 region 的 2F51689B… —— 换 jar 认这一份)logs/_split-2026-10-09/jar-readback-batch.py,17/17 OK,直接从 jar 里读 class 常量池):
pickForOrder / ipRegionResolver / 用户 IP 无法解析出归属地 / 用户 IP 与省份编码至少填一个 / 该地区没有可用门店 / 省份编码不存在 均在场;DTO provinceCode、getIp 在场;cityCode 不在(已删)resolveBiz / har_ali_un_stage 在场;裸 HAR 常量不在(前缀已改 AP)notifyCount / lastNotifyTime / callbackMaxRetries / notifyEnterprise / transitioned 在场frontend/dist.zip:9,376,648 字节,mtime 2026-10-09 13:38:56,
sha256 4b87bb40d71df00401df5c78df246cf5b77b84d756d4bee6c7ccad76f491dcdftestzip 干净(dist-zip-verify-batch.py 打包并回读)/payment/openapi/alipay、/checkout/alipay/、用户 IP 无法解析出归属地、随机挑一家、首推只发一次、AP1234567890 各在场(各命中 1 个 chunk);openapi/har、没配就不会推送、HAR1234567890 零命中/checkout/har/ 在 1 个 chunk(index.DziFqCFC.js)命中 —— 那是 Vite 动态导入表里页面组件的目录名(views/checkout/har/index.vue,页面目录未改名),不是路由路径;路由已是 /checkout/alipay/:token(源码里 checkout/har 只作为 import 路径存在)。探针期望写错,不是代码错pnpm ts:check exit 2、289 条错误 —— 与基线(上批 logs/_tscheck-region-code-400.txt)逐文件分布 diff 为空:零新增、零消失(该基线本身就是非零,只能差分用)。
java/src/main/resources/db/har-callback-retry.sql —— 加 notify_count / last_notify_time 两列 + 部分索引 idx_har_order_callback_retry + 存量 FAILED 封顶 notify_count=8(「存量不补推」)。列不存在时回调状态会永远停在 PENDING,捞取腿每分钟报错db/har-shop-region.sql(地区批)、db/har-checkout-link.sql(收款链接批)db/har-order-refund-menu.sql、db/har-checkout-link.sql)只有注释文字改动(diff 逐行核过),不必因本批重跑har→alipay 后端(PATH_PREFIX,jar 里)与前端路由(dist 里)各执一份,单边换 ⇒ 新链接整页 404;开放接口新前缀在 jar 里、开放文档页在 dist 里,同理。
jar 指纹 8662237e…(143,152,531 字节)、dist.zip 指纹 4b87bb40…(9,376,648 字节),见上。/payment/openapi/alipay/** 走一单;旧前缀 404/不放行是有意的ip 或 province_code(city_code 误传应响亮 400);同一 out_biz_no 恒挑同一家notify_count 每分钟 +1、last_notify_time 更新、8 次封顶/#/checkout/alipay/<token>,打开能进顾客页pay_url 真机扫码仍未做过(老账,承接批)。buildUrl(token, request),库里不存 URL),token 不变;但已外发过的 /#/checkout/har/ 形链接换版后会打不开(老路由段没了)。该功能此前未部署过(其 SQL 是部署前置),线上应无此类链接在流通 —— 以你的部署记录为准。third_shop_id 重复仍回 500(老账,未动,地区批已记)。out_biz_no(已实现);调用方不传 out_biz_no 时等价于随机 —— 开放文档已写明