微信通知

简介: 基于企业微信与小程序集成,通过API获取access_token并发送消息。需配置企业微信appId、secret及绑定小程序。示例使用Java异步调用HTTPS接口,构建消息内容并推送至指定用户,适用于订单提醒等场景,支持自定义字段与重复发送检查。

1.前置条件

企业微信appId

企业微信secret

企业微信绑定小程序

小程序的appId
2.发送示例
2.1 获取access_token(HTTPS-GET)

请求URL:
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=corpid&corpsecret=corpsecret

示例入参:
corpid=wx161we55e1fe5e4fr
corpsecret=Rspav9pmjem3zve8fkjqe6yTtCs78Rwdabn6tNdU1g

2.2 发送
完整代码示例(建议异步)
Java
运行代码
复制代码
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
private static final ThreadLocal synExecuteService = ThreadLocal.withInitial(() -> Executors.newFixedThreadPool(200));
"\"title\":\"新订单接诊提醒\",\"description\": \"" + descTime + "\",\"emphasis_first_item\":true," +
"\"content_item\":[{\"key\":\"接诊通知\",\"value\":\"来新咨询订单了\"},{\"key\":\"咨询人\",\"value\":\""+subTitle+"\"},{\"key\":\"病情描述\",\"value\":\""+content+"\"}]},\"enable_id_trans\":0," +
"\"enable_duplicate_check\":0,\"duplicate_check_interval\":1800}";

        logger.info("开始发送微信企业号消息,入参:" + jsonParam);
        // 微信企业号消息发送服务地址 http://ip:port/mp-api/wechat/enterprise/message/send
        String imsServiceDomainConfigStr = imSystemConfigService.getImSystemConfig(hospitalId, HUUtil.IMS_SERVICE_WECHAT_QYH_TEMPLATE_DOMAIN_CONFIG_KEY);
        if (null == imsServiceDomainConfigStr || "".equals(imsServiceDomainConfigStr)) {
            logger.info("IMS发送微信企业号消息服务地址配置信息不存在:" + hospitalId);
            return;
        }

        imsServiceDomainConfigStr = imsServiceDomainConfigStr + "?access_token=" + accessToken.getToken();
        String result = HUHttpUtil.sendJsonPostRequest(imsServiceDomainConfigStr, jsonParam, 0);
        logger.info("开始发送微信企业号消息,结果:" + result);
    } else {
        logger.info("该医生" + doctorNo + "在企业号通讯录中不存在,终止发送企业号消息");
    }
});

}

/**

 * 发送GET请求
 *
 * @param requestUrl
 * @param requestMethod
 * @param outputStr
 * @return
 */

