轉自:http://www.cuiyongzhi.com/post/56.htmlhtml
前面的文章有講到微信的一系列開發文章,包括token獲取、菜單建立等,在這一篇將講述在微信公衆平臺開發中如何獲取微信用戶的信息,在上一篇咱們有說道微信用戶和微信公衆帳號之間的聯繫能夠經過Openid關聯,因此在這裏咱們就採用openid去獲取用戶微信信息,並實現一個簡單場景應用:當微信新用戶關注咱們的微信公衆平臺的時候咱們自動回覆一篇圖文消息,而後在圖文消息中標題爲:【尊敬的:XXX,你好!】,並且在圖文消息中的圖片就是用戶的微信頭像,以下圖:java
有關獲取微信用戶信息的文檔咱們能夠參照:http://mp.weixin.qq.com/wiki/1/8a5ce6257f1d3b2afb20f83e72b72ce9.html 。程序員
(一)用戶微信消息的獲取實現web
在關注者與公衆號產生消息交互後,公衆號可得到關注者的OpenID(加密後的微信號,每一個用戶對每一個公衆號的OpenID是惟一的。對於不一樣公衆號,同一用戶的openid不一樣)。公衆號可經過本接口來根據OpenID獲取用戶基本信息,包括暱稱、頭像、性別、所在城市、語言和關注時間。json
1
|
http請求方式: GET https:
//api
.weixin.qq.com
/cgi-bin/user/info
?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
|
在這裏我寫了一個方法類GetUseInfo.java,在方法中咱們只須要傳入openid便可返回(暱稱,圖像、性別【其餘參數可自行獲取】),代碼實現以下:api
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package
com.cuiyongzhi.wechat.common;
import
java.util.HashMap;
import
com.cuiyongzhi.web.util.GlobalConstants;
import
com.cuiyongzhi.wechat.util.HttpUtils;
import
net.sf.json.JSONObject;
/**
* ClassName: GetUseInfo
* @Description: 獲取微信用戶信息
* @author dapengniao
* @date 2016年3月18日 下午2:00:52
*/
public
class
GetUseInfo {
/**
* @Description: 經過openid獲取用戶微信信息
* @param @param openid
* @param @return
* @param @throws Exception
* @author dapengniao
* @date 2016年3月18日 下午2:01:30
*/
public
static
HashMap<String, String> Openid_userinfo(String openid)
throws
Exception {
HashMap<String, String> params =
new
HashMap<String, String>();
params.put(
"access_token"
,
GlobalConstants.getInterfaceUrl(
"access_token"
));
//定時器中獲取到的token
params.put(
"openid"
, openid);
//須要獲取的用戶的openid
params.put(
"lang"
,
"zh_CN"
);
String subscribers = HttpUtils.sendGet(
GlobalConstants.getInterfaceUrl(
"OpenidUserinfoUrl"
), params);
System.out.println(subscribers);
params.clear();
//這裏返回參數只取了暱稱、頭像、和性別
params.put(
"nickname"
,
JSONObject.fromObject(subscribers).getString(
"nickname"
));
//暱稱
params.put(
"headimgurl"
,
JSONObject.fromObject(subscribers).getString(
"headimgurl"
));
//圖像
params.put(
"sex"
, JSONObject.fromObject(subscribers).getString(
"sex"
));
//性別
return
params;
}
}
|
(二)關注回覆圖文消息實現bash
在第一部分中有說道【在關注者與公衆號產生消息交互後,公衆號可得到關注者的OpenID】,在咱們的場景中獲取關注者openid的事件就是用戶的關注事件,同時咱們也是在關注事件中給關注者被動回覆圖文消息(圖文消息的回覆實現可參照:http://www.cuiyongzhi.com/?id=43 ),其實現過程:
微信
經過關注事件獲取到openid,調用獲取用戶信息接口獲取關注者相關接口;微信公衆平臺
在關注事件被動回覆中設置圖文消息的title以及圖片,回覆給關注者;post
簡單代碼實現以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//對圖文消息
NewsMessage newmsg=
new
NewsMessage();
newmsg.setToUserName(openid);
newmsg.setFromUserName(mpid);
newmsg.setCreateTime(
new
Date().getTime());
newmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);
if
(map.get(
"Event"
).equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
// 關注事件
System.out.println(
"==============這是關注事件!"
);
try
{
HashMap<String, String> userinfo=GetUseInfo.Openid_userinfo(openid);
Article article=
new
Article();
article.setDescription(
"歡迎來到崔用志的我的博客:菜鳥程序員成長之路!"
);
//圖文消息的描述
article.setPicUrl(userinfo.get(
"headimgurl"
));
//圖文消息圖片地址
article.setTitle(
"尊敬的:"
+userinfo.get(
"nickname"
)+
",你好!"
);
//圖文消息標題
List<Article> list=
new
ArrayList<Article>();
list.add(article);
//這裏發送的是單圖文,若是須要發送多圖文則在這裏list中加入多個Article便可!
newmsg.setArticleCount(list.size());
newmsg.setArticles(list);
return
MessageUtil.newsMessageToXml(newmsg);
}
catch
(Exception e) {
// TODO Auto-generated catch block
System.out.println(
"====代碼有問題額☺!"
);
logger.error(e,e);
}
}
|
最終咱們能夠來看看咱們的成果,這裏爲了看到效果很直觀我先取消關注而後再次關注的,以下圖: