最近,对微信公众号有点兴趣,就自己研究了研究里面的一些内容,发现还挺有意思的,而且通过微信公众号可以调用一些比较有意思的接口,就比如百度开发服务平台 点击进入 里面的很有接口,就比较常见的翻译,语音识别,地理位置等等,都挺好的。好了,不多说,进入正题好了。
我想,做微信公众号开发的,对于想获取关注了公众号的用户信息,或者说是当前与后台服务器进行交互的当前用户信息,这个功能是很重要的吧。因为,通过这个,可以直接获取到当前的用户信息,而不需要,每次都是进行自己输入信息,这个只会让用户感觉到很不适。。。所以,为了解决这个需求,那咱们来研究研究,如何获取微信的个人信息~!
大家可以关注我的微信公众号:Java菜鸟进阶之路。便于日常阅读哦!
目录
(一)思路
(二)情况一:通过用户与服务器进行消息交互,来获取用户信息
(三)情况二:通过点击按钮,来直接获取到用户信息
Github仓库地址:
彩蛋:
(一)思路
我们来研究一下,要想获取到个人信息,是如何一个流程呢?
路线图:
上面,画了一个简单的一个流程图,我想,看着这个应该觉得不难吧。是的,确实思路很简单,但是,,里面的坑也不少。接下来,我对两种情况都进行讲解。
(二)情况一:通过用户与服务器进行消息交互,来获取用户信息
思路:针对这种情况的话,比较简单,因为,我们在做用户与服务器进行消息交互的时候,我们可以知道,用户发送的内容是以XML的形式进行发送的,然后服务器,首先接受到XML,然后再把XML转为Map对象,再从Map对象中获取对应的内容即可。那么,发送的XML的字段是个怎么样呢?
字段信息:
ToUserName:发送给谁的ID
FromUserName:发消息方的ID(其实也就是用户的OpenId)
CreateTime:消息发送时间,时间戳
MsgType:消息类似,有文本,图片,音频,视频,事件推送等
Content:发送的内容
通过这个,我想大家,再结合上面给的流程图,是不是发现了什么呢?是的,这个OpenId,我们已经获取了呀,那是不是可以直接获取到用户信息了呢?。。。。emmmmmm,这样说吧。差不多是可以的,那具体是怎么做呢?紧接着往下看,仔细看我其中的注释
步骤:
1:解析发送过来的XML信息格式,将其转为Map格式
/*** XML格式转为map格式* @param request* @return*/public static Map<String , String> xmlToMap(HttpServletRequest request){Map<String ,String> map = new HashMap<String , String>();try {InputStream inputStream =null;inputStream = request.getInputStream();SAXReader reader = new SAXReader();Document doc = reader.read(inputStream);Element rootElement = doc.getRootElement();List<Element> elements = rootElement.elements();for (Element el:elements) {map.put(el.getName() , el.getText());}inputStream.close();return map ;} catch (Exception e) {e.printStackTrace();return null ;}}
备注:记得导入相应的包哦。。比如dom4j还有xsreader。。
2:获取用户的个人信息
package com.hnu.scw.utils;import com.hnu.scw.model.AccessToken;
import net.sf.json.JSONObject;/*** @author scw* @create