如何獲取用戶的OpenID,對於微信開發模式下的開發來說,那就是一個非常簡單的小功能了。簡單介紹一下我是怎樣去獲取OpenID的。
微信服務器與公眾賬號服務器交互的信息可以分為3類:請求消息、事件和響應消息。
(1)請求消息指用戶發送給公眾賬號的信息包含: 文本消息、圖片消息、語音消息、視頻消息、小視頻消息、 地理位置消息、鏈接消息
(2)事件指用戶對公眾賬號的做出的某種操作時,會使得微信服務器通過事件推送的形式通知到公眾賬號服務器,從而開發者可以獲取到該信息。包含:關注/取消關注事件、掃描帶參數二維碼事件、 上報地理位置事件、 自定義菜單事件、 點擊菜單拉取消息時的事件推送、 點擊菜單跳轉鏈接時的事件推送
消息觸發時無論請求消息還是事件,公眾賬號服務器都會獲得一個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(取消訂閱) |
FromUserName指用戶的openID,對於當前公眾號來說是唯一的。我們就可以通過用戶openID,在公眾賬號服務器上創建我們自己的用戶數據或者獲取用戶在我們自己數據庫中的數據,進行處理。
我們當時做就是通過用戶關注時,利用openID在自己的數據庫中自動創建一個用戶。這里我沒有提到獲取用戶的基本信息如用戶昵稱、頭像等。
下面是一些Java代碼片段:
Map<String ,String > requestMap = MessageUtil.parseXml(request);
String fromUserName = requestMap.get("FromUserName");
String toUserName = requestMap.get("ToUserName");
String msgType = requestMap.get("MsgType");
if(msgType.equals(Constant.REQ_MESSAGE_TYPE_EVENT)){//判斷消息類型是否是事件消息類型
String eventType = requestMap.get("Event");//獲取具體的事件類型
if(eventType.equals(Constant.EVENT_TYPE_SUBSCRIBE)){ //判斷事件是否是關注事件
/* 利用openID在自己的數據庫中自動創建一個用戶 */
}
}
以上就是通過用戶關注時,利用openID在自己的數據庫中自動創建一個用戶,給大家提供一個思路吧,共同進步。
附:
/**
* 解析微信發來的請求
* @param request
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static Map<String , String> parseXml(HttpServletRequest request) throws Exception{
Map<String,String> map = new HashMap<String , String >();
InputStream inputStream = request.getInputStream();
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
Element root = document.getRootElement();
List<Element> elementList = root.elements();
for (Element element : elementList) {
map.put(element.getName(),element.getText());
}
inputStream.close();
inputStream = null;
return map;
}