Depois que o seguidor interage com a conta oficial, a conta oficial pode obter o OpenID do seguinte (a conta do WeChat criptografada, cada usuário OpenID para cada conta oficial é exclusiva. Para diferentes contas oficiais, o mesmo usuário OpenId é diferente).
A conta oficial pode obter informações básicas do usuário com base no OpenID por meio dessa interface, incluindo apelido, avatar, gênero, cidade, idioma e tempo de acompanhamento.
Os desenvolvedores podem obter informações básicas do usuário através do OpenID. Use o protocolo HTTPS.
Podemos dar uma olhada na documentação oficial: obtendo informações básicas sobre os usuários.
Descrição da solicitação de chamada de interface
Método de solicitação http: obtenha
https://api.weixin.qq.com/cgi-bin/user/info?access_token=access_token&openid=openid&lang=zh_cn
Descrição do parâmetro
| parâmetro | É necessário | ilustrar |
|---|---|---|
| Access_token | sim | Credenciais de interface de chamada |
| OpenId | sim | A identidade de um usuário comum é exclusivo da conta oficial atual |
| Lang | não | Voltar ao país e versão do idioma regional, ZH_CN simplificado chinês, zh_tw chinês tradicional, en inglês |
Voltar à descrição
Em circunstâncias normais, o WeChat retornará o seguinte pacote JSON à conta oficial:
{"Subscribe": 1, "OpenId": "o6_bmjrptlm6_2sgvt7hmzopfl2m", "apelido": "banda", "sexo": 1, "idioma": "zh_cn", "city": "guangzou", "província": "guangdong", "country" ":" "http://wx.qlogo.cn/mmopen/g3monuztnhkdmzicilibx6iafqac56vxlsufpb6n5wksyvy0chqkkiajsgq1dzutogvjbrhjberq4emss84eArghIATEQ1DZUTGVJBRHJBERQ4EMS84EATHIATHETHETQ1DZLIRHJBERQ4EMS84EArghIce 1382694957, "UnionId": "o6_bmasdasdsad6_2sgvt7hmzopfl" "observar": "", "groupID": 0}Descrição do parâmetro
| parâmetro | ilustrar |
|---|---|
| Inscreva -se | Se o usuário assina o ID da conta oficial? Se o valor for 0, significa que o usuário não seguiu a conta oficial e não pode obter as informações restantes. |
| OpenId | ID do usuário, exclusivo da conta oficial atual |
| apelido | Apelido do usuário |
| sexo | O gênero do usuário, quando o valor é 1, é homem, quando o valor é 2, é feminino e quando o valor é 0, é desconhecido |
| cidade | A cidade do usuário |
| país | País de usuário |
| província | A província onde o usuário está localizado |
| linguagem | O idioma do usuário, chinês simplificado é zh_cn |
| Headimgurl | O avatar do usuário, o último valor representa o tamanho do avatar quadrado (existem 0, 46, 64, 96 e 132 valores são opcionais e 0 representa 640*640 Avatar quadrado). Este item está vazio quando o usuário não tem avatar. Se o usuário alterar o avatar, o URL do avatar original será inválido. |
| Subscribe_time | O usuário se concentra no tempo, como um registro de data e hora. Se o usuário o seguiu muitas vezes, então a última vez para seguir |
| UnionId | Este campo só aparecerá depois que o usuário vincula a conta oficial à conta da plataforma WeChat Open. Veja: Obtenção de informações pessoais do usuário (mecanismo união) |
| Observação | Notas dos operadores de contas oficiais para os fãs. Os operadores oficiais de contas podem adicionar notas aos fãs na interface de gerenciamento de usuários da plataforma pública do WeChat. |
| grupo | O ID do grupo do usuário |
Quando ocorre o erro, o WeChat retornará códigos de erro e outras informações. O exemplo do pacote JSON é o seguinte (este exemplo é um erro inválido do Appid):
{"errcode": 40013, "errmsg": "inválido appid"}Com base nas informações acima, definimos uma classe de informações do usuário para armazenar as informações básicas do usuário.
pacote com.souvc.weixin.pojo;/*** Nome da classe: weixinuserinfo </br>* Descrição: Informações básicas dos usuários do WeChat </br>* desenvolvedor: souvc </br>* tempo de criação: 2015-11-27 </br>* libere versão: v1.0 </br>*/public Classin Weixin Weixin WHEIX WHUSTIRIR WHIXINUR WHEIX*. // Siga o status (1 está seguindo, 0 não está seguindo), nenhuma informação restante pode ser obtida quando não estiver seguindo o privado Int assinando; // Usuário segue a hora, um registro de data e hora. Se o usuário seguiu muitas vezes, leve a última vez para seguir o String SubscriTETime de String Private; // apelido de string privada apelido; // O sexo do usuário (1 é homem, 2 é mulher, 0 é desconhecido) Private Int Sex; // País de cordas privadas do país do usuário; // Província do usuário Província de cordas privadas; // Cidade da cidade do usuário Cidade de cordas privadas; // idioma do usuário, chinês simplificado: zh_cn private string idioma; // AVATAR PRIVADO DO AVATAR DO AVATAR CEADIMGURL; public String getOpenId () {return OpenId; } public void SetOpenId (String OpenId) {this.openid = OpenId; } public int getSubScribe () {return assinando; } public void SetsubScribe (int assinscribe) {this.subScribe = assinscribe; } public string getSubScriBtime () {return subscrintTime; } public void SetsubScriBtime (String subscrintTime) {this.subScriptETime = subscrintTime; } public String getNickName () {return apelido; } public void setNickName (String apelido) {this.nickname = apelido; } public int getSex () {return Sex; } public void setSex (int sexo) {this.sex = sexo; } public string getCountry () {Return country; } public void setCountry (string country) {this.country = country; } public string getProvince () {Província de retorno; } public void setProvince (Província de String) {this.province = Província; } public string getCity () {return City; } public void setCity (string city) {this.city = city; } public string getLanguage () {retornar linguagem; } public void setLanguage (string idioma) {this.language = idioma; } public string getheadImGurl () {return headimgurl; } public void setheadImgurl (string headiMgurl) {this.headimgurl = headimgurl; }} Vamos primeiro olhar para a interface para obter informações do usuário:
https://api.weixin.qq.com/cgi-bin/user/info?access_token=access_token&openid=openid&lang=zh_cn
De acordo com a análise, é necessário um token para obter as informações básicas do usuário.
pacote com.souvc.weixin.pojo;/*** Nome da classe: token </br>* Descrição: Credenciais </br>* Desenvolvedor: souvc </br>* Tempo de criação: 2015-11-27 </br>* versão da versão: // Período de validade da credencial, unidade: segundos private int expira; public String getAccessToken () {return AccessToken; } public void setAccessToken (string accessToken) {this.acccessToken = accessToken; } public int getExpiresin () {return expira; } public void setexpiresin (int expiresin) {this.expiresin = expiresin; }} Solicitação HTTPS, gerenciador de confiança necessário
pacote com.souvc.weixin.util; importar java.security.cert.certificateException; importar java.security.cert.x509certificate; import javax.net.sssl.x509trustmanager;/*** Nome da classe: myx509rmanager </br>* description: 2015-11-27 </br> * Versão de liberação: v1.0 </br> */public class Myx509TrustManager implementa x509TrustManager {// Verifique o certificado do cliente public void CheckClientTrusted (x509Certificate [] Chain Chain, o Chain de string) lança certificado de certificação (} //////18509959CTr. String authtype) lança certificadoException {} // retorna o x509Certificate confiável [] getAceceptEdissuers () {return null; }} Encapulou uma aula pública:
pacote com.souvc.weixin.util; importar java.io.bufferedreader; importar java.io.inputStream; importar java.io.inputStreamReader; importar java.io.outputStream; import java.io.unspportEngEngException; importATream; javax.net.ssl.httpsurlConnection; importar javax.net.ssl.ssslContext; importar javax.net.sssl.ssockfactory; import javax.net.ssl.trustmanager; import.sf.json.jsonexception; import.sf.json.json.json.json.json.jsonbranager; net.sf.json.jsonestemply; org.slf4j.loggerfactory; importar com.souvc.weixin.pojo.token;/*** Nome da classe: Commonutil </br>* Descrição: Classe de ferramentas gerais </br>* Desenvolvedor: SOUVC </br>* Time de criação: 2015-11-27 </br>* Release versão: v1.0 </br> LoggerFactory.getLogger (Commonutil.class); // credencial obtenção (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; tente {// crie objeto SSLContext e inicialize TrustManager [] tm = {new Myx509TrustManager ()}; SslContext sslContext = sslContext.getInstance ("ssl", "sunjsse"); sslContext.init (null, tm, New Java.Security.SecureRandom ()); // Obtenha o objeto SSLSocketFactory do objeto SSLContext acima SSLSocketFactory ssf = sslContext.getSocketFactory (); Url url = novo url (requesturl); HttpsurlConnection Conn = (httpsurlConnection) url.openconnection (); Conn.SetsSlSocketFactory (SSF); Conn.SetDoOutput (true); Conn.SetDoinput (true); Conn.SetUseCaches (false); // defina o método de solicitação (get/post) Conn.SetRequestMethod (requestMethod); // Escreva dados no fluxo de saída se (null! = OutputStream) {outputStream outputStream = Conn.GetOutputStream (); // preste atenção ao formato de codificação outputStream.write (outputStr.getBytes ("utf-8")); outputStream.Close (); } // retorna conteúdo do fluxo de entrada inputStream inputStream = conn.getInputStream (); InputStreamReader inputStreamReader = new InputStreamReader (InputStream, "UTF-8"); BufferReader buffaredReader = new BufferredReader (InputStreamReader); String str = null; StringBuffer buffer = new StringBuffer (); while ((str = bufferredreader.readline ())! = null) {buffer.append (str); } // Libere o recurso bufferreader.close (); inputStreamReader.close (); inputStream.close (); inputStream = nulo; Conn.Disconnect (); jsonObject = jsonObject.FromObject (buffer.toString ()); } catch (ConnectException CE) {Log.error ("Connect Timeout: {}", CE); } catch (Exceção e) {Log.error ("HTTPS Solicitação Exceção: {}", e); } retornar jsonObject; } / *** Obtenha credenciais de acesso à interface** @param appid credenciais* @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); // inicia uma solicitação GET para obter credenciais jsonObject jsonObject = httpsRequest (requesturl, "get", null); if (null! = jsonObject) {tente {token = new token (); token.setAccessToken (jsonObject.getString ("access_token")); token.setexpiresin (jsonObject.getint ("expires_in")); } catch (jsonexception e) {token = null; // falhou ao obter token log.error ("Falha ao obter token errcode: {} errmsg: {}", jsonObject.getInt ("errcode"), jsonObject.getString ("errmsg"); }} retornar token; } / ** * URL Encoding (utf-8) * * @param fonte * @return * / public static string urlencodeUtf8 (string fonte) {string resultado = fonte; tente {resultado = java.net.urlencoder.encode (fonte, "utf-8"); } Catch (UnsupportEdEncodingException e) {E.PrintStackTrace (); } resultado de retorno; } / *** Determine a extensão do arquivo com base no tipo de conteúdo** @param contentType Content Type* @return* / public static string getFileExt (string contentType) {string fileExt = ""; if ("imagem/jpeg" .equals (contentType)) fileExt = ".jpg"; caso contrário, if ("áudio/mpeg" .equals (contentType)) fileExt = ".mp3"; caso contrário, if ("áudio/amr" .equals (contentType)) fileext = ".amr"; caso contrário, if ("video/mp4" .equals (contentType)) fileExt = ".mp4"; caso contrário, if ("video/mpeg4" .equals (contentType)) fileExt = ".mp4"; return fileext; }}Como obter informações básicas do usuário:
/ *** Obtenha informações do usuário** @param accessToken Interface Access Credenciais* @param OpenId ID do usuário* @return weixinuserinfo*/ public static weixinuserinfo getUserinfo (string accessToken, string OpenId) {weixinuserinfo weixinuserinfo = null; // Endereço da solicitação de emenda 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); // Obter informações do usuário jsonObject jsonObject = CommonUtil.httpsRequest (requesturl, "get", null); if (null! = jsonObject) {tente {weixinUserinfo = new WeixinUserinfo (); // ID do usuário weixinuserinfo.setOpenId (jsonObject.getString ("OpenId")); // Siga o status (1 está seguindo, 0 não está seguindo), nenhuma informação restante pode ser obtida quando não seguir o weixinuserinfo.setsubscribe (jsonObject.getint ("assinando")); // Time de atenção do usuário weixinuserinfo.setsubScrinceTime (jsonObject.getString ("subscribe_time")); // apelido weixinuserinfo.setnickname (jsonObject.getString ("apelido")); // Gênero do usuário (1 é homem, 2 é feminino, 0 é desconhecido) weixinuserinfo.setSex (jsonObject.getint ("sexo"); // o país do usuário weixinuserinfo.setCountry (jsonObject.getString ("country")); // a província do usuário weixinuserinfo.setProvince (jsonObject.getString ("Província")); // a cidade do usuário weixinuserinfo.setcity (jsonObject.getString ("City")); // O idioma do usuário, chinês simplificado é zh_cn weixinuserinfo.setLanguage (jsonObject.getString ("idioma")); // usuário Avatar weixinuserinfo.setheadImgurl (jsonObject.getString ("headimgurl")); } catch (Exceção e) {if (0 == weixinuserinfo.getSubScribe ()) {log.error ("user {} unsong", weixinuserinfo.getOpenid ()); } else {int errorCode = jsonObject.getInt ("errcode"); String errorMsg = jsonObject.getString ("errmsg"); log.error ("Falha ao obter informações do usuário errcode: {} errmsg: {}", errorCode, errorMsg); }}} retornar weixinuserinfo; }Método de teste: preste atenção para substituir o seguinte pela sua chave Appid e Secret.
public static void main (string args []) {// Obtenha credenciais de acesso à interface String accessToken = Commonutil.getToken ("xxxx", "xxxx"). getAccessToken (); / *** Obtenha informações do usuário*/ weixinuserinfo user = getUserinfo (accessToken, "ook-yujvd9geegh6nrien-gnlrvw"); System.out.println ("OpenId:" + user.getOpenId ()); System.out.println ("Siga o status:" + user.getSubScribe ()); System.out.println ("A seguir:" + user.getSubScriBtime ()); System.out.println ("apelido:" + user.getnickname ()); System.out.println ("gênero:" + user.getSex ()); System.out.println ("country:" + user.getCountry ()); System.out.println ("Província:" + user.getProvince ()); System.out.println ("City:" + user.getCity ()); System.out.println ("Idioma:" + user.getLanguage ()); System.out.println ("avatar:" + user.getheadImGurl ()); }Os efeitos são os seguintes:
OpenId: ook-yujvd9geegh6nrien-gnlrvw
Status da atenção: 1
Horário - 1449021142
Apelido: Feng Shao Gênero: 1
País: Província da China: Guangdong City: Guangzhou Language: ZH_CN
Avatar: http://wx.qlogo.cn/mmopen/lOZIEvyfCa7aZQ7CkiamdpQicUDnGDEC0nzb7ZALjdl3TzFVFEHWM1AFqEXnicNIDeh0IQYTt0NrIP06ibg4W5WflASfFfX9qqib0/0
O conteúdo acima apresenta as informações básicas dos usuários no desenvolvimento da plataforma pública do WeChat para a versão java real do WeChat. Espero que este compartilhamento de artigo seja útil para o seu trabalho e estudo futuro. Ao mesmo tempo, obrigado por seu suporte contínuo para o site da Wulin Network.