release: V3.2.9 发版本 - #108
Merged
Merged
Conversation
在「SDK 资源」之后补一节「AI 接入助手」,列出独立的 jeepay-skills 仓库(https://github.com/jeequan/jeepay-skills)。让用 Claude / Cursor / ChatGPT 等 AI 工具接入 Jeepay 的开发者能从 Jeepay 主仓库 README 一步 找到配套的接入助手;不用 AI 的开发者也可以直接把它当结构化的接入 指南文档浏览。
docs(readme): 增加 AI 接入助手段,引导到 jeepay-skills 仓库
V3.2.8 tag 未同步到 gitee 时,git clone --branch V3.2.8 失败,脚本继续 执行到 [3] 才以 'cd: /jeepayhomes/sources/jeepay/docs/install: No such file or directory' / '复制 MySQL 配置 my.cnf' 爆错,误导用户以为是 MySQL 步骤问题。补上 require_ok 后 clone 失败立刻退出并打印明确原因与规避 方式(jeepayRef=master 覆盖)。
默认 isys.mq.vender 已是 rocketMQ,但 conf 下 4 份 application.yml
里 spring.activemq.* 仍保持启用状态。由于 activemq starter 是
compile scope,Spring Boot 会真去解析这段配置并起 ConnectionFactory
连接默认的 activemq5:61616 / 127.0.0.1:61616,failover 协议会一直
后台重连,产生噪音和资源占用,也容易让阅读者误以为系统在用 activeMQ。
按已有 rabbitmq / rocketmq(spring 段) 注释惯例,把这段也注释掉,
并在标题注里说明:默认走 rocketMQ,如需切回 activeMQ 请同步改
isys.mq.vender。涉及文件:conf/{payment,manager,merchant,devCommons/config}/application.yml。
refs #105
fix: install git clone 失败硬退出 + 默认 MQ 切 rocketMQ 后清理 spring.activemq
修复 #81(感谢 @xiaowuDev 提交的 PR 描述定位到这两处问题)。 1) 授权回调 state 参数解析鲁棒性 - 原 AlipayBizController.redirectAppToAppAuth / appToAppAuthCallback 直接 split("_")[0]/[1],没做长度、空值、空串校验,异常或被构造的 state 会触发 ArrayIndexOutOfBoundsException / 空指针,回调链路出现 500。 - 抽出 AlipayKit.parseIsvAndMchAppIdState(String) 工具方法:用 indexOf 而非 split(避免 mchAppId 内部含 "_" 时被切碎),任一段为空都返回 null。 - 两个回调入口改用工具方法 + null 校验 + mchAppService.getById 结果空校验, 抛出 BizException 由现有异常处理统一展示给用户。 - 顺手清理 redirectAppToAppAuth 里两行无效代码(getSandbox() 返回值未使用、 isvNo 局部变量从未读取)。 2) 异步通知业务字段交叉校验 - 原 AlipayChannelNoticeService.doNotice 验签通过后直接信任 jsonParams, 仅取了 trade_no / buyer_id / trade_status 来设置 ChannelRetMsg。 验签通过仅证明请求来自支付宝并由本商户密钥签名,不保证回调内容就是 这笔本地订单。多商户配置切换 / 跨订单签名穿越 / 沙箱与生产串扰 等场景下,仍可能出现 out_trade_no / 金额 / app_id 与本地订单上下文 不一致的回调,按现有逻辑会把这笔"看似合法"的回调直接当成功来回写订单。 - 在验签通过后、设置 ChannelRetMsg 前补一道校验: out_trade_no 必须等于 payOrder.payOrderId、 app_id 必须等于商户配置里的 appId、 total_amount(元)必须等于本地金额(分→元,用 BigDecimal compareTo 比对避免 scale 差异)。 - 任一字段不一致:记 ERROR 日志(带具体不匹配的字段与双方值,便于排查)+ 返回 SUCCESS 给支付宝阻断重试 8 次浪费资源 + 不更新订单状态。 - ChannelState 用 UNKNOWN 而非 CONFIRM_FAIL,避免被下游误判为"已确认失败" 从而触发退款补偿逻辑。
fix(alipay): 加固授权回调 state 解析 + 异步通知补业务字段交叉校验
- version.md:v3.2.8_20260422 → v3.2.9_20260527 - docs/install/install.sh / config.sh:jeepayRef 默认值跟进到 V3.2.9 - upgrade.md:新增 V3.2.9 段,说明本版本主要内容: * 支付宝授权回调 state 解析鲁棒性 * 支付宝异步通知补业务字段交叉校验 * install.sh git clone 失败硬退出 * conf/* 里 spring.activemq 段统一注释掉 * README 加 AI 接入助手段
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
版本主题
安全 / 健壮性补丁版本:支付宝渠道安全加固 + install 脚本健壮性 + 默认 MQ 切到 rocketMQ 后清理 spring.activemq + 增加 AI 接入助手引导。
本次包含
按已在 dev 合并的 PR:
加本 release 提交:
v3.2.8_20260422→v3.2.9_20260527docs/install/install.sh/config.sh的jeepayRef默认值跟进到V3.2.9upgrade.md新增 V3.2.9 段说明本版本兼容性
jeepay-payment镜像Release notes(用于 GitHub Release 文案)
详见 upgrade.md V3.2.9 段。