微信通知

简介: cacsasvava

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<ExecutorService> 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<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;

}

}

相关文章
|
4天前
|
缓存 监控 调度
阿里云 CDN 计费体系全解析:基础服务、增值服务与选型指南
在内容分发网络(CDN)领域,阿里云凭借全球节点覆盖与灵活的计费模式,成为个人开发者与企业用户的重要选择。其 CDN 服务计费分为基础服务与增值服务两部分,基础服务提供按流量计费、按带宽峰值计费、月结 95 带宽峰值计费三种核心模式,增值服务则根据功能使用情况单独计费。本文基于 今年最新官方文档与实测数据,从计费规则、价格详情、场景适配、成本优化等维度展开解析,为用户提供客观选型参考。
|
JavaScript Shell API
FastAPI是什么?
FastAPI是一个现代、高性能的Python Web框架,专为构建API设计。它利用标准的Python类型提示,支持同步及异步编程,并借助Pydantic实现数据验证。FastAPI以卓越的性能媲美Node.js和Go,代码简洁优雅,能自动生成交互式API文档如Swagger UI和ReDoc,方便测试和调试。其对`async`和`await`的支持使之适用于WebSocket等高并发场景。快速上手仅需安装FastAPI和Uvicorn,编写少量代码即可启动服务并访问自动生成的文档界面。FastAPI不仅易于入门,还支持复杂的功能如依赖注入和后台任务,非常适合追求高性能和快速开发的项目。
801 1
|
存储 算法 搜索推荐
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
|
算法 数据可视化 定位技术
【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏1(附项目源码)
【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏1(附项目源码)
441 0
|
存储 编解码 人工智能
中科星图——Sentinel-2_MSI_L2A数据集
中科星图——Sentinel-2_MSI_L2A数据集
560 1
|
人工智能 前端开发 JavaScript
对程序员有用的AI角色扮演脚本
对程序员有用的AI角色扮演脚本
329 1
|
Linux 数据安全/隐私保护 iOS开发
通过内网穿透远程控制家中Home Assistant智能家居系统
通过内网穿透远程控制家中Home Assistant智能家居系统
874 0
R 问题|如何合并图形并共享同一个图例?
R 问题|如何合并图形并共享同一个图例?
794 0
|
算法
frame_size (1536) was not respected for a non-last frame
frame_size (1536) was not respected for a non-last frame
294 0
frame_size (1536) was not respected for a non-last frame
|
网络安全 开发工具 数据安全/隐私保护
GitHub不再支持密码验证解决方案:SSH免密与Token登录配置
今天提交代码,push到GitHub上,突然出现这个问题。 remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: unable to acce