mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-10 23:01:58 +08:00
fix(gateway): DIRECT 模式支付项 needOpenId 用 capability 兜底判定
DIRECT 模式下支付项 method 被强制清空(见 GatewayCashierConfigService#normalizeAndValidate), 导致 toPublicResult 计算 needOpenId 时传入 null, PayMethodOpenIdSupport.needsOpenId 直接返回 false。 前端因此不触发 OAuth 跳转, openId 缺失, 后端通道层校验时报 channel.error.wechatOpenIdRequired。 capability 与 PayMethodEnum 同码(如 wechat_jsapi/alipay_jsapi/wechat_mini), 用 StrUtil.blankToDefault 以 capability 兜底, JSAPI/MINI 类支付项可正确触发前端 OAuth 闭环。
This commit is contained in:
@@ -188,6 +188,10 @@ public class CashierPayService {
|
||||
}
|
||||
|
||||
private CashierItemPublicResult toPublicResult(GatewayCashierItem item, ClientEnvEnum clientEnv) {
|
||||
// DIRECT 模式下 method 被强制清空(见 GatewayCashierConfigService#normalizeAndValidate),
|
||||
// 此时用 capability 兜底判断 needOpenId; capability 与 PayMethodEnum 同码(如 wechat_jsapi),
|
||||
// 可直接喂给 PayMethodOpenIdSupport.needsOpenId 判定 JSAPI/MINI 类需求
|
||||
String methodOrCapability = StrUtil.blankToDefault(item.getMethod(), item.getCapability());
|
||||
return new CashierItemPublicResult()
|
||||
.setId(item.getId())
|
||||
.setName(item.getName())
|
||||
@@ -195,7 +199,7 @@ public class CashierPayService {
|
||||
.setRecommend(item.getRecommend())
|
||||
.setSortNo(item.getSortNo())
|
||||
// openId 触发判定: JSAPI/MINI 业务必需, 或存在 openId 黑名单且环境可 OAuth
|
||||
.setNeedOpenId(this.resolveItemNeedOpenId(item.getMethod(), clientEnv));
|
||||
.setNeedOpenId(this.resolveItemNeedOpenId(methodOrCapability, clientEnv));
|
||||
}
|
||||
|
||||
/// openId 触发判定(与聚合/码牌同源逻辑)
|
||||
|
||||
Reference in New Issue
Block a user