易宝支付回调和满减活动计算代码存在多处严重缺陷:验签逻辑反转、双 @RequestBody 致回调失效、验签密钥硬编码、限购功能被注释失效、积分用 double 违反整数约定、满减档位未排序导致匹配错误等。这些问题直接威胁资金安全、计算准确性与功能正确性,违反项目"代码严谨规范、高可用、计算准确"的工程约定。
PayUtil.isSgin 方法在签名匹配时返回 false、不匹配时返回 true,逻辑完全反转@RequestBody 致回调 NPE:PayScrmController.ybPayNotify 和 YbPayController.payNotify 使用两个 @RequestBody,第二个参数恒为 null 导致 NPEPayScrmController.ybPayNotify 改用从 DB 配置读取密钥,不再使用硬编码 PayConfig.KeyTestYb.java 硬编码敏感信息:删除生产源码目录中的硬编码商户号、Token、身份证号params.get("sign")、order[] 访问增加校验SUCCESS,失败统一返回 FAIL,不再大小写混用YbPayController.payNotify 验签失败改返回字符串:不再抛异常导致易宝重试resolveDisabledReason 中限购判断的注释,并修改 countEffectiveByActivityAndUser 将待支付(status=0)也计入限购统计applyPromotionFields 增加 skip 判断,与 computedOrder 一致saveTiers 按 thresholdAmount 排序后再设置 sortOrderfs_store_promotion_usage 表增加 (order_id, activity_id) 唯一索引校验enableActivity 并发竞态:改用数据库唯一约束或 SELECT FOR UPDATE 防止并发启用冲突fs-service/.../ybPay/util/PayUtil.java(验签逻辑修复)fs-service/.../pay/pay/util/PayUtil.java(验签逻辑修复)fs-user-app/.../store/PayScrmController.java(双 @RequestBody 修复、密钥来源统一、null 校验)fs-user-app/.../YbPayController.java(双 @RequestBody 修复、验签失败不抛异常、System.out 替换)fs-admin/.../hisStore/TestYb.java(删除或迁移硬编码敏感信息)fs-service/.../hisStore/service/impl/FsStorePromotionComputeServiceImpl.java(限购恢复、usage 幂等)fs-service/.../hisStore/service/impl/FsStorePromotionServiceImpl.java(saveTiers 排序、enableActivity 并发)fs-service/.../hisStore/service/impl/FsStoreOrderScrmServiceImpl.java(applyPromotionFields skip 判断)fs-service/.../hisStore/support/FsStorePromotionTierCalculator.java(档位匹配防御性排序)fs-service/.../resources/mapper/hisStore/FsStorePromotionUsageMapper.xml(限购统计含待支付)系统 SHALL 正确实现易宝支付回调的验签逻辑,验签通过返回 true,验签失败返回 false。
系统 SHALL 使用单一 @RequestBody 接收回调请求体,确保参数正确绑定。
系统 SHALL 正确执行满减活动的限购次数校验,待支付订单也计入已参与次数。
limitPerUser 上限系统 SHALL 按 thresholdAmount 升序排列满减档位后再匹配,确保返回正确的优惠档位。
所有易宝支付回调方法 SHALL 统一返回值:处理成功返回 SUCCESS,处理失败返回 FAIL,不再大小写混用。
SUCCESS(全大写)FAIL(全大写),让易宝平台重试制单改价场景下,applyPromotionFields SHALL 跳过满减计算,与 computedOrder 的 skipPromotion 逻辑保持一致。
applyPromotionFieldspromotionDiscountAmount 保持试算时的值或为 0Reason: 生产源码目录中硬编码真实商户号、Token、身份证号,存在泄露风险
Migration: 将测试代码移至 src/test/java 或直接删除,敏感参数从配置文件或环境变量读取