Une fois que le suiveur a interagi avec le compte officiel, le compte officiel peut obtenir l'OpenID de l'OUDE suivant (le compte WECHAT crypté, chaque utilisateur OpenID pour chaque compte officiel est unique. Pour différents comptes officiels, l'OpenID du même utilisateur est différent).
Le compte officiel peut 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 du suivi.
Les développeurs peuvent obtenir des informations de base utilisateur via OpenID. Veuillez utiliser le protocole HTTPS.
Nous pouvons jeter un œil à la documentation officielle: obtenir des informations de base sur les utilisateurs.
Description de la demande d'appel d'interface
Méthode de demande HTTP: obtenir
https://api.weixin.qq.com/cgi-bin/user/info?access_token=access_token&openID=OpenID&lang=zh_cn
Description du paramètre
| paramètre | Est-ce nécessaire | illustrer |
|---|---|---|
| Access_token | Oui | Appeler des informations d'identification d'interface |
| ouverte | Oui | L'identité d'un utilisateur ordinaire est unique au compte officiel actuel |
| égouter | Non | Retour au pays et à la version régionale, ZH_CN Simplified Chinois, ZH_TW Chinois traditionnel, en anglais |
Retourner à la description
Dans des circonstances normales, WeChat renverra le paquet JSON suivant sur le compte officiel:
{"abonnez-vous": 1, "openID": "o6_bmjrptlm6_2sgvt7hmzopfl2m", "surnom": "band", "sexe": 1, "linguisé": "zh_cn", "ville": "chinois", "headmgurl": "guangdong", "country": "chinois", "headmgurl": "Guangdong", "country": "China", "Headmgurl": " "http://wx.qlogo.cn/mmopen/g3monuztnhkdmzicilibx6iafqac56vxlSufpb6n5wksyvy0chqkkiajsgq1dzutogvllrhjberqq4emsv84evhiaiceqxibjxcfhe/0", " 1382694957, "UnionId": "o6_bmasdasdsad6_2sgvt7hmzopfl" "remarque": "", "groupId": 0}Description du paramètre
| paramètre | illustrer |
|---|---|
| s'abonner | Si l'utilisateur s'abonne à l'ID de compte officiel? Si la valeur est 0, cela signifie que l'utilisateur n'a pas suivi le compte officiel et ne peut pas extraire les informations restantes. |
| ouverte | L'identification de l'utilisateur est unique au compte officiel actuel |
| surnom | Surnom de l'utilisateur |
| sexe | Le sexe de l'utilisateur, lorsque la valeur est 1, c'est un homme, lorsque la valeur est 2, elle est une femme, et lorsque la valeur est 0, elle est inconnue |
| ville | La ville de l'utilisateur |
| pays | Pays utilisateur |
| province | La province où se trouve l'utilisateur |
| langue | La langue de l'utilisateur, le chinois simplifié est zh_cn |
| casque | L'avatar de l'utilisateur, la dernière valeur représente la taille de l'avatar carré (il y a 0, 46, 64, 96 et 132 valeurs facultatives, et 0 représente 640 * 640 carrés avatar). Cet élément est vide lorsque l'utilisateur n'a pas d'avatar. Si l'utilisateur modifie l'avatar, l'URL Avatar d'origine sera invalide. |
| abonnez-vous | L'utilisateur se concentre sur le temps, comme horodatage. Si l'utilisateur l'a suivi plusieurs fois, la dernière fois à suivre |
| syndical | Ce champ n'apparaîtra qu'après que l'utilisateur a lié le compte officiel au compte WECHAT Open Platform. Voir: Obtention d'informations personnelles d'utilisateur (mécanisme UnionID) |
| Remarque | Notes des opérateurs de compte officiel aux fans. Les opérateurs de compte officiels peuvent ajouter des notes aux fans de l'interface de gestion des utilisateurs de la plate-forme publique WeChat. |
| groupé | L'ID de groupe de l'utilisateur |
Lorsque l'erreur se produit, WeChat renvoie les codes d'erreur et autres informations. L'exemple du paquet JSON est le suivant (cet exemple est une erreur AppID non valide):
{"errcode": 40013, "errmsg": "invalid appid"}Sur la base des informations ci-dessus, nous définissons une classe d'informations utilisateur pour stocker les informations de base de l'utilisateur.
Package com.souvc.weixin.pojo; / *** Nom de la classe: WeixinUserRinfo </br> * Description: Informations de base des utilisateurs de WeChat </br> * Développeur: Souvc </br> * Temps de création: 2015-11-27 </br> * Version de la version: V1.0 </br> * / Classe publique WeixinuSerinfo {// ID d'utilisateur ID Privrid; // Suivre l'état (1 est suivant, 0 ne suit pas), aucune information restante ne peut être obtenue lorsqu'il ne suit pas Int privé souscrit; // Temps de suivi de l'utilisateur, un horodatage. Si l'utilisateur a suivi à plusieurs reprises, prenez la dernière fois pour suivre la chaîne privée abonnée; // surnom de surnom de chaîne privée surnom; // Le sexe de l'utilisateur (1 est un homme, 2 est une femme, 0 est inconnue) private int sexe; // pays de la chaîne privée du pays de l'utilisateur; // Province de la province de l'utilisateur Private String; // User's City Private String City; // Langue de l'utilisateur, chinois simplifié: langue de chaîne privée ZH_CN; // Avatar Private String HeadimGurl; public String getOpenID () {return openId; } public void setOpenID (String OpenID) {this.openID = openId; } public int getSubscribe () {return abonnez-vous; } public void setSubscribe (int abonnez-vous) {this.subscribe = abonnez-vous; } public String getSubScriptime () {return aboncetime; } public void setSubScribeTime (String aboncetime) {this.SubScribeTime = aboncetime; } public String getNickName () {return newame; } public void setNickName (String Nelname) {this.nickName = Nontes; } public int getSEX () {return sexe; } public void SetSex (int sexe) {this.sex = sexe; } 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 = ville; } public String getLanguage () {return lingngle; } public void setLanguage (String Language) {this.Language = Language; } public String getheadImGurl () {return HeadimGurl; } public void SetheaDImGurl (String HeadimGurl) {this.headImGurl = HeadImGurl; }} Examinons d'abord l'interface pour obtenir des informations utilisateur:
https://api.weixin.qq.com/cgi-bin/user/info?access_token=access_token&openID=OpenID&lang=zh_cn
Selon l'analyse, un jeton est nécessaire pour obtenir les informations de base de l'utilisateur.
Package com.souvc.weixin.pojo; / *** Nom de la classe: Token </br> * Description: Informations d'identification </br> * Développeur: SOUVC </br> * Temps de création: 2015-11-27 </br> * Version de publication: V1.0 </br> * / Classe publique Classe Public Token {// Interface Access Cpentials Private String AccessToken; // Période de validité des informations d'identification, unité: secondes privées int expiresin; String public getAccessToken () {return AccessToken; } public void setAccessToken (String AccessToken) {this.accessToken = AccessToken; } public int getExpiresin () {return expiresIn; } public void setExpiresIn (int expiresin) {this.expiresin = expiresin; }} Demande HTTPS, gestionnaire de fiducie requis
package com.souvc.weixin.util;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.ssl.X509TrustManager;/*** Class name: MyX509TrustManager </br>* Description: Trust Manager</br>* Developer: souvc </br>* Creation Temps: 2015-11-27 </br> * Version de la version: V1.0 </br> * / classe publique MyX509TrustManager implémente x509TrustManager {// Vérifiez le certificat client public void CheckClientTruted (x509Certificate [] Chain, String AuthType) Throws CertificateException {} // Vérifiez le certificat de serveur public Void AuthType) CheckServerTruted (X509Certificate [] chaîne, String AuthType) lève CertificateException {} // Renvoie le X509Certificate [] GetAcceptEdISSUers () de confiance; }} Encapsulé une classe publique:
Package com.souvc.weixin.util; import java.io.bufferedeader; import java.io.inputstream; import java.io.inputstreamreader; import java.io.outputstream; import java.io.unsupportedEnCoExException; importer java.net.connectException; import java.net.Arl; javax.net.ssl.httpsurlconnection; import javax.net.ssl.sslcontext; import javax.net.ssl.sslsocketfactory; import javax.net.ssl.trustManager; import net.ss.sf.json.jsonexception; import net.sf.json.jsonObject; import org.slf4j.loggerfactory; import com.souvc.weixin.pojo.token; / *** Nom de la classe: Commonutil </br> * Description: Classe des outils généraux </br> * Développeur: Souvc </br> * Temps de création: 2015-11-27 </br> * Version de version: V1.0 </br> * LoggerFactory.getLogger (Commonutil.class); // Obtention d'identification (GET) public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=AppSecret"; / ** * Envoyer la demande HTTPS * * @Param Requesturl Demande Adresse * @Param RequestMethod Request Method (get, post) * @param outputStr les données soumises * @return JSONObject (Obtenez la valeur d'attribut de l'objet JSON via JsonObject.get (Key)) * / public static jsonObject HttSrequest (String requestUrl, string requestMethod, String OutproutSt) nul; essayez {// créer un objet SSLContext et initialiser TrustManager [] tm = {new MyX509TrustManager ()}; SslContext sslcontext = sslcontext.getInstance ("ssl", "sunjsse"); sslcontext.init (null, tm, new java.security.securerAndom ()); // Obtenez l'objet SSLSocketFactory de l'objet SSLContext ci-dessus sslSocketFactory ssf = sslContext.getSocketFactory (); Url url = nouvelle URL (requestUrl); HttpSurlConnection Conn = (httpSurlConnection) url.OpenConnection (); Conn.SetsSLSocketFactory (SSF); Conn.SetDoOutput (true); Conn.SetDoInput (true); Conn.SetUseCaches (false); // Définissez la méthode de demande (get / post) Conn.SetRequestMethod (requestMethod); // Écrivez des données sur le flux de sortie if (null! = OutputStream) {outputStream OutputStream = Conn.getOutputStream (); // faites attention au format de codage outpoream.write (outputstr.getBytes ("utf-8")); outputStream.close (); } // Renvoie le contenu de l'input stream 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); } // Libérez la ressource BufferedReader.Close (); inputStreamReader.close (); inputStream.close (); inputStream = null; Conn.Disconnect (); JSONObject = jsonObject.FromObject (Buffer.ToString ()); } catch (ConnectException CE) {Log.Error ("Connect Timeout: {}", CE); } catch (exception e) {log.error ("exception de la demande https: {}", e); } return jsonObject; } / ** * Obtenez des informations d'accès à l'accès à l'interface * * @param appid ideminals * @param appsecret key * @return * / public static token getToken (String appid, string appSecret) {token token = null; String demandeurl = token_url.replace ("appid", appid) .replace ("appsecret", appSecret); // initier une demande GET pour obtenir des informations d'identification JSONObject JSONObject = httpsRequest (requestUrl, "get", null); if (null! = jsonObject) {try {token = new token (); token.setAccessToken (jsonObject.getString ("Access_token")); token.setExpiresIn (jsonObject.getInt ("exires_in")); } catch (jSonException e) {token = null; // n'a pas réussi à obtenir un log.Error ("échoué pour obtenir un jet de token: {} errmsg: {}", jsonObject.getInt ("errcode"), jsonObject.getString ("errmsg")); }} return token; } / ** * Url Encoding (UTF-8) * * @param source * @return * / public static string urlencodeutf8 (String Source) {String result = source; try {result = java.net.urlencoder.encode (source, "utf-8"); } catch (UnportEnCcodingException e) {e.printStackTrace (); } Retour Résultat; } / ** * Déterminer l'extension du fichier basé sur le type de contenu * * @param contenuType Content Type * @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; }}Comment obtenir des informations de base des utilisateurs:
/ ** * Obtenez des informations utilisateur * * @param AccessToken Interface Access Idementials * @param openId User ID * @return weixinuseRinfo * / public static weixinuserinfo getUserIrinfo (String AccessToken, string openID) {weixinUserRinfo weixinUserInfo = null; // Splice de la demande de la chaîne d'adresse de demandeurl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=access_token&openID=OpenID"; requestUrl = requestUrl.replace ("access_token", accessToken) .replace ("openId", openId); // Obtenez des informations utilisateur jsonObject jSonObject = Commonutil.httpsRequest (requestUrl, "get", null); if (null! = jsonObject) {try {weixinuserInfo = new WeixInUserInfo (); // user id weixinuseRinfo.setOpenID (jsonObject.getString ("openId")); // Suivre l'état (1 suit, 0 ne suit pas), aucune information restante ne peut être obtenue lorsqu'il ne suit pas weixinuseRinfo.SetSubscribe (jsonObject.getInt ("sous-être")); // Temps d'attention de l'utilisateur weixinuseRinfo.SetSubScribeTime (jsonObject.getString ("abonnez-vous")); // surnom de weixinuseRinfo.setNickName (jsonObject.getString ("surnom")); // Gender utilisateur (1 est un homme, 2 est une femme, 0 est inconnue) weixinuserRinfo.setSex (jsonObject.getInt ("sexe")); // Le pays de l'utilisateur WeixinuseRinfo.setCountry (jsonObject.getString ("country")); // La province de l'utilisateur WeixinuseRinfo.setprovince (jsonObject.getString ("province")); // La ville de l'utilisateur WeixinUserInfo.SetCity (jsonObject.getString ("City")); // La langue de l'utilisateur, le chinois simplifié est zh_cn weixinuserinfo.setLanguage (jsonObject.getString ("langue")); // User Avatar WeixinUserInfo.SetheAdImGurl (jsonObject.getString ("HeadimGurl")); } catch (exception e) {if (0 == weixinuserInfo.getSubscribe ()) {log.Error ("user {} disong", weixinuseRinfo.getOpenID ()); } else {int errorcode = jsonObject.getInt ("errcode"); String errormsg = jsonObject.getString ("errmsg"); log.Error ("Échec de l'obtention d'informations utilisateur errcode: {} errmsg: {}", errorcode, errormsg); }}} return weixinUserInfo; }Méthode de test: faites attention pour remplacer ce qui suit par votre appide et votre clé secrète.
public static void main (String args []) {// obtenir l'interface accès des informations d'accès à la chaîne AccessToken = Commonutil.getToken ("xxxx", "xxxx"). getAccessToken (); / ** * Obtenez des informations utilisateur * / weixinUserInfo user = getUserInfo (AccessToken, "ook-yujvd9geegh6nrien-gnsrvw"); System.out.println ("OpenID:" + user.getOpenID ()); System.out.println ("Suivre l'état:" + user.getSubscribe ()); System.out.println ("Temps de suivi:" + user.getSubScribeTime ()); System.out.println ("surnom:" + user.getNickName ()); System.out.println ("Gender:" + user.getSEx ()); System.out.println ("pays:" + user.getCountry ()); System.out.println ("Province:" + user.getProvince ()); System.out.println ("City:" + user.getCity ()); System.out.println ("Language:" + user.getLanguage ()); System.out.println ("Avatar:" + user.geTheAdImGurl ()); }Les effets sont les suivants:
OpenID: ook-yujvd9geegh6nrien-gnlrvw
Statut d'attention: 1
Temps de suivi: 1449021142
Surnom: Feng Shao Gender: 1
Pays: Province chinoise: Guangdong City: Guangzhou Langue: ZH_CN
Avatar: http://wx.qlogo.cn/mmopen/Lozievyfca7AZQ7CKIAMDPQICUDNGDEC0NZB7ZALJDL3TZFVFEHWM1AFQEXNICNIDEH0IQYTT0NRIP06IBG4W5WflasNICNIDEH0IQYTT0NRIP06IBG4W5WfLASFFFX9QQQIB0/0
Le contenu ci-dessus présente les informations de base des utilisateurs dans le développement de la plate-forme publique WeChat pour la version Java réelle de WeChat. J'espère que ce partage d'article sera utile à votre travail et à vos études futures. Dans le même temps, merci pour votre soutien continu pour le site Web du réseau Wulin.