|
|
@@ -93,8 +93,8 @@ public class WeixinMPServiceImpl implements WeixinMPService {
|
|
|
// 更新用户的关注状态
|
|
|
mpRelationService.lambdaUpdate().set(MpRelation::getSubscribe, false).eq(MpRelation::getMpOpenid, mpOpenid).update();
|
|
|
break;
|
|
|
- case "scan":
|
|
|
- // 扫描二维码
|
|
|
+ case "SCAN":
|
|
|
+ // 扫描二维码(微信推送上来的事件是大写 SCAN)
|
|
|
log.info("收到微信公众号扫描二维码通知: {}", mpOpenid);
|
|
|
// 处理带场景值的扫码(扫码绑定/解绑故障通知)
|
|
|
handleSceneBinding(mpOpenid, ret, false);
|
|
|
@@ -188,9 +188,15 @@ public class WeixinMPServiceImpl implements WeixinMPService {
|
|
|
var result = faultSubscriberService.toggleSubscription(mpOpenid, stationId);
|
|
|
log.info("故障通知订阅操作: openid={}, stationId={}, result={}", mpOpenid, stationId, result);
|
|
|
|
|
|
- // 将操作结果放入返回的XML中,微信会将其作为文本消息推送给用户
|
|
|
+ // 构造被动文本回复:交换收发方,设置文本消息内容
|
|
|
+ var replyContent = result + "!\n站点:" + stationId + "\n" + ("绑定成功".equals(result) ? "您将收到该站点的设备故障提醒。" : "您将不再收到该站点的设备故障提醒。");
|
|
|
+ var fromUser = eventData.get("FromUserName"); // 用户openid,回复时要变成 ToUserName
|
|
|
+ var toUser = eventData.get("ToUserName"); // 公众号ID,回复时要变成 FromUserName
|
|
|
+ eventData.put("ToUserName", fromUser);
|
|
|
+ eventData.put("FromUserName", toUser);
|
|
|
+ eventData.put("CreateTime", String.valueOf(System.currentTimeMillis() / 1000));
|
|
|
eventData.put("MsgType", "text");
|
|
|
- eventData.put("Content", result + "!\n站点:" + stationId + "\n" + ("绑定成功".equals(result) ? "您将收到该站点的设备故障提醒。" : "您将不再收到该站点的设备故障提醒。"));
|
|
|
+ eventData.put("Content", replyContent);
|
|
|
} catch (Exception e) {
|
|
|
log.error("处理场景绑定异常: mpOpenid={}", mpOpenid, e);
|
|
|
}
|