码迷,mamicode.com
首页 > 微信 > 详细

微信平台开发1--开发者模式基本配置

时间:2015-01-26 00:01:34      阅读:611      评论:0      收藏:0      [点我收藏+]

标签:

网上有很多教程,这里作为本人学习笔记记录。网上教程大多是PHP版本,由于我比较喜欢Java,这里用Java进行配置。

基本步骤参考官网

填写好token和URL之后下面要求验证服务器地址有效性

技术分享

下面是代码

import java.io.IOException;
import java.io.PrintWriter;

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

import com.xinshidaisudi.util.SignUtil;

public class CoreServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	
	public static final String token = "Token";//token  这里要跟你刚才填写的Token一致
	
	public CoreServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//签名
		String singature = request.getParameter("signature");
		//时间戳
		String timestamp = request.getParameter("timestamp");
		//随机数
		String nonce = request.getParameter("nonce");
		//随机字符串
		String echostr = request.getParameter("echostr");
				
		//System.out.println("echostr: " + singature);
		//System.out.println("timestamp: " + timestamp);
		//System.out.println("nonce: " + nonce);
		//System.out.println("echostr: " + echostr);
		
//		开发者通过检验signature对请求进行校验(下面有校验方式)。
//		若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
		PrintWriter out = response.getWriter();
		if(SignUtil.checkSingature(token, singature, timestamp, nonce)){
			
			out.write(echostr);
		}
			
		out.close();
		out = null;
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	
		
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}

SignUtil.checkSingature(token, singature, timestamp, nonce)方法:

public static boolean checkSingature(String token,String singature ,String timestamp,String nonce){
		
		String[] arr = new String[]{token,timestamp,nonce};
		Arrays.sort(arr);//进行字典排序
		//将字符串拼接成一个字符串
		StringBuilder strBUilder = new StringBuilder();
		for(String s : arr){
			strBUilder.append(s);
		}
		String str = strBUilder.toString();
		//sha1加密
		StringBuilder builder = new StringBuilder();
		try {
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			md.update(str.getBytes());
			byte[] b = md.digest();
			//转换成16进制字符串
			for(byte bb : b){
				
				String s = Integer.toHexString(bb & 0xff);
				if(s.length() == 1)
					builder.append("0");
				builder.append(s);
			}
			
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String result = builder.toString();//得到SHA加密后结果
		
		//System.out.println("result: " + result);
		
		return result != null? result.equals(singature.toLowerCase()) :false;
	}

这样就完成了基本的接入。

 

 

微信平台开发1--开发者模式基本配置

标签:

原文地址:http://www.cnblogs.com/daniel-lee/p/4249126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!