public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
logger.info("[WeixinUtil.httpRequest]:请求入参:" + requestUrl);
String respStr = HUHttpUtil.sendGet(requestUrl, null);
logger.info("[WeixinUtil.httpRequest]:请求响应:" + respStr);
try {
return JSON.parseObject(respStr);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

private List getWXQYUserList(JSONObject hResponse) {
List wXQYUserList = (List) hResponse.get("userlist");
List nmList = null;
WXQYUser wxQYUser = null;
JSONObject mm = null;
List wxQYUserList = new ArrayList();
for (JSONObject jsObject : wXQYUserList) {
if (jsObject.containsKey("userid")) {
if (jsObject.containsKey("extattr")) {
mm = jsObject.getJSONObject("extattr");
if (null != mm.get("attrs")) {
nmList = (List) mm.get("attrs");
for (JSONObject nmObject : nmList) {
if (nmObject.containsKey("name") && "hisid".equals(nmObject.getString("name"))
&& null != nmObject.getString("value") && !"".equals(nmObject.getString("value"))) {
wxQYUser = new WXQYUser();
wxQYUser.setUserid(jsObject.getString("userid"));
wxQYUser.setName(jsObject.getString("name"));
wxQYUser.setMobile(jsObject.getString("mobile"));
wxQYUser.setHisid(nmObject.getString("value"));
wxQYUserList.add(wxQYUser);
}
}
}
}
}
}
return wxQYUserList;
}

// 企业微信存储12345,数据库存储:医院ID+12345,随意这里做截取再去匹配
private String getDoctorNo(String doctorNo) {
if (doctorNo.startsWith("10000")) {
return doctorNo.substring(5, doctorNo.length());
}
if (doctorNo.startsWith("10001")) {
return doctorNo.substring(5, doctorNo.length());
}

return doctorNo;

}
Java
运行代码
复制代码
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
class WXQYUser {

private String userid;

private String name;

private String mobile;

private String hisid;

public String getUserid() {
    return userid;
}

public void setUserid(String userid) {
    this.userid = userid;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getMobile() {
    return mobile;
}

public void setMobile(String mobile) {
    this.mobile = mobile;
}

public String getHisid() {
    return hisid;
}

public void setHisid(String hisid) {
    this.hisid = hisid;
}

}

目录
相关文章
|
2月前
|
存储 JSON 数据格式
云文档环境搭建
本方案基于Nextcloud与OnlyOffice搭建私有云文档系统。通过Docker部署Nextcloud 29.0.3和OnlyOffice DocumentServer 8.1.0,实现文档在线编辑与协作。配置时需安装OnlyOffice插件,生成并填入密钥完成服务对接。用户可上传、分享文件并实时协同编辑,支持Excel等格式。新用户默认文件可通过清空skeleton目录取消。系统访问地址:Nextcloud为http://192.168.xxx.xxx:9081/,OnlyOffice为http://192.168.xxx.xxx:9080/。
117 0
|
6月前
|
机器学习/深度学习 数据采集 人工智能
阿里开源即封神,一上线就斩获4000+ star背后的真相,WebAgent多步骤智能网搜神器,颠覆你对AI的信息检索印象!
WebAgent 是阿里巴巴开源的多步骤智能网搜神器,包含 WebWalker、WebDancer、WebSailor 等模块,支持复杂推理与长上下文信息检索,GitHub 已获 4.7k star,颠覆传统 AI 搜索方式。
830 1
|
12月前
|
人工智能 供应链 搜索推荐
如何降低酒店运营成本?管理者不可不知的优化策略
在竞争激烈的酒店行业,提升管理效率、优化服务质量和客户满意度至关重要。本文探讨如何通过精准市场定位、高效运营管理、智能化管理系统及数字化工具,实现精细化管理,提供个性化服务,有效处理客户反馈,以提升酒店竞争力和客户体验。未来,智能化与个性化将成为行业发展的重要趋势。
734 21
|
监控 算法 定位技术
GTS自动补偿机制的工作原理
【8月更文挑战第25天】
387 4
|
数据采集 安全 数据管理
通信行业数据治理:如何实现高效、安全的数据管理?
在未来的发展中,通信行业的企业应加强数据治理意识,提高数据治理能力;同时,积极开展跨行业的合作创新,共同推动行业的繁荣与发展。相信在不久的将来,通信行业将迎来更加美好的明天。
|
存储 缓存 数据库
SqlAlchemy 2.0 中文文档(四十四)(5)
SqlAlchemy 2.0 中文文档(四十四)
360 4
|
Web App开发 应用服务中间件 网络安全
HTTPS证书到期更换
HTTPS证书到期更换
3624 0
CentOS 系统常用命令详解
本文介绍了CentOS中11个常用的命令,包括`ls`(列出文件和目录)、`cd`(切换目录)、`pwd`(显示当前目录)、`mkdir`(创建目录)、`rm`(删除文件或目录)、`cp`(复制文件或目录)、`mv`(移动或重命名文件)、`cat`(查看文件内容)、`grep`(搜索文件内容)和`top`(显示系统进程信息)。此外,还提到了包管理器`yum`用于安装、升级和移除软件包。熟悉这些命令能提升在CentOS系统中的管理效率。
|
JavaScript Java 测试技术
基于springboot+vue.js的企业信息管理系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的企业信息管理系统附带文章和源代码设计说明文档ppt
202 0
|
机器学习/深度学习 编解码 算法
【图像重建】基于OMP,CoSaMP,IHT,IRLS,GBP,SP和ROMP实现图像感知重建附matlab代码
【图像重建】基于OMP,CoSaMP,IHT,IRLS,GBP,SP和ROMP实现图像感知重建附matlab代码