当我们利用服务器和代码成为高级开发之后,微信公众平台编辑好的当用户关注时发送给用户的语句就会失效,此时应该怎么办,接下来,用代码来来教你实现。首先先看一下官方的开发文档:
关注/取消关注事件
用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。为保护用户数据隐私,开发者收到用户取消关注事件时需要删除该用户的所有信息。
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。
关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。
假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。
推送XML数据包示例:
<xml><ToUserName>< ![CDATA[toUser] ]></ToUserName><FromUserName>< ![CDATA[FromUser] ]></FromUserName><CreateTime>123456789</CreateTime><MsgType>< ![CDATA[event] ]></MsgType><Event>< ![CDATA[subscribe] ]></Event></xml>
参数说明:
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,subscribe(订阅)、unsubscribe(取消订阅) |
根据开发文档书写代码如何:
1.先创建实体类:
public class TextMessage {
private String ToUserName;
private String FromUserName;
private Long CreateTime;
private String MsgType;
private String Content;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
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;
}
}
2.检验类型:
public class MessageImpl {
public String messgage(Map<String,String> requestMap){
String textMsgXml = "";
if (requestMap.size()>0) {
String fromUserName = requestMap.get("FromUserName");
// 公众帐号
String toUserName = requestMap.get("ToUserName");
// 消息类型
String msgType = requestMap.get("MsgType");
String eventKey = requestMap.get("EventKey");
String event = requestMap.get("Event");
3 if (event.equals("subscribe")) {
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(fromUserName);
textMessage.setFromUserName(toUserName);
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType("text");
textMessage.setContent("你好");
XStream xStream = new XStream();
xStream.alias("xml", textMessage.getClass());
textMsgXml = xStream.toXML(textMessage);
}
}
return textMsgXml;
}
}
3.获取微信服务器发来的信息:
@RequestMapping(value = "/signature")
@ResponseBody
public String xmlToMap(HttpServletRequest request,@RequestParam String signature, @RequestParam String timestamp,
@RequestParam String nonce) {
Map<String, String> map = new HashMap<String, String>();
try {
SAXReader reader = new SAXReader();
InputStream ins = null;
try {
ins = request.getInputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
Document doc = null;
try {
doc = reader.read(ins);
} catch (DocumentException e1) {
e1.printStackTrace();
}
Element root = doc.getRootElement();
@SuppressWarnings("unchecked")
List<Element> list = root.elements();
for (Element e : list) {
map.put(e.getName(), e.getText());
}
try {
ins.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}catch (Exception e){
PlatformLogger.error("错误信息",e);
}
return messageImpl.messgage(map);
}
这样有人关注的时候你可以自定义发送的语句了