微信通知

简介: 本文介绍了企业微信消息通知的实现方式,包括前置条件(如appId、secret配置)、获取access_token的接口调用方法及发送消息的完整Java代码示例,涵盖异步处理、HTTP请求封装与用户信息解析等关键步骤,适用于系统集成与开发参考。

微信通知

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

运行代码复制代码

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<ExecutorService> synExecuteService = ThreadLocal.withInitial(() -> Executors.newFixedThreadPool(200));


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<WXQYUser> getWXQYUserList(JSONObject hResponse) {

List<JSONObject> wXQYUserList = (List<JSONObject>) hResponse.get("userlist");

List<JSONObject> nmList = null;

WXQYUser wxQYUser = null;

JSONObject mm = null;

List<WXQYUser> wxQYUserList = new ArrayList<WXQYUser>();

for (JSONObject jsObject : wXQYUserList) {

if (jsObject.containsKey("userid")) {

if (jsObject.containsKey("extattr")) {

mm = jsObject.getJSONObject("extattr");

if (null != mm.get("attrs")) {

nmList = (List<JSONObject>) 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;

}

}


相关文章
|
安全 数据安全/隐私保护
2022 年推荐免费在线接收短信平台(国内、国外)
现代社会中大多数人容易忘记密码,因此,为了方便,各大网站或者 APP 就相继出现以手机号码进行短信验证来注册和登录等操作。但此时,大多个人手机号码都已经是实名认证的,就非常怕存在个人信息泄露的情况。近几年网络平台用户数据泄露事件层出不穷,勿论一般平台,甚至一些全球知名企业也曾被曝出用户数据泄露问题,那基于此我们用户又能做点什么呢?
57784 0
2022 年推荐免费在线接收短信平台(国内、国外)
|
人工智能 并行计算 openCL
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
随着 Llama2 的开源,以及通义千问、百川、智谱等国内大模型的问世,很多用户有了本地部署去尝试大模型的需求,然而硬件的需求阻碍了很多人的尝试,并不是所有人都拥有一块英伟达显卡的,所以 Llama2 问世不久,大神 Andrej Karpathy 的一个 weekend project 爆火——llama2.c。
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
|
区块链 Android开发
区块链大众化的落地产品-深度体验蚂蚁区块链鹊凿数字版权服务平台
从18年至今,一直在思考区块链的真正有价值的大众落地是什么。 18年在个人有限的认知里得出的结论是: 围绕着空气币是没有太多的价值,只对于黑灰色产业有价值。 19年末关注到了,蚂蚁链的-鹊凿数字版权版权平台。 时至今日,经历一年半的时光,2021年,最近看到了淘宝商家服务的成交量激增,和蚂蚁与杭州互联网公证处的深度合作。确信在未来3-5年,这是一个很好的历史市场环境。
2308 1
区块链大众化的落地产品-深度体验蚂蚁区块链鹊凿数字版权服务平台
各个国家缩写域名后缀列表(全球)
不同的国家分属不同的国家后缀域名,例如中国的国家后缀域名为- .cn,云吞铺子分享全球各个国家的国家域名后缀表: 国家域名后缀列表 以下国家的域名,按照域名缩写的字母排序: A .ac 亚森松岛 .
32717 0
|
5月前
|
存储 缓存 调度
vLLM 吞吐量优化实战:10个KV-Cache调优方法让tokens/sec翻倍
十个经过实战检验的 vLLM KV-cache 优化方法 —— 量化、分块预填充、前缀重用、滑动窗口、ROPE 缩放、后端选择等等 —— 提升 tokens/sec。
1688 10
|
数据可视化 关系型数据库 MySQL
【MCP教程系列】上阿里云百炼,5分钟解锁数据分析与可视化能力
本文介绍如何在阿里云百炼平台通过自定义MCP部署MySQL服务,实现5分钟解锁数据分析与可视化能力。以碳排放数据库为例,详细讲解从创建公网访问的MySQL数据库、配置MCP服务到引入智能体进行数据分析的全流程。借助QuickChart等工具,可将复杂数据转化为直观图表,赋能业务决策。适合希望快速上手数据库分析的用户参考使用。
2034 0
|
11月前
|
人工智能 云计算
阿里云产品手册2025版发布
阿里云产品手册2025版发布,涵盖阿里云产品大图、面向 AI 的全栈云计算产品体系等最新内容,囊括了阿里云产品介绍、优势、功能、应用场景和发展历程的介绍。
1296 12
|
XML Java 数据安全/隐私保护
企业微信接收回调
企业微信接收回调
813 0
|
存储 弹性计算 固态存储
阿里云服务器租用价格参考,2核8G、4核16G、8核32G最新收费标准
阿里云服务器2核8G、4核16G、8核32G配置租用价格参考,2024年阿里云产品再一次降价,降价之后2核8G配置按量收费最低收费标准为0.3375元/小时,按月租用标准收费标准为136.0元/1个月。4核16G配置的阿里云服务器按量收费标准最低为0.675元/小时,按月租用标准收费标准为272.0元/1个月。8核32G配置的阿里云服务器按量收费标准最低为1.35元/小时,按月租用标准收费标准为544.0元/1个月。云服务器实例规格的地域和实例规格不同,收费标准不一样,下面是2024年阿里云服务器2核8G、4核16G、8核32G配置的最新租用收费标准。
阿里云服务器租用价格参考,2核8G、4核16G、8核32G最新收费标准

热门文章

最新文章