Java微信公眾平臺(tái)開(kāi)發(fā)(12) 微信用戶信息的獲取
前面的文章有講到微信的一系列開(kāi)發(fā)文章,包括token獲取、菜單創(chuàng)建等,在這一篇將講述在微信公眾平臺(tái)開(kāi)發(fā)中如何獲取微信用戶的信息,在上一篇我們有說(shuō)道微信用戶和微信公眾賬號(hào)之間的聯(lián)系可以通過(guò)Openid關(guān)聯(lián),所以在這里我們就采用openid去獲取用戶微信信息,并實(shí)現(xiàn)一個(gè)簡(jiǎn)單場(chǎng)景應(yīng)用:當(dāng)微信新用戶關(guān)注我們的微信公眾平臺(tái)的時(shí)候我們自動(dòng)回復(fù)一篇圖文消息,然后在圖文消息中標(biāo)題為:【尊敬的:XXX,你好!】,而且在圖文消息中的圖片就是用戶的微信頭像,如下圖:

有關(guān)獲取微信用戶信息的文檔我們可以參照:http://mp.weixin.qq.com/wiki/1/8a5ce6257f1d3b2afb20f83e72b72ce9.html 。
(一)用戶微信消息的獲取實(shí)現(xiàn)
在關(guān)注者與公眾號(hào)產(chǎn)生消息交互后,公眾號(hào)可獲得關(guān)注者的OpenID(加密后的微信號(hào),每個(gè)用戶對(duì)每個(gè)公眾號(hào)的OpenID是唯一的。對(duì)于不同公眾號(hào),同一用戶的openid不同)。公眾號(hào)可通過(guò)本接口來(lái)根據(jù)OpenID獲取用戶基本信息,包括昵稱、頭像、性別、所在城市、語(yǔ)言和關(guān)注時(shí)間。
http請(qǐng)求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
在這里我寫了一個(gè)方法類GetUseInfo.java,在方法中我們只需要傳入openid即可返回(昵稱,圖像、性別【其他參數(shù)可自行獲取】),代碼實(shí)現(xiàn)如下:
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: 通過(guò)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")); //定時(shí)器中獲取到的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();
//這里返回參數(shù)只取了昵稱、頭像、和性別
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;
}
}
(二)關(guān)注回復(fù)圖文消息實(shí)現(xiàn)
在第一部分中有說(shuō)道【在關(guān)注者與公眾號(hào)產(chǎn)生消息交互后,公眾號(hào)可獲得關(guān)注者的OpenID】,在我們的場(chǎng)景中獲取關(guān)注者openid的事件就是用戶的關(guān)注事件,同時(shí)我們也是在關(guān)注事件中給關(guān)注者被動(dòng)回復(fù)圖文消息(圖文消息的回復(fù)實(shí)現(xiàn)可參照:Java微信公眾平臺(tái)開(kāi)發(fā)(5) 文本及圖文消息回復(fù)的實(shí)現(xiàn) ),其實(shí)現(xiàn)過(guò)程:
通過(guò)關(guān)注事件獲取到openid,調(diào)用獲取用戶信息接口獲取關(guān)注者相關(guān)接口;
在關(guān)注事件被動(dòng)回復(fù)中設(shè)置圖文消息的title以及圖片,回復(fù)給關(guān)注者;
簡(jiǎn)單代碼實(shí)現(xiàn)如下:
//對(duì)圖文消息
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)) { // 關(guān)注事件
System.out.println("==============這是關(guān)注事件!");
try {
HashMap<String, String> userinfo=GetUseInfo.Openid_userinfo(openid);
Article article=new Article();
article.setDescription("歡迎來(lái)到崔用志的個(gè)人博客:菜鳥(niǎo)程序員成長(zhǎng)之路!"); //圖文消息的描述
article.setPicUrl(userinfo.get("headimgurl")); //圖文消息圖片地址
article.setTitle("尊敬的:"+userinfo.get("nickname")+",你好!"); //圖文消息標(biāo)題
article.setUrl("http://www.cuiyongzhi.com"); //圖文url鏈接
List<Article> list=new ArrayList<Article>();
list.add(article); //這里發(fā)送的是單圖文,如果需要發(fā)送多圖文則在這里list中加入多個(gè)Article即可!
newmsg.setArticleCount(list.size());
newmsg.setArticles(list);
return MessageUtil.newsMessageToXml(newmsg);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("====代碼有問(wèn)題額☺!");
logger.error(e,e);
}
}
最終我們可以來(lái)看看我們的成果,這里為了看到效果很直觀我先取消關(guān)注然后再次關(guān)注的,如下圖:

