java WeChat開発API第一歩サーバアクセス

6548 ワード

Iサーバーへのアクセス方法を紹介します。
説明する
*この例はWeChatに従って文書を開発します。http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/2016 5:34:36 PM)で開発デモンストレーションを行います。*編集プラットフォーム:myeclipse 10.7+win 32+jdk 1.7+tomcat 7.0  * サーバー:アリ雲windows server 2008 64 bits*プラットフォームの要求:servletは注釈方式を使用して、プラットフォームの要求:j 2 ee 6.0+、jdk 6.0+、tomcat 7.0+*デモはよりapi解析に重点を置いています。*テストの説明を簡単にするために、各テストケースは独立しており、他の方法に依存しない。パッケージについてはあまり考慮しない。*デモはできるだけAPIの要求に従って行います。目的は文書の使い方を理解して、一挙両得の効果を達成することです。知識の要求:強固なjava基礎、httpネットワーク通信の知識を理解し、java webに対して十分な理解があり、json解析*現在時間:4/3/2016 5:32:57 PM、この時間を基準とします。
二、文書の原文(要約)
文書の住所:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html WeChat公衆プラットフォームにアクセスして開発するには、開発者は以下の手順で完成する必要があります。
1、サーバの配置2を記入し、サーバの住所の有効性を検証する。   3、インターフェースドキュメントによる業務ロジックの実現
三、文書理解
サーバのアドレスの有効性を検証します。
1、アプリはこう紹介します。
開発者が情報を提出すると、WeChatサーバはGET要求を記入されたサーバアドレスURLに送ります。GETは4つのパラメータを要求します。signature、timestamp、nonce、echostr開発者はsignatureを検査して要求を検証します。今回のGET要求がWeChatサーバから来たことを確認したら、そのままechostrパラメータの内容に戻ってください。アクセスが有効になり、開発者の成功になります。さもなければ、アクセスが失敗します。暗号化/検証の流れは以下の通りです。1)token、timestamp、nonceの3つのパラメータを辞書順に並べ替えます。2)、3つのパラメータ文字列を一つの文字列につづり合わせてshar 1を暗号化します。
2、理解する
この要求は「GET」方式であり、アクセス要求は4つのパラメータを返します。signature、timestamp、nonce、echostr。これらのパラメータを受け入れて処理する必要があります。検証が成功すれば、受信した「echostr」に戻ります。そうでなければ、認証に失敗します。検証方式は、受け取ったtoken、timestamp、nonceの3つのパラメータを辞書順に並べてshar 1暗号化し、最後にsignatureと比較します。暗号化された文字列は、signatureと比較することができ、等しい場合は、「ここのappiは、解釈がよくわからないかもしれない」として、「echostr」に戻り、検証に成功しました。
3、実現する
一つのservlet CoreServletを作成して、HttpServletを実現して、doGet方法を再ロードします。
package reyo.sdk.utils.weixin;

import java.io.IOException;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/CoreServlet")
public class CoreServlet extends HttpServlet {

	private static final long serialVersionUID = -7002640712248365625L;
	String TAG = "CoreServlet";

	/*
	 * 1)、                                                。 2)、     
	 *       tomcat,        webapps   。 3)、        
	 *         (             ):http:/
	 * /mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
	 *            ,        。     URL:http://ip/WeixinApiDemo/CoreServlet
	 * Token:wgyscsf  ,            。    :           
	 *         ,        GET           URL ,
	 * GET        :signature、timestamp、nonce、echostr
	 *        signature       (       )。      GET         ,     echostr    ,
	 *      ,        ,      。
	 * 
	 *   /      : 1.  token、timestamp、nonce            2.
	 *                   sha1   3.               signature  ,          
	 */
	/*
	 *     (lexicographical
	 * order)                  。    ,      ,        ,         。
	 */
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		//     
		req.setCharacterEncoding("utf-8");
		resp.setContentType("html/text;charset=utf-8");
		resp.setCharacterEncoding("utf-8");
		//      
		PrintWriter printWriter = resp.getWriter();

		//        token,       。api    :Token           ,
		//       ( Token    URL    Token    ,       )
		String token = "reyo";
		//   api  ,        
		String signature = req.getParameter("signature");
		String timestamp = req.getParameter("timestamp");
		String nonce = req.getParameter("nonce");
		String echostr = req.getParameter("echostr");
		// // temp:    ,        
		System.out.println(TAG + ":signature:" + signature + ",timestamp:" + timestamp + ",nonce:" + nonce + ",echostr:" + echostr);
		//   api   “  /    ”    。    

		//    : token、timestamp、nonce           
		String[] parms = new String[] { token, timestamp, nonce };//                  
		Arrays.sort(parms);//   api         
		//    :                  sha1  
		//      
		String parmsString = "";//   ,    =null。
		for (int i = 0; i < parms.length; i++) {
			parmsString += parms[i];
		}
		// sha1  
		String mParms = null;//       
		MessageDigest digest = null;
		try {
			digest = java.security.MessageDigest.getInstance("SHA");
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		digest.update(parmsString.getBytes());
		byte messageDigest[] = digest.digest();
		// Create Hex String
		StringBuffer hexString = new StringBuffer();
		//               
		for (int i = 0; i < messageDigest.length; i++) {
			String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
			if (shaHex.length() < 2) {
				hexString.append(0);
			}
			hexString.append(shaHex);
		}
		mParms = hexString.toString();//     

		/*
		 * api  :      GET         ,     echostr    ,      ,        ,      。
		 */
		//    :               signature  ,              。
		System.out.println(TAG + ":" + mParms + "---->" + signature);
		if (mParms.equals(signature)) {
			System.out.println(TAG + ":" + mParms + "---->" + signature);
			printWriter.write("echostr:" + echostr);
		} else {
			//     ,    
			System.out.println(TAG + "    ");
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}

}
 
4、サーバの配置を記入する
1)コンテンツサーバの構成を含むのは、主に、自分のアクセスマイクロクレジット開発プラットフォームのコードを作成した後に配置するサーバとWeChatアクセスインターフェースです。2)サーバの操作でサーバーのtomcatを開き、作成したコードをwebappsファイルの下に置く。3)、WeChat公衆プラットフォームの操作*WeChatテストアカウントを申請する(直接WeChatでスキャンすれば登録できます):http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login *WeChat公衆プラットフォームのテスト番号を開き、インターフェースの設定情報を配置する。以下のように設定します        URL:https://sms.reyo.cn/Weixin/CoreServlet         Token:reyo*は提出して、配置の成功と失敗はいずれも注意があります。