首頁 >Java >java教程 >Java採用openid去取得用戶微信息

Java採用openid去取得用戶微信息

Y2J
Y2J原創
2017-05-09 11:40:273260瀏覽

這篇文章主要為大家詳細介紹了Java微信公眾平台開發第十二步,微信用戶資訊的獲取,具有一定的參考價值,有興趣的小夥伴們可以參考一下

前面的文章有講到微信的一系列開發文章,包括token獲取、菜單創建等,在這篇將講述在微信公眾平台開發中如何獲取微信用戶的信息,在上一篇我們有說道微信用戶和微信公眾帳號之間的聯繫可以透過Openid關聯,所以在這裡我們就採用openid去獲取用戶微信信息,並實現一個簡單場景應用:當微信新用戶關注我們的微信公眾平台的時候我們自動回復一篇圖文訊息,然後在圖文訊息中標題為:【尊敬的:XXX,你好! 】,而圖文訊息中的圖片就是使用者的微信頭像,如下圖:

有關取得微信使用者資訊的文件我們可以參考:mp.weixin.qq .com/wiki/1/8a5ce6257f1d3b2afb20f83e72b72ce9.html 。

(一)用戶微信訊息的取得實作

在追蹤者與公眾號產生訊息互動後,公眾號可獲得追蹤者的OpenID(加密後的微訊號,每個使用者對每個公眾號的OpenID是唯一的。公眾號可透過此介面來根據OpenID取得使用者基本資訊,包括暱稱、個人資料、性別、所在城市、語言和關注時間。

http要求方式: GET api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

在這裡我寫了一個方法類別GetUseInfo.java,在方法中我們只需要傳入openid即可返回(暱稱,圖像、性別【其他參數可自行取得】),程式碼實作如下:

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;
 }
 
}

#(二)關注回覆圖文訊息實現

在第一部分中有說道【在追蹤者與公眾號產生訊息互動後,公眾號可獲得追蹤者的OpenID】,在我們的場景中取得追蹤者openid的事件就是使用者的關注事件,同時我們也是在關注事件中給追蹤者被動回覆圖文訊息(圖文訊息的回覆實作可參考:Java微信公眾平台開發(5) 文字及圖文訊息回覆的實作),其實作過程:

透過關注事件取得到openid,呼叫取得使用者資訊介面取得追蹤者相關介面;
在關注事件被動回覆中設定圖文訊息的title以及圖片,回覆給追蹤者;
簡單程式碼實作如下:

//对图文消息
 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")+",你好!"); //图文消息标题
  article.setUrl("http://www.cuiyongzhi.com"); //图文url链接
  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);
 }
 
 }

最終我們可以來看看我們的成果,這裡為了看到效果很直觀我先取消關注然後再次關注的,如下圖:

#【相關推薦】

1. Java免費影片教學

2. YMP線上手冊

3. 全面解析Java註解

以上是Java採用openid去取得用戶微信息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn