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} 通道)。 *

* 对接特征:市一自有网关,返回 JSON 的 {@code success == 1} 为成功。 * 代码来源:{@code RyTask.hzszlyy 公众号分支} + {@code RedisMqReceiver.hzszlyy 分支} + * {@code SmsController./sms/sendChat}(行为保持不变)。 *

* 注意:市一公众号不做机构配置校验(原代码注释「市一医院 不校验」), * 调用方需保留该差异,不要套用新华那套 {@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); } } }