WeChat Development APIでサーバーに接続する方法は、以下に紹介しましょう。
1。説明
*この例は、WeChat開発文書に従って開発および実証されています:http://mp.weixin.qqq.com/wiki/home/index.html最新バージョン(4/3/2016 5:34:36 PM)。
*編集プラットフォーム:myeclipse10.7+win32+jdk1.7+tomcat7.0
*サーバー:Alibaba Cloud Windows Server 2008 64bits
*プラットフォーム要件:サーブレットの使用アノテーション方法、プラットフォーム要件:J2EE6.0+、JDK6.0+、Tomcat7.0+
*デモは、API解析にもっと焦点を当てています。
*テストの指示のために、各テストケースは独立しており、他の方法に依存しません。パッケージをあまり考えないでください。
*デモンストレーションは、API要件に従って可能な限り実行されます。目的:ドキュメントの使用方法を理解し、1つの例から学習し、他の例に適用する効果を実現します。
*知識要件:Solid Java Foundation、HTTPネットワーク通信の知識を理解し、Javawebを十分に理解している、JSON分析
*現在の時刻:2016年4月3日午後5時32分57分、今回は勝ちます。
2。元のドキュメント(要約)
ドキュメントアドレス:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
WeChatパブリックプラットフォームの開発にアクセスするには、開発者は次の手順に従う必要があります。
1.サーバーの構成に入力します
2.サーバーアドレスの有効性を確認します
3.インターフェイスドキュメントに基づいてビジネスロジックを実装します
3。ドキュメントの理解
サーバーアドレスの有効性を確認します
1。APIは次のように紹介されます:
開発者が情報を送信すると、WeChatサーバーはFill-In ServerアドレスURLにGETリクエストを送信します。 GETリクエストには、署名、タイムスタンプ、ノンセ、エコーストロートの4つのパラメーターが含まれています
開発者は、署名を確認して要求をチェックします(以下に確認方法があります)。
GETリクエストがWECHATサーバーからのものであることを確認した場合は、Echostrパラメーターコンテンツをそのまま返してください。アクセスが有効になり、開発者になります。それ以外の場合、アクセスに失敗します。
暗号化/チェックプロセスは次のとおりです。
1)トークン、タイムスタンプ、ノンセの辞書順序をソートします
2)SHA1暗号化のために3つのパラメーター文字列を1つの文字列にスプライスします
3)開発者が取得した文字列を署名と比較して、WeChatから発生したリクエストを特定できます。
2。理解してください
これは、リクエストが「取得」モードであることを意味し、リクエストにアクセスすると、署名、タイムスタンプ、ノンセ、エコーストアの4つのパラメーターが返されます。
これらのパラメーターを受け入れてから処理する必要があります。検証が成功した場合、受信した「echostr」が返されます。そうしないと、検証が失敗します。
検証方法は、受け入れられている3つのパラメータートークン、タイムスタンプ、およびノンセをソートし、次にSHA1暗号化を並べ替え、最後に署名と比較することです。
*暗号化された文字列を署名と比較できます。それが等しい場合[APIはそれを非常に明確に説明しない場合があります]、「echostr」を返して、それを正常に検証します。
3。実現します
サーブレットCoreServletを作成して、httpservletを実装し、dogetメソッドをオーバーロードします。
パラメーターの準備
//グローバルトークンを設定すると、開発者は自分で設定します。 APIは次のように説明します。トークンは、開発者が自由に埋めることができます。//文字列タイムスタンプ= req.getParameter( "Timestamp");文字列nonce = req.getParameter( "nonce"); string echostr = req.getParameter( "echostr");
APIで言及された3つのステップに従って操作
//ステップ1:トークン、タイムスタンプ、nonce string [] parms = new String [] {token、timestamp、nonce}; // array array.sort.sort(parms)に辞書をソートする必要がある文字列を配置します; // dictionary並べ式順序を並べ替えます[baidu:springs spring spring spring spring spring spring spring sprinc暗号化[baidu:java sha1暗号化] //文字列の文字列parmsstring = ""; //ここでは= nullできないことに注意してください。 for(int i = 0; i <parms.length; i ++){parmsstring+= parms [i];} // sha1暗号化文字列mparms = null; //暗号化後の結果... //この場所はsha1暗号化の実装です。 WeChatサーバーは、Echostrパラメーターコンテンツをそのまま返してください。アクセスが有効になり、開発者になります。そうしないと、アクセスが失敗します。 *///ステップ3:開発者は暗号化された文字列を取得し、それを署名と比較して、リクエストがWeChatの成功したアクセスから来ることを識別できます。 System.out.println(tag + ":" + mparms + "--->" + signature); if(mparms.equals(signature)){// system.out.println(tag + ":" + mparms + "---->" +署名); printwriter.write(echostr);} else {//アクセスに失敗した、// system.out.println(tag + "access failed");}4.サーバーの構成に入力します
1)コンテンツサーバーの構成を含めることは、主に、WeChat開発プラットフォームにアクセスするために独自のコードを作成した後に構成する必要があるサーバーとWeChatアクセスインターフェイスです。
2)サーバー操作サーバーのTomcatを開き、書かれたコードをWebAppsファイルに入れます。
3)Wechat Public Platform操作
*WeChatテストアカウントを申請します(WeChatで直接スキャンしてログインしてください):http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
*WeChatパブリックプラットフォームのテスト番号を開き、インターフェイス構成情報を構成します。構成は次のとおりです
URL:http:// ip/weixinapidemo/coreServlet
トークン:WGYSCSF
*送信、構成の成功、失敗の際には思い出されます。
この部分のすべての操作ソースコードは直接使用できます
パッケージcom.gist.servlet; import java.io.ioexception; import java.io.printwriter; import java.security.messagegest; import java.security.nosuchalgorithmexception; Import java.util.arrays; Import javax.servlet.servlete.servlet.servlet.servlet.servletecept.servletecception. javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; Import javax.servlet.servlet.servlet.servlet.servlet.servlet.servlet.servlet.servlet.servlet.servlet.httpser http://blog.csdn.net/wgyscsf </n> *執筆期間2016-4-3 4:34:05 pm */@webervlet( "/coreServlet")パブリッククラスCoreServlet extends httpservlet {string tag = "coreservlet"; / * *ステップ2:開発者が情報を送信した後、サーバーアドレスの有効性を確認します。WeChatサーバーは、Fill-in ServerアドレスのURLにGETリクエストを送信します。 * GETリクエストには、署名、タイムスタンプ、ノンセ、echostrの4つのパラメーターが含まれています *開発者は、署名を確認して要求を検証します(以下に確認方法があります)。 GETリクエストがWeChatサーバーからのものであることを確認する場合は、Echostrパラメーターコンテンツをそのまま返してください。 *、アクセスが有効になり、開発者になります。 * *暗号化/チェックプロセスは次のとおりです。1。トークン、タイムスタンプ、およびノンセの辞書順序をソートします。 * 3つのパラメーター文字列をSHA1暗号化の文字列にスプライスします3。フォームシーケンス。この方法は、アルファベット順に、または小規模および大量の順序で、小から大部分までシーケンスを形成することです。 */ @Override Protected void doget(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {// req.setcharacterencoding( "utf-8")のエンコードを設定します。 resp.setContentType( "html/text; charset = utf-8"); rest.setcharacterencoding( "utf-8"); //出力ストリームprintwriter printwriter = resp.getWriter()を取得します。 //グローバルトークンを設定すると、開発者は自分で設定します。 APIはこれを説明します:トークンは開発者によって自由に記入できます。//世代の署名として使用される(トークンは、セキュリティを検証するためにインターフェイスURLに含まれるトークンと比較されます)string token = "wgyscsf"; // APIの説明によると、上記の4つのパラメーター文字列署名= req.getParameter( "signature")を取得します。文字列タイムスタンプ= req.getParameter( "Timestamp");文字列nonce = req.getParameter( "nonce"); string echostr = req.getParameter( "echostr"); // temp:一時的な印刷、returnパラメーターの状況を監視してください// APIで言及されている「暗号化/検証プロセス」に従ってアクセスします。合計に3つのステップがあります//ステップ1:トークンの辞書順序、タイムスタンプ、ノンセ3パラメーター文字列= new String [] {Token、Timestamp、nonce}; //配列配列に辞書をソートする必要がある文字列を配置します。 //文字列弦のスプライスparmsstring = ""; //ここでは= nullできないことに注意してください。 for(int i = 0; i <parms.length; i ++){parmsstring+= parms [i]; } // sha1暗号化文字列mparms = null; //暗号化された結果MESSAGED GIGEST DIGEST = NULL; try {digest = java.security.messagegigest.getInstance( "sha"); } catch(nosuchalgorithmexception e){// todo auto-fenated catch block e.printstacktrace(); } digest.update(parmsstring.getBytes()); BYTE MESSAGEDGEST [] = Digest.Digest(); // hex string stringbuffer hexstring = new StringBuffer()を作成します。 //(int i = 0; i <messagedigest.length; i ++){string shahex = integer.tohexstring(mesagedgest [i]&0xff); if(shahex.length()<2){hexstring.append(0); } hexstring.append(shahex); } mparms = hexString.toString(); // encryption result/ * * API要件:GETリクエストがWECHATサーバーからのものであることを確認する場合は、Echostrパラメーターコンテンツをそのまま返してください。アクセスが有効になり、開発者になります。それ以外の場合、アクセスが失敗します。 */ //ステップ3:開発者は暗号化された文字列を取得し、署名と比較して、リクエストがWeChatの成功したアクセスから来ることを特定できます。 System.out.println(tag + ":" + mparms + "--->" + signature); if(mparms.equals(signature)){// system.out.println(tag + ":" + mparms + "---->" + signature); printwriter.write(echostr); } else {//アクセスに失敗し、// System.out.println(tag + "Access Failed"); }} @Override保護されたvoid dopost(httpservletrequest req、httpservletresponse rep)servletexception、ioexception {doget(req、resp); }}Java Wechat Development APIの最初の記事がここで紹介されています。将来、更新されたコンテンツに注意を払い続けることを願っています。ありがとう!