liusheng
2026-10-10 0afac42fb2e9d6e5291304dd0044ce3042b45d2b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.ruoyi.message.wechat.provider.hzszlyy;
 
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.message.MessageChannel;
import com.ruoyi.message.SendResult;
import com.ruoyi.message.wechat.WechatSendRequest;
import com.ruoyi.message.wechat.WechatSender;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
 
import java.util.Map;
 
/**
 * 杭州市一微信公众号发送方({@code hzszlyy} 通道)。
 * <p>
 * 对接特征:市一自有网关,返回 JSON 的 {@code success == 1} 为成功。
 * 代码来源:{@code RyTask.hzszlyy 公众号分支} + {@code RedisMqReceiver.hzszlyy 分支} +
 * {@code SmsController./sms/sendChat}(行为保持不变)。
 * <p>
 * 注意:市一公众号<b>不做机构配置校验</b>(原代码注释「市一医院 不校验」),
 * 调用方需保留该差异,不要套用新华那套 {@code wxqqxx} 校验。
 */
@Slf4j
@Component
public class ShiyiMpSender implements WechatSender {
 
    /**
     * 渠道 key,微信公众号通道下与短信通道同名({@code hzszlyy}),由各自的工厂区分
     */
    public static final String KEY = "hzszlyy";
 
    private final ShiyiMpApi shiyiMpApi;
 
    public ShiyiMpSender(ShiyiMpApi shiyiMpApi) {
        this.shiyiMpApi = shiyiMpApi;
    }
 
    @Override
    public String key() {
        return KEY;
    }
 
    @Override
    public String description() {
        return "杭州市一微信公众号(success==1 判定)";
    }
 
    @Override
    public SendResult send(WechatSendRequest request) {
        if (request == null || request.getPhone() == null || request.getPhone().trim().isEmpty()) {
            return SendResult.fail(KEY, MessageChannel.WECHAT, "手机号为空", null);
        }
        try {
            String raw = shiyiMpApi.sendMessage(request.getUrl(), request.getPhone(), request.getIdCard());
            Map map = JSONObject.parseObject(raw, Map.class);
            Boolean success = false;
            if (map != null && !map.isEmpty() && map.get("success") != null) {
                Integer value = (Integer) map.get("success");
                success = value != null && value == 1;
            }
            if (success) {
                return SendResult.success(KEY, MessageChannel.WECHAT, raw);
            }
            Object msg = map == null ? null : map.get("msg");
            return SendResult.fail(KEY, MessageChannel.WECHAT,
                    msg == null ? "【公众号】公众号发送失败" : msg.toString(), raw);
        } catch (Exception e) {
            log.error("【{}】市一公众号发送失败:{}", KEY, e.getMessage(), e);
            return SendResult.fail(KEY, MessageChannel.WECHAT, "【公众号】公众号发送失败", null);
        }
    }
}