fix(WxLoginController): 修正 getOrderQRCodeUnlimited 接口 scene 参数逻辑

- 调整 scene 参数优先级为:显式 scene > 自定义页面使用原始 orderNo > 兼容原订单核销 scene=orderNo=xxx
- 当传入页面参数时,scene 直接使用原始 orderNo,满足小程序端 options.scene 读取需求
- page 参数无传入时默认设置为 package/admin/order-scan,保持兼容旧版订单核销页面
- 保证原有订单核销逻辑和接口调用行为向下兼容无影响
This commit is contained in:
2026-09-01 12:06:45 +08:00
parent f751d17771
commit c88b41fd46
2 changed files with 19 additions and 2 deletions
+7
View File
@@ -0,0 +1,7 @@
# 2026-09-01 工作记录
## 修复 getOrderQRCodeUnlimited scene 参数 bug
- 文件:`src/main/java/com/gxwebsoft/common/system/controller/WxLoginController.java`
- 问题:后台管理端调用 `/getOrderQRCodeUnlimited/e9?page=pages/event/detail/index` 时,因未传 `scene`,回退逻辑生成 `scene=orderNo=e9`,而 `pages/event/detail/index` 页面期望 `scene=e9`(直接读 options.scene)。
- 修复:scene 取值优先级改为 `显式 scene > 自定义页面用原始 orderNo > 兼容原订单核销(orderNo=xxx)`page 无参时默认 `package/admin/order-scan`
- 兼容性:原订单核销用法(不带参数)行为不变;自定义页面默认用原始 orderNo;需 `orderNo=` 格式可显式传 `?scene=orderNo=e9`
@@ -980,8 +980,18 @@ public class WxLoginController extends BaseController {
}
String apiUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + getAccessToken(loginUser.getTenantId());
final HashMap<String, Object> map = new HashMap<>();
// scene 优先用入参,否则回退兼容原订单核销逻辑:orderNo=xxx
map.put("scene", StrUtil.isNotBlank(scene) ? scene : "orderNo=".concat(orderNo));
// scene 优先级:显式 scene > 自定义页面用原始 orderNo > 兼容原订单核销(orderNo=xxx)
String sceneValue;
if (StrUtil.isNotBlank(scene)) {
sceneValue = scene;
} else if (StrUtil.isNotBlank(page)) {
// 自定义页面场景:小程序端通过 options.scene 直接读取业务值(如活动/订单号)
sceneValue = orderNo;
} else {
// 兼容原订单核销场景:scene=orderNo=xxx,默认跳转 package/admin/order-scan
sceneValue = "orderNo=".concat(orderNo);
}
map.put("scene", sceneValue);
// page 优先用入参,否则回退兼容原订单核销页面
map.put("page", StrUtil.isNotBlank(page) ? page : "package/admin/order-scan");
map.put("env_version", "trial");