到這里通過(guò)openid過(guò)去關(guān)注者信息的實(shí)現(xiàn)就基本結(jié)束了,下一篇將講述【微信web中JSSDK的開(kāi)發(fā)配置】,感謝你的翻閱,如有疑問(wèn)可以留言討論!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java微信公眾平臺(tái)開(kāi)發(fā)(15) 微信JSSDK的使用
- Java微信公眾平臺(tái)開(kāi)發(fā)(14) 微信web開(kāi)發(fā)者工具使用
- Java微信公眾平臺(tái)開(kāi)發(fā)(10) 微信自定義菜單的創(chuàng)建實(shí)現(xiàn)
- Java微信公眾平臺(tái)開(kāi)發(fā)(9) 關(guān)鍵字回復(fù)以及客服接口實(shí)現(xiàn)
- Java微信公眾平臺(tái)開(kāi)發(fā)(8) 多媒體消息回復(fù)
- Java微信公眾平臺(tái)開(kāi)發(fā)(7) 公眾平臺(tái)測(cè)試帳號(hào)的申請(qǐng)
- Java微信公眾平臺(tái)開(kāi)發(fā)(5) 文本及圖文消息回復(fù)的實(shí)現(xiàn)
- Java微信公眾平臺(tái)之素材管理
- Java微信公眾平臺(tái)之獲取地理位置
- Java微信公眾平臺(tái)之群發(fā)接口(高級(jí)群發(fā))
相關(guān)文章
Java應(yīng)用程序開(kāi)發(fā)學(xué)習(xí)之static關(guān)鍵字應(yīng)用
今天小編就為大家分享一篇關(guān)于Java應(yīng)用程序開(kāi)發(fā)學(xué)習(xí)之static關(guān)鍵字應(yīng)用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
詳解jdbc實(shí)現(xiàn)對(duì)CLOB和BLOB數(shù)據(jù)類型的操作
這篇文章主要介紹了詳解jdbc實(shí)現(xiàn)對(duì)CLOB和BLOB數(shù)據(jù)類型的操作的相關(guān)資料,這里實(shí)現(xiàn)寫入操作與讀寫操作,需要的朋友可以參考下2017-08-08
java&javascript自定義加密數(shù)據(jù)傳輸代碼示例
這篇文章主要介紹了java&javascript自定義加密數(shù)據(jù)傳輸代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之健身器材商城系統(tǒng)的實(shí)現(xiàn)
只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Jdbc+Servlet+Ajax+Fileupload+mysql實(shí)現(xiàn)健身器材商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2022-03-03
Java 的 FileFilter文件過(guò)濾與readline讀行操作實(shí)例代碼
這篇文章介紹了Java 的 FileFilter文件過(guò)濾與readline讀行操作實(shí)例代碼,有需要的朋友可以參考一下2013-09-09
Java構(gòu)建樹(shù)形菜單的實(shí)例代碼(支持多級(jí)菜單)
這篇文章主要介紹了Java構(gòu)建樹(shù)形菜單的實(shí)例代碼(支持多級(jí)菜單),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-09-09
Spring Boot詳解各類請(qǐng)求和響應(yīng)的處理方法
平時(shí)只是在用SpringBoot框架,但并沒(méi)有詳細(xì)研究過(guò)請(qǐng)求和響應(yīng)執(zhí)行的一個(gè)具體過(guò)程,所以本文主要來(lái)梳理一下SpringBoot請(qǐng)求和響應(yīng)的處理過(guò)程2022-07-07
SpringBoot如何打印mybatis的執(zhí)行sql問(wèn)題
這篇文章主要介紹了SpringBoot如何打印mybatis的執(zhí)行sql問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03

