WeChat에서 인터페이스 통화 자격 증명을 얻고 저장하는 방법 아래에 소개하겠습니다.
1. 설명
* 자세한 지침은 처음 두 기사를 참조하십시오.
*이 기사는 세 부분으로 나뉩니다.
인터페이스 호출 자격 증명 access_token의 역할 및 인터페이스 호출 자격 증명 access_token을 얻는 방법을 설명합니다.
access_token을 저장하기 위해 WeChat 문서에 언급 된 "중앙 제어 서버"의 구현을 구현하는 방법
*이 기사의 끝 에서이 기사의 첫 세 기사를 포함한 모든 데모 소스 코드가 제공됩니다.
인터페이스 호출 자격 증명을 얻고 저장 해야하는 이유 access_token
• 개발 시작 - 인터페이스 통화 자격 증명을 얻으십시오
◦ 문서 주소 : http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html
• 공식 웹 사이트 문서는 다음과 같은 설명을 제공합니다.
◦ Access_token은 공식 계정의 전 세계적으로 고유 한 티켓입니다. 공식 계정의 각 인터페이스를 호출 할 때 Access_Token이 필요합니다. 개발자는 제대로 저장해야합니다. Access_token의 저장은 최소 512 자 공간을 유지해야합니다. Access_Token의 유효 기간은 현재 2 시간이며 정기적으로 새로 고침해야합니다. 반복 된 획득은 지난번에 얻은 Access_token이 유효하지 않습니다.
•이해하다:
◦ 문서를 읽고 사용자 정의 메뉴, 자료 관리, 사용자 관리, 계정 관리 및 기타 고급 기능과 같은 많은 고급 기능이 요청에 대한 링크에 "access_token = token"이 있습니다. 이것은 글로벌 통화 매개 변수입니다. WeChat 백엔드는 WeChat 공식 계정의 보안을 보장하기 위해이 매개 변수를 기반으로 신원을 결정해야합니다.
◦ WeChat 서버로드 예외가 공식 계정의 프로그램 오류로 인해 발생하는 것을 방지하기 위해 기본적으로 각 공식 계정의 통화 인터페이스가 특정 한도를 초과 할 수 없습니다. 여기에서 WeChat은 하루에 2,000 회로 제한됩니다. 따라서이 매개 변수를 자주 호출하려면 개발자가 수동으로 저장해야하며 각 Access_Token은 2 시간 동안 유효합니다.
인터페이스 호출 자격 증명 access_token을 얻으십시오
• 공식 웹 사이트 문서는 다음과 같은 설명을 제공합니다.
◦ 인터페이스 통화 요청 설명
HTTP 요청 방법 : get
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=appsecret
■ 설명으로 돌아갑니다
정상적인 상황에서 WeChat은 다음 JSON 패킷을 공식 계정으로 반환합니다.
{ "access_token": "access_token", "expires_in": 7200}
오류가 발생하면 WeChat은 오류 코드 및 기타 정보를 반환합니다. JSON 패킷의 예는 다음과 같습니다 (이 예제는 잘못된 AppID 오류입니다).
{ "errcode": 40013, "errmsg": "invalid appid"}
•이해하다:
◦ 요청에 따라이 방법은 로컬로 직접 구현할 수 있습니다. URL에 액세스하는 것과 유사한 일반적인 GET 요청 일뿐입니다. 따라서 직접 작동하려면 코드 의이 부분을 서버에 업로드 할 필요가 없습니다.
◦ HTTP 요청 프로토콜은 GET 요청이므로 GET 요청을 통해 반환 스트림을 얻어야하며 반환 스트림은 JSON 형태입니다. 호출 할 때 Grant_type, Appid 및 Secret의 세 가지 매개 변수를 전달해야합니다. 그중에서도 Appid와 Secret은 이전 기사에서 설명 된 WeChat 공식 계정의 주요 매개 변수입니다. 반환 결과는 정확하고 잘못된 결과의 두 가지 유형으로 나뉩니다. Baidu : JSON】
◦ 사실, 우리는 주소 표시 줄에 문서에서 주어진 예를 직접 입력 할 수 있습니다 : https://api.weixin.qq.com/cgi-bin/token? grant_type = client_credential & appid = appid & secret = appsecret : "{"errcode ": 40013,"errmsg ":"유효하지 않은 appid 힌트 : [pqkl0120ic11] "}", 결과는 오류와 함께 반환됩니다.
◦ 위의 두 매개 변수를 테스트 번호 Appid 및 AppSecret로 바꾸면 "{"access_token ":"xrllr3fnf ... badamio ","expires_in ": 7200}"이라는 메시지가 표시됩니다.
◦ Java 코드를 통해 리턴 스트림을 얻고 Access_Token을 얻습니다.
•성취하다
비공개 정적 최종 최종 최종 max_time = 7200*1000; // wechat은 최대 access_token 유효성 시간 (ms) private static final string tag = "weixinapitest"; // tagprivate static final string appid = "wx889b **** b3666b0b8"; // appidPrivate scert = "6DA7676 *** F0A9F15FBF06027856BB"; // Secret Key/**이 테스트 사례는 Access_Token을 얻는 방법을 보여줍니다. * access_token은 공식 계정의 전 세계적으로 고유 한 티켓입니다. 공식 계정의 각 인터페이스를 호출 할 때 Access_Token이 필요합니다. */@testpublic void getAccess_token ()는 ioexception을 던지려고 {// api string urlstring = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credentity&appid +" + appid + "" + Secert; // URL URL을 만듭니다. requrl = new URL (urlstring); // 링크 가져 오기 httpsurlConnection httpsconn = (httpsurlConnection) requrl .openConnection (); // 연결의 입력 스트림을 가져옵니다. 응답 내용을 읽습니다. inputStreamReader isr = new inputStreamReader (httpsConn.getInputStream ()); // 서버의 응답 내용을 읽고 표시 char [] char = new char [1024]; 문자열 reslut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut += new String (chars, 0, len); } isr.close (); / * * JSON을 Javabean으로 변환합니다. gson */ gson gson = new gson (); // 획득 된 JSON을 Java의 Bean으로 변환 // 참고 : Access_Token Access_Token은 자체적으로 생성 된 Javabean입니다. access_token access_token = gson.fromjson (reslut, new Access_token (). getClass ()); if (access_token.getAccess_token ()! = null) {system.out.println ( "획득 된 access_token은" + access_token.getAccess_token ()); System.out.println ( "Access_Token의 유효한 시간은" + access_token.getexpires_in () + "s"); } else {system.out.println (tag + "access_token을 얻지 못했습니다. 확인하십시오"); }} 인터페이스 호출 자격 증명 access_token을 저장합니다
• 생각
얻은 access_token과 현재 시간을 파일에 저장하십시오. 추출 할 때, 현재 시간과 스토리지에 기록 된 시간의 시차를 결정하십시오. max_time보다 큰 경우 다시 접근하고 파일에서 얻은 액세스 된 컨텐츠를 교체하십시오. max_time보다 작은 경우 직접 얻으십시오.
•성취하다
/ * *이 방법은 Access_Token의 획득을 구현하고 2 시간의 Access_Token 만 저장하고 저장합니다. 2 시간을 초과하면 다시 접수하십시오. 2 시간을 초과하지 않으면 직접 얻으십시오. 이 메소드는 *: public static string getAccessToken ()에 따라 다릅니다. * * 아이디어 : 획득 한 Access_Token과 현재 시간을 파일에 저장하십시오. * 추출 할 때 현재 시간과 스토리지에 기록 된 시간 간의 시차를 결정하십시오. Max_Time보다 큰 경우 다시 접수하고 원래 컨텐츠*를 교체하기 위해 파일에 획득 한 액세스를 저장하고 max_time보다 적은 경우 직접 얻으십시오. */ @test public void getAvedAccess_token ()는 ioException {gson gson = new Gson (); 문자열 maccess_token = null; // access_token을 얻습니다. 파일 = 새 파일 ( "temp_access_token.temp"); // access_token이 저장된 위치 // 파일이 존재하지 않으면 if (! file.exists ()) file.createnewfile (); // 파일 크기가 0이면 처음으로 사용되었음을 의미하고 access_token if (file.length () == 0) {maccess_token = getAccessToken (); fileoutputStream fos = new FileOutputStream (file, false); // acceld_token at = new Access_token (); at.setaccess_token (maccess_token); at.setexpires_in (System.CurrentTimeMillis () + ""); 문자열 json = gson.tojson (at); fos.write ((json) .getBytes ()); fos.close (); } else {// 파일 내용 읽기 fileInputStream fis = new FileInputStream (파일); 바이트 [] B = 새로운 바이트 [2048]; int len = fis.read (b); 문자열 mjsonaccess_token = new String (b, 0, len); // 파일 내용을 읽습니다 access_token access_token = gson.fromjson (mjsonaccess_token, new Access_token (). getClass ()); if (access_token.getexpires_in ()! = null) {long savetime = long.parselong (access_token.getexpires_in ()); Long Nowtime = System.CurrentTimeMillis (); Long Remiantime = Nowtime -Savetime; // system.out.println (tag + "시차 :" + remiantime); if (remiantime <max_time) {access_token at = gson.fromjson (mjsonaccess_token, new access_token (). getClass ()); maccess_token = at.getAccess_token (); } else {maccess_token = getAccessToken (); fileoutputStream fos = new FileOutputStream (file, false); // acceld_token at = new Access_token (); at.setaccess_token (maccess_token); at.setexpires_in (System.CurrentTimeMillis () + ""); 문자열 json = gson.tojson (at); fos.write ((json) .getBytes ()); fos.close (); }}}} system.out.println ( "access_token은 다음과 같습니다." + maccess_token); } / * * weChat 서버 액세스 권한을 얻습니다. 이 부분은 getAccess_token ()과 일치하며 주석이 추가되지 않습니다. 문자열 reslut = null; try {url requrl = new URL (urlstring); httpsurlconnection httpsconn = (httpsurlconnection) requrl .openconnection (); inputStreamReader isr = new inputStreamReader (httpsConn.getInputStream ()); char [] chars = new char [1024]; reslut = ""; int len; while ((len = isr.read (chars))! = -1) {reslut += new String (chars, 0, len); } isr.close (); } catch (ioexception e) {e.printstacktrace (); } gson gson = new gson (); access_token access_token = gson.fromjson (reslut, new Access_token (). getClass ()); if (access_token.getAccess_token ()! = null) {return access_token.getAccess_token (); } else {return null; }} 처음 세 기사는 소스 코드를 보여줍니다 : http://xiazai.vevb.com/201606/yuanma/weixinapidemo(Vevb.com).rar
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.