上一篇已经接入公众平台,现在来说下消息回复
接入公众平台与消息处理区别:
接入公众平台 : method = RequestMethod.GET;
消息处理 : method = RequestMethod.POST
由上图,我们已经知道了 普通微信用户向公众账号发消息XML结构
1、XmlMessageEntity 实体类
java;html-script:false;quick-code:true;smart-tabs:true;auto-links:false;toolbar:true;gutter;true;light:false;ruler:false;pad-line-numbers:2;collapse:false;tab-size:4;first-line:1;
package com.wenxi.Entity;</p>
<p>import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;</p>
<p>@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class XmlMessageEntity {</p>
<pre><code>private String ToUserName;
private String FromUserName;
private Long CreateTime;
private String MsgType;
private String Content;
private String Event;
private Long MsgId;
public String getEvent() {
return Event;
}
public void setEvent(String event) {
Event = event;
}
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public Long getCreateTime() {
return CreateTime;
}
public void setCreateTime(Long createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
public Long getMsgId() {
return MsgId;
}
public void setMsgId(Long msgId) {
MsgId = msgId;
}
@Override
public String toString() {
return "XmlMessageEntity [ToUserName=" + ToUserName + ", FromUserName="
+ FromUserName + ", Event=" + Event + ", MsgType=" + MsgType
+ ", Content=" + Content + ", MsgId=" + MsgId + "]";
}
</code></pre>
<p>}</p>
<pre><code>
2、处理消息并返回
;html-script:false;quick-code:true;smart-tabs:true;auto-links:false;toolbar:true;gutter;true;light:false;ruler:false;pad-line-numbers:2;collapse:false;tab-size:4;first-line:1;
package com.wenxi.controller;
import com.wenxi.Entity.XmlMessageEntity;
import com.wenxi.utils.SecurityUtil;
import com.wenxi.utils.WeixinUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Arrays;
import java.util.Date;
@Controller
public class ValidateController {
@RequestMapping(value = "/weixinValidate",method = RequestMethod.GET)
@ResponseBody
public String weixinValidate(String signature, String timestamp, String nonce, String echostr ){
// 1)将token、timestamp、nonce三个参数进行字典序排序
String[] arrs = {WeixinUtil.TOKEN,timestamp,nonce}; //WeixinUtil.TOKEN: 抽取出来的TOKEN,为了重用
Arrays.sort(arrs);
// 2)将三个参数字符串拼接成一个字符串进行sha1加密
String str = arrs[0] + arrs[1] + arrs[2];
// 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if (signature.equals(SecurityUtil.SHA1(str))){
//确认此次GET请求来自微信服务器,返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败
return echostr;
}else
return null;
}
/**
* 自动回复信息
*/
@RequestMapping(value = "weixinValidate",method = RequestMethod.POST)
@ResponseBody
public XmlMessageEntity weixinValidate(@RequestBody XmlMessageEntity entity){
System.out.println(entity);
XmlMessageEntity returnMessageEntity = new XmlMessageEntity();
returnMessageEntity.setFromUserName(entity.getToUserName());
returnMessageEntity.setToUserName(entity.getFromUserName());
returnMessageEntity.setContent("谢谢大家关注!");
returnMessageEntity.setCreateTime(new Date().getTime());
returnMessageEntity.setMsgType("text");
return returnMessageEntity;
}
}
3、测试
一、关注公众号: 在你的测试账号页面,扫描图下的地方二维码,然后点击关注
控制台打印:
XmlMessageEntity [ToUserName=xxxxxa436, FromUserName=xxxxxxxxxlJdq9AY2E, Event=subscribe, MsgType=event, Content=null, MsgId=null]
这里ToUserName(开发者微信号)可以在测试页面顶部查看,如下图
FromUserName(微信用户OpenID)可以在 测试号二维码 中 用户列表找到
微信显示:
二、取消关注公众号
控制台打印:
XmlMessageEntity [ToUserName=xxxxxa436, FromUserName=xxxxxxxxxlJdq9AY2E, Event=unsubscribe, MsgType=event, Content=null, MsgId=null]
二者的区别: Event
unsubscribe: 取消关注公众号
subscribe: 关注公众号
三,在公众号发消息
由于程序还没对MsgType进行分类处理,所以都是回复谢谢大家关注(下篇再处理)
控制台打印:
XmlMessageEntity [ToUserName=xxxxxa436, FromUserName=xxxxxxxxxlJdq9AY2E, Event=null, MsgType=text, Content=测试一下, MsgId=6479560144755671793]
关注(取消) 与 普通消息发送区别:
Event: 关注(取消)为subscribe或者unsubscribe, 而普通消息发送为null;
MsgType: 关注(取消)为event, 而普通消息发送为text;
Content: 关注(取消)为null, 而普通消息发送为具体的消息;
MsgId: 关注(取消)为null, 而普通消息发送为具体的ID;
1、关于重试的消息排重,推荐使用msgid排重。
2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见”发送消息-被动回复消息”。Original: https://www.cnblogs.com/weiapro/p/7708115.html
Author: 天涯越野
Title: 2、自动回复消息
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607573/
转载文章受原作者版权保护。转载请注明原作者出处!