wechat-0022,微信公众号,接收事件推送

demo:https://github.com/wenrongyao/wechat-demo

摘要:在0020中,我们已经可以接收用户发送的文本消息,并回复文本消息了,对于公众号还有另一类交互方式就是事件推送,比如关注,取消关注,扫码等(详见:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454),这篇帖子以关注事件为例,简要说明一下事件的处理。

1、依据公众号开发者文档,扫码关注事件推送信息为。

可以msgType为event,Event为subscribe即为关注

2、EntryController增加关注事件处理

关于获取微信服务器向我服务器推送数据的解析参考:https://blog.youkuaiyun.com/wrongyao/article/details/80229407

try {
            if (StringUtils.isEmpty(msgType)) {
                // 创建加密类
                WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(Constant.WechatAccount.TOKEN, Constant.WechatAccount.ENCODINGAESKEY, Constant.WechatAccount.APPID);
                // 比对msgSignature 用token, timeStamp, nonce加密的参数是否一致,一致证明该接口来自微信,异常则不是来自微信
                result = wxcpt.verifyUrl_WXGZ(msgSignature, Constant.WechatAccount.TOKEN, timeStamp, nonce, echoStr);
            } else {
                if (msgType.equals(Constant.MsgType.TEXT)) {
                    result = msgService.returnText(map);
                } else if (msgType.equals(Constant.MsgType.EVENT)) { //事件处理
                    String event = map.get("Event");
                    if (event.equals(Constant.Event.SUBSCRIBE)) { // 关注公众号
                        result = msgService.returnText(map, message.getSubscribe());
                    }
                }
            }

这边关注以后回复欢迎语,直接接上文回复文本信息。

3、结果

 

 

### 微信公众号实现消息订阅推送功能 #### 依赖库引入 为了能够顺利地调用微信接口,项目中需要引入相应的SDK。对于Maven项目来说,在`pom.xml`文件里加入如下依赖可以方便地完成这一操作[^2]。 ```xml <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>4.0.0</version> </dependency> ``` #### 获取AccessToken 微信公众平台API请求大多都需要带上accessToken参数作为身份验证凭证。可以通过官方提供的接口获取该令牌,并将其缓存起来以便后续使用。下面是一段用于获取access_token的方法示例: ```java public String getAccessToken(String appId, String appSecret){ // 构建URL并发起HTTP GET请求 String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret; ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); // 解析返回JSON字符串中的access_token字段值 JSONObject jsonObject = JSON.parseObject(responseEntity.getBody()); return jsonObject.getString("access_token"); } ``` #### 发送订阅消息 当获得了有效的accessToken之后就可以构建要发送的内容体并向指定用户发送订阅消息了。这里需要注意的是,实际开发过程中应该把模板ID等固定不变的信息提取出来做成常量管理;而像接收者Openid这种动态变化的数据则应当从数据库或其他存储介质读取传入到此函数内部处理。以下是简化版的发送逻辑展示: ```java public void sendSubscribeMessage(String accessToken, String toUser, Map<String,Object> dataMap,String templateId){ WxMpService wxService = new WxMpServiceImpl(); ((WxMpServiceImpl)wxService).setToken(accessToken); WxMpTemplateMsg.WxMpTemplateData templateData = new WxMpTemplateMsg.WxMpTemplateData(); for (String key : dataMap.keySet()) { Object value = dataMap.get(key); templateData.addData(new WxMpTemplateData(key,value.toString())); } WxMpTemplateMsg msg = WxMpTemplateMsg.builder() .toUser(toUser) .templateId(templateId) .data(templateData) .build(); try{ boolean result = wxService.getTemplateMsgService().sendTemplateMsg(msg); System.out.println(result ? "成功":"失败"); }catch(WxErrorException e){ log.error(e.getError().getErrorMsg(),e); } } ``` 以上就是关于如何利用Java语言来实现在已有系统内集成微信公众号的消息订阅推送服务的大致流程介绍。当然这只是一个非常基础的功能框架搭建指南,具体业务场景下可能还需要考虑更多细节问题比如错误重试机制设计、并发控制策略制定等等。
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值