Después de que el seguidor interactúa con la cuenta oficial, la cuenta oficial puede obtener el siguiente OpenID (la cuenta WeChat cifrada, el OpenID de cada usuario para cada cuenta oficial es única. Para las diferentes cuentas oficiales, el mismo usuario OpenID es diferente).
La cuenta oficial puede obtener información básica del usuario basada en OpenID a través de esta interfaz, incluidos el apodo, el avatar, el género, la ciudad, el idioma y el tiempo de seguimiento.
Los desarrolladores pueden obtener información básica del usuario a través de OpenID. Utilice el protocolo HTTPS.
Podemos echar un vistazo a la documentación oficial: obtener información básica sobre los usuarios.
Descripción de la solicitud de llamada de interfaz
Método de solicitud HTTP: Obtener
https://api.weixin.qq.com/cgi-bin/user/info?access_token=access_token&openid=openid&lang=zh_cn
Descripción del parámetro
| parámetro | ¿Es necesario | ilustrar |
|---|---|---|
| Access_Token | Sí | Llamar a las credenciales de la interfaz |
| ferenal | Sí | La identidad de un usuario ordinario es exclusiva de la cuenta oficial actual. |
| lang | No | Regreso al país y la versión de idioma regional, zh_cn chino simplificado, zh_tw chino tradicional, en inglés |
Volver a la descripción
En circunstancias normales, WeChat devolverá el siguiente paquete JSON a la cuenta oficial:
{"suscripción": 1, "OpenId": "O6_BMJRPTLM6_2SGVT7HMZOPFL2M", "Nombre": "Band", "Sex": 1, "Language": "ZH_CN", "Ciudad": "Guangzhou", "Province": "Guangdong", "Country": "China", China ",, Headimgurl" "http://wx.qlogo.cn/mmopen/g3monuztnhkdmzicilibx6iafqac56vxlsufpb6n5wksyvy0chqkkkiajsgq1dzutoGvllrhjBerqq44emsv84evhiaiceqxibjxcffhe/0", "," ",", ",", ",", ",", ",", ",", ",", "," ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", "," ",", "," ",", ",", ",", ",", ",", ",", "," "," "," "," "," "," "," "," "," "," "," " 1382694957, "UnionId": "O6_BMASDASDSAD6_2SGVT7HMZOPFL" "Observación": "", "GroupId": 0}Descripción del parámetro
| parámetro | ilustrar |
|---|---|
| suscribir | ¿Si el usuario se suscribe a la ID de cuenta oficial? Si el valor es 0, significa que el usuario no ha seguido la cuenta oficial y no puede extraer la información restante. |
| ferenal | ID de usuario, exclusivo de la cuenta oficial actual |
| apodo | Apodo del usuario |
| sexo | El género del usuario, cuando el valor es 1, es masculino, cuando el valor es 2, es femenino, y cuando el valor es 0, se desconoce |
| ciudad | La ciudad del usuario |
| país | País de usuario |
| provincia | La provincia donde se encuentra el usuario |
| idioma | El idioma del usuario, el chino simplificado es zh_cn |
| titular | El avatar del usuario, el último valor representa el tamaño del avatar cuadrado (hay 0, 46, 64, 96 y 132 valores son opcionales, y 0 representa 640*640 avatar cuadrado). Este elemento está vacío cuando el usuario no tiene avatar. Si el usuario cambia el avatar, la URL de avatar original no será válida. |
| suscríbete_time | El usuario se enfoca en el tiempo, como una marca de tiempo. Si el usuario lo ha seguido muchas veces, entonces la última vez que sigue |
| sindical | Este campo solo aparecerá después de que el usuario vincule la cuenta oficial a la cuenta de la plataforma Open WeChat. Consulte: Obtener información personal del usuario (mecanismo UnionID) |
| Observación | Notas oficiales de los operadores de cuentas a los fanáticos. Los operadores de cuentas oficiales pueden agregar notas a los fanáticos en la interfaz de administración de usuarios de la plataforma pública WeChat. |
| groupid | La ID de grupo del usuario |
Cuando se produce un error, WeChat devolverá los códigos de error y otra información. El ejemplo del paquete JSON es el siguiente (este ejemplo es un error de APPID no válido):
{"Errcode": 40013, "Errmsg": "no válido appid"}Según la información anterior, definimos una clase de información del usuario para almacenar la información básica del usuario.
paquete com.souvc.weixin.pojo;/*** Nombre de clase: weixinuserInfo </br>* Descripción: Información básica de usuarios de Wechat </br>* Desarrollador: SoUVC </br>* TIEMPO DE LA CREACIÓN: 2015-11-27 </br>* Versión de lanzamiento: V1.0 </br>*/public class WeixInuserInfo {// // Id privado de usuario String String String; // Sigue el estado (1 es el siguiente, 0 no lo sigue), no se puede obtener información restante cuando no siga el INT privado suscripción; // El usuario sigue el tiempo, una marca de tiempo. Si el usuario ha seguido muchas veces, tómese la última vez en seguir la cadena privada suscriptEetime; // Apodo de apodo de cadena privada; // Género del usuario (1 es hombre, 2 es femenino, 0 es desconocido) privado int sexo; // país de cadena privada del país del usuario; // Provincia de la provincia del usuario Provincia privada de cadena; // Ciudad del usuario Ciudad de cadena privada; // lenguaje del usuario, chino simplificado: lenguaje de cadena privada zh_cn; // Avatar Avatar private String Headimgurl; public String getopenID () {return OpenId; } public void setOpenID (String OpenId) {this.openID = OpenID; } public int getSubScribe () {return suscríbete; } public void setSubScribe (int suscríbete) {this.subscribe = suscripción; } public String getSubScribeTime () {return suscriptETime; } public void setSubScribeTime (string suscriptETime) {this.subscribeTime = suscriptETime; } public String getNickName () {return Npokname; } 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 = país; } public String getProvince () {provincia de retorno; } public void setProvince (provincia de cadenas) {this.province = provincia; } public String getCity () {return City; } public void setCity (String City) {this.city = City; } public String getLanguage () {lenguaje de retorno; } public void setLanguage (lenguaje de cadena) {this.language = idioma; } public String getHeadImGurl () {return HeadImGurl; } public void setheadimgurl (string headimgurl) {this.headimgurl = headimgurl; }} Primero veamos la interfaz para obtener información del usuario:
https://api.weixin.qq.com/cgi-bin/user/info?access_token=access_token&openid=openid&lang=zh_cn
Según el análisis, se requiere un token para obtener la información básica del usuario.
Paquete com.souvc.weixin.pojo;/*** Nombre de clase: Token </br>* Descripción: Credenciales </br>* Desarrollador: SoUVC </br>* Tiempo de creación: 2015-11-27 </br>* Versión de lanzamiento: V1.0 </br>*/Public Class Token token {// Interface Access Credentials Private String Acceso; // Período de validez de credencial, unidad: segundos private int expires; 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; }} Solicitud de HTTPS, requerido el gerente de confianza
paquete com.souvc.weixin.util; import java.security.cert.certificateException; import java.security.cert.x509certificate; import javax.net.ssl.x509TrustManager;/*** Nombre de clase: MyX509TrustManager </BR>* Descripción: Manager de fideicomiso </br>* Desarrollo: SouVc </BRITIONSE: CREATION) 2015-11-27 </br> * Versión de lanzamiento: v1.0 </br> */public class myx509TrustManager implementa x509TrustManager {// Verifique el certificado del cliente public void checkclientTrusted (x509Certificate [] cadena, cadena authtype) Lanza certificado de certificado {} // verificar el servidor Certificate public void Void ttrusted (string certiTiTATiTATiTATATATATATATATATATATATATATATI String AuthType) lanza certificateException {} // devuelve el x509certificate de confianza [] getacceptedissuers () {return null; }} Encapsuló una clase pública:
paquete com.soUvc.weixin.util; import java.io.bufferedReader; import java.io.inputstream; import java.io.inputstreamreader; import java.io.outputstream; import java.io.unsupportedenCodeDingException; import java. 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.sf.json.jsonobject; importar erg.slf4j.Logger; org.slf4j.loggerFactory; import com.souvc.weixin.pojo.token;/*** Nombre de clase: CommonUtil </br>* Descripción: Clase de herramientas generales </br>* Desarrollador: SOUVC </br>* Tiempo de creación: 2015-11-27 </br>* Versión de lanzamiento: V1.0 </br>*/Public Classutil {Private STATIC STARIC LoggerFactory.getLogger (CommonUtil.class); // Credencial de obtención (get) Public final static string token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret"; /** * Send https request* * @param requestUrl Request Address* @param requestMethod Request Method (GET, POST) * @param outputStr The data submitted * @return JSONObject(get the attribute value of the json object through JSONObject.get(key)) */ public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = nulo; Pruebe {// cree el objeto SSLContext e inicialice TrustManager [] tm = {new MyX509TrustManager ()}; SslContext sslContext = sslContext.getInstance ("SSL", "SunJSse"); sslContext.init (NULL, TM, New Java.Security.SeCurerandom ()); // Obtenga el objeto SSLSocketFactory del objeto SSLContext anterior SSLSocketFactory ssf = sslContext.getSocketFactory (); Url url = nueva url (requestUrl); Httpsurlconnection conn = (httpsurlconnection) url.openconnection (); conn.setsslsocketFactory (SSF); Conn.setDoOutput (verdadero); Conn.setDoInput (verdadero); conn.setUsecaches (falso); // Establecer el método de solicitud (get/post) conn.setRequestMethod (requestMethod); // Escribir datos en la transmisión de salida if (null! = OutputStream) {outputStream outputStream = conn.getOutputStream (); // Presta atención al formato de codificación outputStream.Write (outputStr.getBytes ("UTF-8")); outputStream.close (); } // retrocede contenido de la transmisión de entrada inputStream inputStream = conn.getInputStream (); InputStreamReader inputStreamReader = new InputStreamReader (inputStream, "UTF-8"); BufferedReader BufferedReader = new BufferedReader (inputStreamReader); Cadena str = nulo; StringBuffer Buffer = new StringBuffer (); while ((str = bufferedReader.readline ())! = null) {buffer.append (str); } // libera el recurso bufferedreader.close (); inputStreamReader.Close (); inputStream.close (); inputStream = nulo; conn.disconnect (); jsonObject = jsonObject.FromObject (buffer.ToString ()); } Catch (ConnectException CE) {log.error ("Connect TimeOut: {}", CE); } catch (excepción e) {log.error ("HTTPS Solicitud Excepción: {}", e); } return jsonObject; } / *** Obtener credenciales de acceso a la interfaz** @Param AppID Credentials* @param AppSecret Key* @return* / public static token getToken (string appid, string appSecret) {token token = null; String requestUrl = token_url.replace ("appid", appid) .replace ("appSecret", appSecret); // Iniciar una solicitud GET para obtener credenciales 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; // no se pudo obtener token log.error ("no se pudo obtener token errcode: {} errmsg: {}", jsonObject.getInt ("errcode"), jsonObject.getString ("errmsg")); }} return token; } / ** * URL Coding (UTF-8) * * @param fuente * @return * / public static string urlencodeUtf8 (fuente de cadena) {string result = fuente; intente {resultado = java.net.urlencoder.enDode (fuente, "UTF-8"); } catch (UnsupportedEncodingException e) {E.PrintStackTrace (); } resultado de retorno; } / *** Determine la extensión del archivo basada en el tipo de contenido** @param ContentType Tipo de contenido* @return* / public static string getFileExt (String ContentType) {String fileExt = ""; if ("imagen/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"; devolver FileExt; }}Cómo obtener información básica del usuario:
/ *** Obtener información de usuario** @param Credenciales de acceso a la interfaz de AccessToken* @param OpenID ID de usuario* @return weixinuserinfo*/ public static weixinuserInfo getUserInfo (string accessToken, string openID) {weixInUserInfo weixinUserInfo = null; // Dirección de solicitud de empalme Cadena de cadena 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); // Obtener información del usuario jsonObject jsonObject = CommonUtil.httpsRequest (requestUrl, "get", null); if (null! = jsonObject) {try {weixInUserInfo = new WeixInUserInfo (); // ID de usuario weixinuserinfo.setopenID (jsonObject.getString ("OpenID")); // Sigue el estado (1 es el siguiente, 0 no lo sigue), no se puede obtener información restante cuando no sigue weixinuserinfo.setsubscribe (jsonObject.getInt ("suscríbete")); // Tiempo de atención del usuario weixinuserinfo.setsubsccribeTime (jsonObject.getString ("SUNSCRIBE_TIME")); // apodo weixinuserinfo.setNickName (jsonObject.getString ("Nickname")); // Género del usuario (1 es hombre, 2 es mujer, 0 es desconocido) weixinuserinfo.setsex (jsonObject.getInt ("sexo")); // El país del usuario weixinuserinfo.setCountry (jsonObject.getString ("país")); // La provincia del usuario weixinuserinfo.setProvince (jsonObject.getString ("provincia")); // La ciudad del usuario weixinuserinfo.setcity (jsonObject.getString ("ciudad")); // El idioma del usuario, el chino simplificado es zh_cn weixinuserinfo.setLanguage (jsonObject.getString ("lenguaje")); // usuario avatar weixinuserinfo.setheadimgurl (jsonObject.getString ("headimgurl")); } catch (Exception e) {if (0 == weixinuserInfo.getSubScribe ()) {log.error ("user {} ungg", weixinuserInfo.getOpenId ()); } else {int errorcode = jsonObject.getInt ("errcode"); String ErrormSg = jsonObject.getString ("errmsg"); LOG.Error ("Error al obtener información del usuario ERRCODE: {} ERRMSG: {}", ErrorCode, ErrormSg); }}} return weixInUserInfo; }Método de prueba: preste atención para reemplazar lo siguiente con su aplicación y clave secreta.
public static void main (String args []) {// Obtener credenciales de acceso de interfaz String AccessToken = CommonUtil.getToken ("xxxx", "xxxx"). getAccessToken (); / *** Obtener información de usuario*/ weixinuserInfo user = getUserInfo (AccessToken, "ook-yujvd9geegh6nrien-gnlrvw"); System.out.println ("OpenID:" + user.getOpenID ()); System.out.println ("Sigue el estado:" + user.getSubScribe ()); System.out.println ("Sigue el tiempo:" + user.getSubScribeTime ()); System.out.println ("Nickname:" + user.getNickName ()); System.out.println ("Gender:" + user.getSex ()); System.out.println ("país:" + user.getCountry ()); System.out.println ("Provincia:" + user.getProvince ()); System.out.println ("City:" + user.getCity ()); System.out.println ("Language:" + user.getLanguage ()); System.out.println ("Avatar:" + user.getheadimgurl ()); }Los efectos son los siguientes:
OpenID: OOK-YUJVD9GEGH6NRIEN-GNLRVW
Estado de la atención: 1
Sigue el tiempo: 1449021142
Apodo: Feng Shao Género: 1
País: Provincia de China: Guangdong Ciudad: Guangzhou Lengua: ZH_CN
Avatar: http://wx.qlogo.cn/mmopen/lozievyfca7azq7ckiamdpqicudngdec0nzb7zaljdl3tzfvfehwm1afqExicnideh0iqytt0nrip06ibg4w5wflasfffx9qib0/0
El contenido anterior presenta la información básica de los usuarios en el desarrollo de la plataforma pública WeChat para la versión Java real de WeChat. Espero que este artículo compartido sea útil para su trabajo y estudio futuro. Al mismo tiempo, gracias por su continuo apoyo al sitio web de Wulin Network.