weChatでインターフェイスコールクレデンシャルを取得して保存する方法、以下に紹介します
1。説明
*詳細な指示については、最初の2つの記事を参照してください。
*この記事は3つの部分に分かれています。
インターフェイスの役割は資格情報を呼び出しますaccess_tokenとインターフェイスを取得する方法を説明します資格情報access_token
Access_Tokenを保存するためにWeChatドキュメントに記載されている「中央制御サーバー」の実装を実装する方法
*この記事の最後に、この記事の最初の3つの記事を含むすべてのデモンストレーションソースコードが示されます。
インターフェイスコールクレデンシャルアクセスを取得して保存する必要があるのはなぜですか
•開発を開始 - インターフェイスコール資格情報を取得します
◦ドキュメントアドレス: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の公式アカウントのセキュリティを確保するために、このパラメーターに基づいてIDを決定する必要があります。
◦WECHATサーバーのロード例外が公式アカウントのプログラムエラーによって引き起こされるのを防ぐために、デフォルトでは、各公式アカウントのコールインターフェイスは特定の制限を超えることはできません。ここでは、WeChatは1日2,000回に制限されています。したがって、このパラメーターを頻繁に呼び出す場合は、開発者が手動で保存する必要があり、各Access_Tokenは2時間有効です。
インターフェイスコールクレデンシャルAccess_Tokenを取得します
•公式ウェブサイトのドキュメントは、次の説明を示しています。
◦インターフェイスコールリクエストの説明
HTTPリクエスト方法:get
https://api.weixin.qc.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": "無効なappid"}
•理解する:
◦リクエストをゲットすると、この方法はローカルで直接実装できます。 URLへのアクセスと同様に、通常のGETリクエストであるためです。したがって、直接動作するためにコードのこの部分をサーバーにアップロードする必要はありません。
◦HTTPリクエストプロトコルはGETリクエストです。つまり、GETリクエストを介してリターンストリームを取得する必要があり、返品ストリームはJSONの形式です。呼び出すときは、grant_type、appid、secretの3つのパラメーターを携帯する必要があります。その中で、AppidとSecretは、前の記事で説明されているWechat公式アカウントの重要なパラメーターです。リターン結果は、正しい結果と間違った結果の2つのタイプに分けられます。 【バイドゥ:JSON】
◦実際には、アドレスバーのドキュメントで指定された例を直接入力できます:https://api.weixin.qq.com/cgi-bin/token? grant_type = client_credential&appid = appid&secret = appsecret、 "{" errcode ":40013、" errmsg ":" nivalid appidヒント:[pqkl0120ic11] "}"、これは無効な要求であるため、エラーが返されるためです。
◦上記の2つのパラメーターをテスト番号AppIDおよびAppSecretに置き換えると、次のメッセージが表示されます。 "{" Access_Token ":" xrllrr3fnf ... badamio "、" expires_in ":7200}"。
◦ここでは、Javaコードを介してリターンストリームを取得し、Access_Tokenを取得します。
•成し遂げる
プライベートスタティックファイナルロングMAX_TIME = 7200*1000; // WECHATは最大アクセスを許可します。 "6DA7676 *** F0A9F15FBF06027856BB"; // Secret Key/**このテストケースは、Access_Tokenを取得する方法を示しています。 * Access_Tokenは、公式アカウントのグローバルにユニークなチケットです。公式アカウントの各インターフェイスを呼び出すときは、Access_Tokenが必要です。 */@testpublic void getaccess_token()throws ioexception {// api string urlstring = "https://api.weixin.qqc.com/cgi-bin/token?grant_type = crient_creient_credentical&apd =" + appid + " +" + " +" + " + // url 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(); / * * JSONをJavabeanに変換します。 gson */ gson gson = new gson(); //取得したjsonをjavaの豆に変換するサードパーティのジャーが導入されました。 Access_Token Access_Token = GSON.FROMJSON(reslut、new Access_Token()。getClass()); if(access_token.getacs_token()!= null){system.out.println( "取得したAccess_token is:" + access_token.getaccess_token()); system.out.println( "アクセスの有効な時間は:" + access_token.getExpires_in() + "s"); } else {system.out.println(tag + "access_tokenを取得できなかった、チェックしてください"); }}インターフェイスを保存して、資格情報を呼び出しますaccess_token
•考え
取得したAccess_Tokenと現在の時間をファイルに保存します。抽出するときは、ストレージで記録された時間と時間の差を決定します。 max_timeよりも大きい場合は、それを再取得し、ファイル内の取得したアクセスコンテンツを置き換えます。 max_timeよりも少ない場合は、直接取得します。
•成し遂げる
/ * *このメソッドは、Access_Tokenの取得を実装し、Access_Tokenの2時間のみを保存して保存します。 2時間を超える場合は、それを再取得します。 2時間を超えない場合は、直接取得します。この方法は *:public static string getAccesStoken()に依存します。 * *アイデア:取得したAccess_Tokenとファイルに現在の時間を保存します。 max_timeよりも大きい場合は、それを再取得し、取得したファイルへのアクセスを保存して元のコンテンツ*を置き換え、max_timeよりも少ない場合は、直接取得します。 */ @test public void getSavedaccess_token()throws ioexception {gson gson = new gson(); string maccess_token = null; // access_tokenは取得します。 file file = new file( "temp_access_token.temp"); // access_tokenが保存されている場所//ファイルが存在しない場合、if(!file.exists())file.createNewfile(); //ファイルサイズが0に等しい場合、それは初めて使用され、access_tokenを入力することを意味します(file.length()== 0){maccess_token = getAccesStoken(); fileoutputStream fos = new fileoutputStream(file、false); // append access_token at = new Access_Token(); at.setaccess_token(maccess_token); at.setexpires_in(system.currenttimemillis() + ""); string json = gson.tojson(at); fos.write((json).getbytes()); fos.close(); } else {// file content fileinputStream fis = new fileInputStream(file); byte [] b = new byte [2048]; int len = fis.read(b); string mjsonaccess_token = new String(b、0、len); //ファイルのコンテンツを読み取りaccess_token access_token.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); // append access_token at = new Access_Token(); at.setaccess_token(maccess_token); at.setexpires_in(system.currenttimemillis() + ""); string json = gson.tojson(at); fos.write((json).getbytes()); fos.close(); }}} system.out.println( "access_token asead is:" + maccess_token); } / * * WeChat Server AccessTokenを取得します。この部分はgetaccess_token()と一致しており、コメントは追加されていません*/public static string getaccestoken(){string urlstring = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="文字列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.getacs_token(); } else {return null; }}最初の3つの記事は、ソースコードを示しています:http://xiazai.vevb.com/201606/yuanma/weixinapidemo(vevb.com).rar
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。