前言
在进行微信公众号开发中,有时我们需要获取粉丝的openid,以此完成一些业务的处理,例如:向指定用户推送模板消息,那么怎么获取用户的openid呢?实际上,当用户关注公众号后即可获取openid。
一.前置条件
首先,需要在微信公众平台进行服务器配置,配置完成后,用户与公众号的所有交互都会发送到用户填写的URL上。关于服务器配置可参考我的另一篇文章:Spring Boot微信公众号配置案例。
二.编写业务处理接口
前面已经提到,用户与公众号的所有交互事件都会发送用户配置的URL上,而这个URL一旦配置后就不能再修改(也可以修改,但是要重新验证token),所以,我们要用同一个URL处理多种业务(包括验证token和用户与公众号交互处理),也就是用同一个接口处理多种业务。
例如我配置的URL后缀是“/checkToken”,那么处理用户关注取关的接口名称也必须是checkToken,返回值类型为String类型,业务处理代码如下表2.1所示。
表2.1 用户与公众号交互事件处理代码
@ApiOperation("用户与公众号交互事件处理")
@RequestMapping("/checkToken")
public String checkToken(HttpServletRequest request,HttpServletResponse response)
log.info("用户与公众号交互事件处理");
try{
Map<String ,String > requestMap = WxMessageUtil.parseXml(request);
String messageType = requestMap.get("MsgType");
String eventType = requestMap.get("Event");
String openid = requestMap.get("FromUserName");
if(messageType.equals("event")){
//判断消息类型是否是事件消息类型
log.info("公众号====>事件消息");
log.info("openid:" + openid);
log.info("Event:" + eventType);
if(eventType.equals("subscribe")){
log.info("公众号====>新用户关注");
}else if(eventType.equals("unsubscribe")){
log.info("公众号====>用户取消关注");
}else{
log.info("公众号===>其他");
}
}
}catch (Exception e){
e.printStackTrace();
}
return "";
}
三.测试
关注公众号后,服务器将打印业务处理日志,如图3.1所示。
图3.1 业务处理日志截图
四.总结
用户关注公众号获取用户openid的业务还是比较简单的。实际上,对于公众号而言,这个openid参数名是FromUserName的,但是,习惯上我们还是称之为openid。
五.项目源码地址
项目源代码本人已上传至本人github上,感兴趣的小伙伴可以去下载。
https://github.com/LongYil/wxutils/