微信公衆號開發教程01:接入指南

要成爲微信開發者,首先須要進入接入校驗,微信相關的接入文檔地址爲:html

http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CNjava

具體步驟以下:
數組

1、填寫服務器配置

一、申請微信公衆號,並登錄:https://mp.weixin.qq.com/服務器

二、填寫相關的參數:點擊左側菜單欄中的【開發】中的【基本配置】微信

三、修改服務器配置:
微信開發

1)填寫URL:http://www.kolbe.cn/wechat/authenticate(注意須要使用80端口)app

2)填寫Token:wechat(這個token須要與程序中的token一致)微信公衆平臺


2、驗證服務器地址的有效性

一、填完上述信息後,微信服務器會發送一個GET請求到:http://www.kolbe.cn/wechat/authenticate框架

二、該請求會帶上四個參數:signature、timestamp、nonce、echostride

三、開發者對參數進行相應的處理後,與signature進行對比,若是相等,則直接輸出echostr,表明接入成功,不然接入失敗,具體邏輯以下:

1)將token(自定義的)、timestamp、nonce進行字典排序

2)將三個參數拼接着一個字符串

3)將拼接後的字符串進行SHA-1加密

4)將加密後的字符串與signature進行對比


四、具體實現代碼以下(爲了代碼的簡潔明瞭,暫時沒使用任何框架):

package cn.kolbe.wechat.authenticate.controller;

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("/authenticate")
public class AuthenticateController extends HttpServlet {
	
	// token可自定義
	private static final String TOKEN = "wechat";
	private static final long serialVersionUID = 1L;

	/**
	 * 微信公衆平臺接入校驗
	 */
	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		
		// 將token,timestamp,nonce三個參數進行字典排序
		String[] sourceArray = new String[]{TOKEN , request.getParameter("timestamp"), request.getParameter("nonce")};
		Arrays.sort(sourceArray);
		
		// 將三個參數字符串拼接成一個字符串
		StringBuilder sortArray = new StringBuilder();
		for(String s : sourceArray) {
			sortArray.append(s);
		}
		
		// 對拼接成功的字符串進行SHA-1加密
		String hexString = byteArrayToHex(sortArray.toString().getBytes());
		
		// 將加密過的字符串與signature對比
		if(hexString != null && hexString.equals(request.getParameter("signature"))) {
			// 若是相等則原樣輸出echostr,接入成功
			out.print(request.getParameter("echostr"));
		} else {
			// 若是不相等,則接入失敗
			response.setContentType("text/html;charset=utf-8");
			out.println("校驗失敗");
		}
		out.close();
	}
	
	
	
	
	/**
	 * 將字節數組加密後轉化成十六進制字符串
	 * @param byteArray
	 * @return
	 */
	public String byteArrayToHex(byte[]	byteArray) {
		try {
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			md.update(byteArray);
			byte[] digest = md.digest();
			String s = new String();
			StringBuilder result = new StringBuilder();
			
			for(byte b : digest) {
				if((s = Integer.toHexString(b)).length() < 2) {
					s = 0 + s;
				}
				result.append(s);
			}
			return result.toString();	
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return null;
	}
}


3、接入成功

一、若是順利完成上面兩步,並提示接入成功,此時表明已經成功接入微信

二、後續微信會將用戶的消息經過Post發送到:http://www.kolbe.cn/wechat/authenticate,咱們能夠在AuthenticateController中的doPost方法進行相應的邏輯處理

相關文章
相關標籤/搜索