


Explication détaillée et exemples d'obtention d'ACCESSTOKEN .Net pour le développement de la plateforme publique WeChat
Mar 28, 2017 pm 02:48 PMCet article présente principalement les informations pertinentes sur la version Java pratique du développement de la plate-forme publique WeChat pour obtenir des informations de base sur les utilisateurs. Les amis dans le besoin peuvent s'y référer
Après que les abonnés interagissent avec le compte public pour générer des messages, le public Le compte peut obtenir l'OpenID du follower (ID WeChat crypté, l'OpenID de chaque utilisateur pour chaque compte officiel est unique. Pour différents comptes officiels, l'openid du même utilisateur est différent).
Les comptes officiels peuvent obtenir des informations utilisateur de base basées sur OpenID via cette interface , y compris le surnom, l'avatar, le sexe, la ville, la langue et l'heure d'attention
Les développeurs peuvent obtenir des informations utilisateur de base via OpenID. Veuillez utiliser le protocole https?: Obtenez des informations utilisateur de base. Description de la demande d'appel d'interface
Méthode de requête http?: GET
api.weixin.qq.com/cgi-bin/user/info ?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
Description du paramètre
Description du retour
參數(shù) | 是否必須 | 說明 |
---|---|---|
access_token | 是 | 調(diào)用接口憑證 |
openid | 是 | 普通用戶的標(biāo)識(shí),對(duì)當(dāng)前公眾號(hào)唯一 |
lang | 否 | 返回國家地區(qū)語言版本,zh_CN 簡體,zh_TW 繁體,en 英語 |
Dans des circonstances normales, WeChat Le paquet de données JSON suivant sera renvoyé au compte public?:
?{ ??"subscribe":?1,? ??"openid":?"o6_bmjrPTlm6_2sgVt7hMZOPfL2M",? ??"nickname":?"Band",? ??"sex":?1,? ??"language":?"zh_CN",? ??"city":?"廣州",? ??"province":?"廣東",? ??"country":?"中國",? ??"headimgurl":??"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",? ??"subscribe_time":?1382694957, ??"unionid":?"?o6_bmasdasdsad6_2sgVt7hMZOPfL" ??"remark":?"", ??"groupid":?0 }
Paramètre | Description |
---|---|
subscribe | Si l'utilisateur s'abonne à l'ID de compte public. Lorsque la valeur est 0, cela signifie que l'utilisateur ne suit pas le compte public et ne peut pas extraire d'autres informations.|
openid | L'identifiant de l'utilisateur, unique. au compte officiel actuel |
surnom | Le surnom de l'utilisateur |
sexe | Le sexe de l'utilisateur, lorsque la valeur est 1, il est masculin, lorsque la valeur est 2, il est féminin, lorsque la valeur est 0, il est inconnu|
ville td> | Ville de l'utilisateur |
pays | Pays de l'utilisateur |
province td> | |
province | td>Province où se trouve l'utilisateur |
langue | La langue de l'utilisateur, le chinois simplifié est zh_CN |
Avatar de l'utilisateur, la dernière valeur représente la taille de l'avatar carré (0, 46, 64, 96, 132 valeurs sont disponibles, 0 représente un avatar carré de 640*640), cet élément est utilisé lorsque l'utilisateur n'a pas d'avatar vide. Si l'utilisateur modifie son avatar, l'URL de l'avatar d'origine sera invalide. | |
subscribe_time | Le temps d'attention de l'utilisateur est Horodatage . Si l'utilisateur a suivi plusieurs fois, la dernière heure de suivi sera utilisée |
unionid | Seulement après que l'utilisateur ait lié le compte officiel à la plateforme ouverte WeChat compte, ce champ appara?t. Pour plus de détails, voir?:?Obtention des informations personnelles des utilisateurs (mécanisme UnionID) |
remarque | Remarques des opérateurs de compte public aux fans. Les opérateurs de compte public peuvent les publier sur. WeChat PlatformGestion des utilisateursinterface pour ajouter des notes aux fans |
ID de groupe |
錯(cuò)誤時(shí)微信會(huì)返回錯(cuò)誤碼等信息,JSON數(shù)據(jù)包示例如下(該示例為AppID無效錯(cuò)誤):
?{"errcode":40013,"errmsg":"invalid?appid"}
根據(jù)上面的信息,我們定義一個(gè)用戶信息類來存放用戶的基本信息。
package?com.souvc.weixin.pojo; /** *?類名:?WeixinUserInfo?</br> *?描述:?微信用戶的基本信息?</br> *?開發(fā)人員:?souvc?</br> *?創(chuàng)建時(shí)間:?2015-11-27?</br> *?發(fā)布版本:V1.0?</br> ?*/ public?class?WeixinUserInfo?{ ??//?用戶的標(biāo)識(shí) ??private?String?openId; ??//?關(guān)注狀態(tài)(1是關(guān)注,0是未關(guān)注),未關(guān)注時(shí)獲取不到其余信息 ??private?int?subscribe; ??//?用戶關(guān)注時(shí)間,為時(shí)間戳。如果用戶曾多次關(guān)注,則取最后關(guān)注時(shí)間 ??private?String?subscribeTime; ??//?昵稱 ??private?String?nickname; ??//?用戶的性別(1是男性,2是女性,0是未知) ??private?int?sex; ??//?用戶所在國家 ??private?String?country; ??//?用戶所在省份 ??private?String?province; ??//?用戶所在城市 ??private?String?city; ??//?用戶的語言,簡體中文為zh_CN ??private?String?language; ??//?用戶頭像 ??private?String?headImgUrl; ??public?String?getOpenId()?{ ????return?openId; ??} ??public?void?setOpenId(String?openId)?{ ????this.openId?=?openId; ??} ??public?int?getSubscribe()?{ ????return?subscribe; ??} ??public?void?setSubscribe(int?subscribe)?{ ????this.subscribe?=?subscribe; ??} ??public?String?getSubscribeTime()?{ ????return?subscribeTime; ??} ??public?void?setSubscribeTime(String?subscribeTime)?{ ????this.subscribeTime?=?subscribeTime; ??} ??public?String?getNickname()?{ ????return?nickname; ??} ??public?void?setNickname(String?nickname)?{ ????this.nickname?=?nickname; ??} ??public?int?getSex()?{ ????return?sex; ??} ??public?void?setSex(int?sex)?{ ????this.sex?=?sex; ??} ??public?String?getCountry()?{ ????return?country; ??} ??public?void?setCountry(String?country)?{ ????this.country?=?country; ??} ??public?String?getProvince()?{ ????return?province; ??} ??public?void?setProvince(String?province)?{ ????this.province?=?province; ??} ??public?String?getCity()?{ ????return?city; ??} ??public?void?setCity(String?city)?{ ????this.city?=?city; ??} ??public?String?getLanguage()?{ ????return?language; ??} ??public?void?setLanguage(String?language)?{ ????this.language?=?language; ??} ??public?String?getHeadImgUrl()?{ ????return?headImgUrl; ??} ??public?void?setHeadImgUrl(String?headImgUrl)?{ ????this.headImgUrl?=?headImgUrl; ??} }
我們先來看看獲取用戶信息的接口:
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
根據(jù)分析,獲取用戶的基本信息需要一個(gè)token。
package?com.souvc.weixin.pojo; /** *?類名:?Token?</br> *?描述:?憑證?</br> *?開發(fā)人員:?souvc?</br> *?創(chuàng)建時(shí)間:?2015-11-27?</br> *?發(fā)布版本:V1.0?</br> ?*/ public?class?Token?{ ??//?接口訪問憑證 ??private?String?accessToken; ??//?憑證有效期,單位:秒 ??private?int?expiresIn; ??public?String?getAccessToken()?{ ????return?accessToken; ??} ??public?void?setAccessToken(String?accessToken)?{ ????this.accessToken?=?accessToken; ??} ??public?int?getExpiresIn()?{ ????return?expiresIn; ??} ??public?void?setExpiresIn(int?expiresIn)?{ ????this.expiresIn?=?expiresIn; ??} }
https請(qǐng)求,需要的信任管理器
package?com.souvc.weixin.util; import?java.security.cert.CertificateException; import?java.security.cert.X509Certificate; import?javax.net.ssl.X509TrustManager; /** *?類名:?MyX509TrustManager?</br> *?描述:信任管理器?</br> *?開發(fā)人員:?souvc?</br> *?創(chuàng)建時(shí)間:?2015-11-27?</br> *?發(fā)布版本:V1.0?</br> ?*/ public?class?MyX509TrustManager?implements?X509TrustManager?{ ??//?檢查客戶端證書 ??public?void?checkClientTrusted(X509Certificate[]?chain,?String?authType)?throws?CertificateException?{ ??} ??//?檢查服務(wù)器端證書 ??public?void?checkServerTrusted(X509Certificate[]?chain,?String?authType)?throws?CertificateException?{ ??} ??//?返回受信任的X509證書數(shù)組 ??public?X509Certificate[]?getAcceptedIssuers()?{ ????return?null; ??} }
封裝了一個(gè)公共類:
package?com.souvc.weixin.util; import?java.io.BufferedReader; import?java.io.InputStream; import?java.io.InputStreamReader; import?java.io.OutputStream; import?java.io.UnsupportedEncodingException; import?java.net.ConnectException; import?java.net.URL; import?javax.net.ssl.HttpsURLConnection; import?javax.net.ssl.SSLContext; import?javax.net.ssl.SSLSocketFactory; import?javax.net.ssl.TrustManager; import?net.sf.json.JSONException; import?net.sf.json.JSONObject; import?org.slf4j.Logger; import?org.slf4j.LoggerFactory; import?com.souvc.weixin.pojo.Token; /** *?類名:?CommonUtil?</br> *?描述:?通用工具類?</br> *?開發(fā)人員:?souvc?</br> *?創(chuàng)建時(shí)間:?2015-11-27?</br> *?發(fā)布版本:V1.0?</br> ?*/ public?class?CommonUtil?{ ??private?static?Logger?log?=?LoggerFactory.getLogger(CommonUtil.class); ??//?憑證獲取(GET) ??public?final?static?String?token_url?=?"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; ??/** ???*?發(fā)送https請(qǐng)求 ???*? ???*?@param?requestUrl?請(qǐng)求地址 ???*?@param?requestMethod?請(qǐng)求方式(GET、POST) ???*?@param?outputStr?提交的數(shù)據(jù) ???*?@return?JSONObject(通過JSONObject.get(key)的方式獲取json對(duì)象的屬性值) ???*/ ??public?static?JSONObject?httpsRequest(String?requestUrl,?String?requestMethod,?String?outputStr)?{ ????JSONObject?jsonObject?=?null; ????try?{ ??????//?創(chuàng)建SSLContext對(duì)象,并使用我們指定的信任管理器初始化 ??????TrustManager[]?tm?=?{?new?MyX509TrustManager()?}; ??????SSLContext?sslContext?=?SSLContext.getInstance("SSL",?"SunJSSE"); ??????sslContext.init(null,?tm,?new?java.security.SecureRandom()); ??????//?從上述SSLContext對(duì)象中得到SSLSocketFactory對(duì)象 ??????SSLSocketFactory?ssf?=?sslContext.getSocketFactory(); ??????URL?url?=?new?URL(requestUrl); ??????HttpsURLConnection?conn?=?(HttpsURLConnection)?url.openConnection(); ??????conn.setSSLSocketFactory(ssf); ??????conn.setDoOutput(true); ??????conn.setDoInput(true); ??????conn.setUseCaches(false); ??????//?設(shè)置請(qǐng)求方式(GET/POST) ??????conn.setRequestMethod(requestMethod); ??????//?當(dāng)outputStr不為null時(shí)向輸出流寫數(shù)據(jù) ??????if?(null?!=?outputStr)?{ ????????OutputStream?outputStream?=?conn.getOutputStream(); ????????//?注意編碼格式 ????????outputStream.write(outputStr.getBytes("UTF-8")); ????????outputStream.close(); ??????} ??????//?從輸入流讀取返回內(nèi)容 ??????InputStream?inputStream?=?conn.getInputStream(); ??????InputStreamReader?inputStreamReader?=?new?InputStreamReader(inputStream,?"utf-8"); ??????BufferedReader?bufferedReader?=?new?BufferedReader(inputStreamReader); ??????String?str?=?null; ??????StringBuffer?buffer?=?new?StringBuffer(); ??????while?((str?=?bufferedReader.readLine())?!=?null)?{ ????????buffer.append(str); ??????} ??????//?釋放資源 ??????bufferedReader.close(); ??????inputStreamReader.close(); ??????inputStream.close(); ??????inputStream?=?null; ??????conn.disconnect(); ??????jsonObject?=?JSONObject.fromObject(buffer.toString()); ????}?catch?(ConnectException?ce)?{ ??????log.error("連接超時(shí):{}",?ce); ????}?catch?(Exception?e)?{ ??????log.error("https請(qǐng)求異常:{}",?e); ????} ????return?jsonObject; ??} ??/** ???*?獲取接口訪問憑證 ???*? ???*?@param?appid?憑證 ???*?@param?appsecret?密鑰 ???*?@return ???*/ ??public?static?Token?getToken(String?appid,?String?appsecret)?{ ????Token?token?=?null; ????String?requestUrl?=?token_url.replace("APPID",?appid).replace("APPSECRET",?appsecret); ????//?發(fā)起GET請(qǐng)求獲取憑證 ????JSONObject?jsonObject?=?httpsRequest(requestUrl,?"GET",?null); ????if?(null?!=?jsonObject)?{ ??????try?{ ????????token?=?new?Token(); ????????token.setAccessToken(jsonObject.getString("access_token")); ????????token.setExpiresIn(jsonObject.getInt("expires_in")); ??????}?catch?(JSONException?e)?{ ????????token?=?null; ????????//?獲取token失敗 ????????log.error("獲取token失敗?errcode:{}?errmsg:{}",?jsonObject.getInt("errcode"),?jsonObject.getString("errmsg")); ??????} ????} ????return?token; ??} ??/** ???*?URL編碼(utf-8) ???*? ???*?@param?source ???*?@return ???*/ ??public?static?String?urlEncodeUTF8(String?source)?{ ????String?result?=?source; ????try?{ ??????result?=?java.net.URLEncoder.encode(source,?"utf-8"); ????}?catch?(UnsupportedEncodingException?e)?{ ??????e.printStackTrace(); ????} ????return?result; ??} ??/** ???*?根據(jù)內(nèi)容類型判斷文件擴(kuò)展名 ???*? ???*?@param?contentType?內(nèi)容類型 ???*?@return ???*/ ??public?static?String?getFileExt(String?contentType)?{ ????String?fileExt?=?""; ????if?("image/jpeg".equals(contentType)) ??????fileExt?=?".jpg"; ????else?if?("audio/mpeg".equals(contentType)) ??????fileExt?=?".mp3"; ????else?if?("audio/amr".equals(contentType)) ??????fileExt?=?".amr"; ????else?if?("video/mp4".equals(contentType)) ??????fileExt?=?".mp4"; ????else?if?("video/mpeg4".equals(contentType)) ??????fileExt?=?".mp4"; ????return?fileExt; ??} }
獲取用戶基本信息的方法:
/** ???*?獲取用戶信息 ???*? ???*?@param?accessToken?接口訪問憑證 ???*?@param?openId?用戶標(biāo)識(shí) ???*?@return?WeixinUserInfo ???*/ ??public?static?WeixinUserInfo?getUserInfo(String?accessToken,?String?openId)?{ ????WeixinUserInfo?weixinUserInfo?=?null; ????//?拼接請(qǐng)求地址 ????String?requestUrl?=?"https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID"; ????requestUrl?=?requestUrl.replace("ACCESS_TOKEN",?accessToken).replace("OPENID",?openId); ????//?獲取用戶信息 ????JSONObject?jsonObject?=?CommonUtil.httpsRequest(requestUrl,?"GET",?null); ????if?(null?!=?jsonObject)?{ ??????try?{ ????????weixinUserInfo?=?new?WeixinUserInfo(); ????????//?用戶的標(biāo)識(shí) ????????weixinUserInfo.setOpenId(jsonObject.getString("openid")); ????????//?關(guān)注狀態(tài)(1是關(guān)注,0是未關(guān)注),未關(guān)注時(shí)獲取不到其余信息 ????????weixinUserInfo.setSubscribe(jsonObject.getInt("subscribe")); ????????//?用戶關(guān)注時(shí)間 ????????weixinUserInfo.setSubscribeTime(jsonObject.getString("subscribe_time")); ????????//?昵稱 ????????weixinUserInfo.setNickname(jsonObject.getString("nickname")); ????????//?用戶的性別(1是男性,2是女性,0是未知) ????????weixinUserInfo.setSex(jsonObject.getInt("sex")); ????????//?用戶所在國家 ????????weixinUserInfo.setCountry(jsonObject.getString("country")); ????????//?用戶所在省份 ????????weixinUserInfo.setProvince(jsonObject.getString("province")); ????????//?用戶所在城市 ????????weixinUserInfo.setCity(jsonObject.getString("city")); ????????//?用戶的語言,簡體中文為zh_CN ????????weixinUserInfo.setLanguage(jsonObject.getString("language")); ????????//?用戶頭像 ????????weixinUserInfo.setHeadImgUrl(jsonObject.getString("headimgurl")); ??????}?catch?(Exception?e)?{ ????????if?(0?==?weixinUserInfo.getSubscribe())?{ ??????????log.error("用戶{}已取消關(guān)注",?weixinUserInfo.getOpenId()); ????????}?else?{ ??????????int?errorCode?=?jsonObject.getInt("errcode"); ??????????String?errorMsg?=?jsonObject.getString("errmsg"); ??????????log.error("獲取用戶信息失敗?errcode:{}?errmsg:{}",?errorCode,?errorMsg); ????????} ??????} ????} ????return?weixinUserInfo; ??}
測試的方法:注意將以下替換為自己的appid和秘鑰。
public?static?void?main(String?args[])?{ ????//?獲取接口訪問憑證 ????String?accessToken?=?CommonUtil.getToken("xxxx",?"xxxx").getAccessToken(); ????/** ?????*?獲取用戶信息 ?????*/ ????WeixinUserInfo?user?=?getUserInfo(accessToken,?"ooK-yuJvd9gEegH6nRIen-gnLrVw"); ????System.out.println("OpenID:"?+?user.getOpenId()); ????System.out.println("關(guān)注狀態(tài):"?+?user.getSubscribe()); ????System.out.println("關(guān)注時(shí)間:"?+?user.getSubscribeTime()); ????System.out.println("昵稱:"?+?user.getNickname()); ????System.out.println("性別:"?+?user.getSex()); ????System.out.println("國家:"?+?user.getCountry()); ????System.out.println("省份:"?+?user.getProvince()); ????System.out.println("城市:"?+?user.getCity()); ????System.out.println("語言:"?+?user.getLanguage()); ????System.out.println("頭像:"?+?user.getHeadImgUrl()); ??}
效果如下:
OpenID:ooK-yuJvd9gEegH6nRIen-gnLrVw
關(guān)注狀態(tài):1
關(guān)注時(shí)間:1449021142
昵稱:風(fēng)少
性別:1
國家:中國
省份:廣東
城市:廣州
語言:zh_CN
頭像:http://wx.qlogo.cn/mmopen/lOZIEvyfCa7aZQ7CkiamdpQicUDnGDEC0nzb7ZALjdl3TzFVFEHWM1AFqEXnicNIDeh0IQYTt0NrIP06ibg4W5WflASfFfX9qqib0/0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)