Follower가 공식 계정과 상호 작용 한 후 공식 계정은 다음의 OpenID를 얻을 수 있습니다 (암호화 된 WeChat 계정, 각 공식 계정에 대한 각 사용자의 OpenID는 고유합니다. 다른 공식 계정의 경우 동일한 사용자의 OpenID가 다릅니다).
공식 계정은 닉네임, 아바타, 성별, 도시, 언어 및 후속 조치 시간을 포함 하여이 인터페이스를 통해 OpenID를 기반으로 기본 사용자 정보를 얻을 수 있습니다.
개발자는 OpenID를 통해 기본 사용자 정보를 얻을 수 있습니다. HTTPS 프로토콜을 사용하십시오.
우리는 공식 문서를 살펴볼 수 있습니다 : 사용자에 대한 기본 정보 얻기.
인터페이스 호출 요청 설명
HTTP 요청 방법 : get
https://api.weixin.qq.com/cgi-bin/user/info?token=access_token&openid=openid&lang=zh_cn
매개 변수 설명
| 매개 변수 | 필요합니까? | 설명 |
|---|---|---|
| access_token | 예 | 인터페이스 자격 증명을 호출합니다 |
| OpenID | 예 | 일반 사용자의 신원은 현재 공식 계정에 고유합니다. |
| 랭 | 아니요 | 국가 및 지역 언어 버전으로 돌아 가기, Zh_cn Simplified Chinese, Zh_tw 전통 중국어, EN English |
설명으로 돌아갑니다
정상적인 상황에서 WeChat은 다음 JSON 패킷을 공식 계정으로 반환합니다.
{ "구독": "OpenID": "O6_BMJRPTLM6_2SGVT7HMZOPFL2M", "별명": "밴드", "섹스": 1, "언어": "ZH_CN", "City": "Guangzhou", "Province": "Guangdong", "Headim": "Headimgur": " "http://wx.qlogo.cn/mmopen/g3monuztnhkdmzicilibx6iafqac56vxlsufpb6n5wksyvy0chqkkiajsgq1dzutogvllrhjberq4emsv84eavhiaiceqxibjxcfhe/0", ",", ",": 1382694957, "UnionID": "O6_BMASDASDSAD6_2SGVT7HMZOPFL" "비고": "", "GroupId": 0}매개 변수 설명
| 매개 변수 | 설명 |
|---|---|
| 구독하다 | 사용자가 공식 계정 ID에 가입하는지 여부? 값이 0 인 경우 사용자가 공식 계정을 따르지 않았으며 나머지 정보를 가져올 수 없음을 의미합니다. |
| OpenID | 현재 공식 계정에 고유 한 사용자 ID |
| 별명 | 사용자의 별명 |
| 섹스 | 사용자의 성별, 값이 1 일 때, 그것은 남성이고, 값이 2 일 때, 그것은 여성이고, 값이 0 일 때, 그것은 알 수 없습니다. |
| 도시 | 사용자의 도시 |
| 국가 | 사용자 국가 |
| 주 | 사용자가있는 주 |
| 언어 | 사용자의 언어, 단순화 된 중국어는 ZH_CN입니다 |
| Headimgurl | 사용자의 아바타, 마지막 값은 사각형 아바타의 크기를 나타냅니다 (0, 46, 64, 96 및 132 값은 선택 사항이며 0은 640*640 Square Avatar를 나타냅니다). 이 항목은 사용자에게 아바타가 없을 때 비어 있습니다. 사용자가 아바타를 변경하면 원래 아바타 URL이 유효하지 않습니다. |
| subscripe_time | 사용자는 타임 스탬프로 시간에 중점을 둡니다. 사용자가 여러 번 따랐다면 마지막으로 따라야합니다. |
| UnionID | 이 필드는 사용자가 공식 계정을 WeChat 오픈 플랫폼 계정에 바인딩 한 후에 만 나타납니다. 참조 : 사용자 개인 정보 얻기 (UnionID 메커니즘) |
| 주목 | 팬에 대한 공식 계정 운영자 메모. 공식 계정 운영자는 WeChat Public Platform 사용자 관리 인터페이스의 팬에게 메모를 추가 할 수 있습니다. |
| GroupId | 사용자의 그룹 ID |
오류가 발생하면 WeChat은 오류 코드 및 기타 정보를 반환합니다. JSON 패킷의 예는 다음과 같습니다 (이 예제는 잘못된 AppID 오류입니다).
{ "errcode": 40013, "errmsg": "invalid appid"}위의 정보를 기반으로 사용자의 기본 정보를 저장하기 위해 사용자 정보 클래스를 정의합니다.
Com.souvc.weixin.pojo;/*** 클래스 이름 : weixinuserinfo </br>* 설명 : wechat 사용자의 기본 정보 </br>* 개발자 : souvc </br>* 생성 시간 : 2015-11-27 </br>* 릴리스 : v1.0 </br>/public class weixinusinfo {// user id privue stringid; // 상태를 따르십시오 (1은 팔로우하고 0이 팔로우하지 않습니다), 개인 int 구독을 따르지 않을 때는 나머지 정보를 얻을 수 없습니다. // 사용자 팔로우 시간, 타임 스탬프. 사용자가 여러 번 따랐다면 마지막으로 개인 문자열 구독을 따르십시오. // 닉네임 개인 문자열 별명; // 사용자의 성별 (1은 남성, 2 명은 여성, 0은 알 수 없음) 개인 int 섹스; // 사용자 국가 개인 문자열 국가; // 사용자의 지방 개인 문자열 주; // 사용자의 도시 개인 문자열 도시; // 사용자의 언어, 단순화 된 중국어 : ZH_CN 개인 문자열 언어; // 사용자의 아바타 개인 문자열 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 = 구독; } public String getSubScribetime () {return subscribetime; } public void setsubscribetime (String subscribetime) {this.subscribetime = subscribetime; } public String getNickName () {return 닉네임; } public void setNickName (문자열 별명) {this.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 = 국가; } public String getProvince () {return province; } public void setprovince (String Province) {this.province = 지방; } public String getCity () {return City; } public void setcity (String City) {this.city = City; } public String getLanguage () {return language; } public void setLanguage (문자열 언어) {this.language = 언어; } public String getheadimgurl () {return headimgurl; } public void setheadimgurl (String headimgurl) {this.headimgurl = headimgurl; }} 먼저 사용자 정보를 얻기위한 인터페이스를 살펴 보겠습니다.
https://api.weixin.qq.com/cgi-bin/user/info?token=access_token&openid=openid&lang=zh_cn
분석에 따르면 사용자의 기본 정보를 얻으려면 토큰이 필요합니다.
package com.souvc.weixin.pojo;/*** 클래스 이름 : Token </br>* 설명 : 자격 증명 </br>* 개발자 : souvc </br>* 생성 시간 : 2015-11-27 </br>* 릴리스 버전 : v1.0 </br>*/public class token {// 인터페이스 액세스 자격 증명; // 자격 증명 유효성 기간, 단위 : Seconds Private int expiresin; 공개 문자열 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 요청, 신탁 관리자가 필요합니다
package com.souvc.weixin.util; import java.security.cert.certificateexception; import java.security.cert.x509certificate; import javax.net.ssl.x509trustmanager;/*** 클래스 이름 : myx509trustmanager </br> description : 신탁 관리자 </br> 개발자 :/bruv> 2015-11-27 </br> * 릴리스 버전 : v1.0 </br> */public class myx509trustmanager x509trustmanager {// 클라이언트 인증서 확인 public void checkclientTrusted (x509Certificate [] 체인, Strowtepe) 인증서 {} // void void void void void (x509Certusted) String Authtype)는 인증서 exception {} // 신뢰할 수있는 x509certificate [] getAcceptedIssuers () {return null; }} 공개 클래스 캡슐화 :
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.connectection; java.net javax.net.ssl.httpsurlconnection; import javax.net.ssl.sslcontext; 가져 오기 javax.net.ssl.ssl.sslsocketfactory; import javax.net.sssl.trustmanager; import net.sf.json.jsonexception; import net.sf.json.jsonob.jsonob.jsonob. org.slf4j.loggerfactory; import com.souvc.weixin.pojo.token;/*** 클래스 이름 : commonutil </br>* 설명 : 일반 도구 클래스 </br>* 개발자 : souvc </br>* 생성 시간 : 2015-11-27 </br>* 릴리스 버전 : v1.0 </brutil*/public commontil </bruv>* loggerfactory.getLogger (commonutil.class); // 자격 증명 획득 (get) 공개 최종 정적 문자열 token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret"; / ** * https 요청 * * @param requesturl 요청 주소 주소 * @param requestod request method (get, post) * @param outputstr * @return jsonobject (@return jsonobject * @return jsonobject (jsonobject.get) */ public jsonobject httpsrequest (string requestorl, string upppeatod) {jsonobject httpsrequest (string requestod) {jsonobjec jsonobject = null; {// sslcontext 객체를 만들고 trustmanager [] tm = {new myx509trustmanager ()}; sslcontext sslcontext = sslcontext.getInstance ( "ssl", "sunjsse"); sslcontext.init (null, tm, new java.security.securerandom ()); // 위의 sslcontext 객체에서 sslsocketfactory 객체를 가져옵니다. sslsocketfactory ssf = sslcontext.getSocketFactory (); url url = 새 URL (requestUrl); httpsurlconnection conn = (httpsurlConnection) url.openConnection (); conn.setsslsocketfactory (SSF); conn.setdooutput (true); conn.setdoinput (true); Conn.setUeCaches (False); // 요청 메소드를 설정 (get/post) conn.setRequestMethod (requestMethod); // (null! = outputStream) if If If If If If If If If If If If에 데이터를 작성합니다. // 인코딩 형식 outputStream.write (outputstr.getBytes ( "UTF-8"))에주의를 기울입니다. outputStream.close (); } // 입력 스트림에서 컨텐츠를 반환 inputStream inputStream = conn.getInputStream (); inputStreamReader inputStreamReader = new inputStreamReader (inputStream, "utf-8"); bufferedReader bufferedReader = new bufferedReader (inputStreamReader); 문자열 str = null; StringBuffer buffer = new StringBuffer (); while ((str = bufferedReader.Readline ())! = null) {buffer.append (str); } // resource bufferedReader.close ()를 릴리스합니다. inputStreamReader.close (); inputStream.close (); inputStream = null; conn.disconnect (); jsonobject = jsonobject.fromobject (buffer.tostring ()); } catch (connectexception ce) {log.error ( "Connect TimeOut : {}", ce); } catch (예외 e) {log.error ( "https 요청 예외 : {}", e); } return JsonObject; } / *** 인터페이스 액세스 자격 증명 가져 오기** @param appid 자격 증명* @param appsecret 키* @return* / public static token gettoken (String appid, String appsecret) {Token token = null; 문자열 requestUrl = token_url.replace ( "appid", appid) .replace ( "appsecret", appsecret); // 자격 증명을 얻기위한 GET 요청을 시작합니다 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; // 토큰 log.error를 얻지 못했습니다 ( "Token errcode를 얻지 못했습니다 : {} errmsg : {}", jsonobject.getInt ( "errcode"), jsonObject.getString ( "errmsg")); }} 리턴 토큰; } / ** * URL 인코딩 (UTF-8) * * @param 소스 * @return * / public static String urlencodeutf8 (문자열 소스) {문자열 result = source; try {result = java.net.urlencoder.encode (소스, "utf-8"); } catch (UnsupportedEncodingException e) {e.printstacktrace (); } 반환 결과; } / *** 콘텐츠 유형을 기반으로 파일 확장자 결정** @param contenttype 컨텐츠 유형* @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"; 반환 파일 텍스트; }}기본 사용자 정보를 얻는 방법 :
/ *** 사용자 정보 가져 오기** @param accesstoken 인터페이스 액세스 자격 증명* @param openid 사용자 id* @return weixinuserinfo*/ public static weixinuserinfo getUserInfo (String accessToken, String OpenID) {weixinuserinfo weixinuserinfo = null; // splice 요청 주소 문자열 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 (); // user id weixinuserinfo.setopenid (jsonobject.getstring ( "openid")); // 상태를 따르십시오 (1은 팔로우하고 0이 팔로우하지 않습니다), weixinuserinfo.setsubscribe (jsonobject.getint ( "subscribe"))를 따르지 않을 때 나머지 정보를 얻을 수 없습니다. // 사용자주의 시간 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")); // user avatar weixinuserinfo.setheadimgurl (jsonobject.getstring ( "headimgurl")); } catch (예외 e) {if (0 == weixinuserInfo.getSubscribe ()) {log.error ( "user {} unsong", weixinuserinfo.getopenid ()); } else {int errorCode = jsonObject.getInt ( "errcode"); String errormsg = jsonobject.getString ( "errmsg"); log.error ( "사용자 정보를 얻지 못했습니다. errcode : {} errmsg : {}", errorcode, errormsg); }}} return weixinuserinfo; }테스트 방법 : 다음을 Appid 및 Secret 키로 교체하기 위해주의를 기울이십시오.
public static void main (String Args []) {// 인터페이스 액세스 자격 증명 GET accesstoken = commonutil.getToken ( "xxxx", "xxxx"). getAccesstoken (); / *** 사용자 정보 받기*/ weixinuserinfo user = getUserInfo (accesstoken, "ook-yujvd9gegh6nrien-gnlrvw"); System.out.println ( "OpenID :" + user.getOpenid ()); System.out.println ( "상태 팔로우 :" + user.getSubscribe ()); System.out.println ( "다음 시간을 따르십시오 :" + 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 ( "City :" + user.getCity ()); System.out.println ( "언어 :" + user.getLanguage ()); System.out.println ( "아바타 :" + user.getheadimgurl ()); }효과는 다음과 같습니다.
OpenID : ook-yujvd9gegh6nrien-gnlrvw
주의 상태 : 1
시간을 따르십시오 : 1449021142
별명 : Feng Shao 성별 : 1
국가 : 중국성 : 광동시 : 광저우 언어 : Zh_CN
아바타 : http://wx.qlogo.cn/mmopen/lozievyfca7azq7ckiamdpqicudngdec0nzb7zaljdl3tzfvfehwm1afqxnicnideh0iqyttt0nrip06ibg4w5w5wflasffx9qqqib0/0
위의 내용은 WeChat의 실제 Java 버전을위한 WeChat Public 플랫폼 개발에서 사용자의 기본 정보를 소개합니다. 이 기사 공유가 미래의 작업과 공부에 도움이되기를 바랍니다. 동시에 Wulin Network 웹 사이트에 대한 지속적인 지원에 감사드립니다.