接入微信公众平台开发

接入微信公众平台开发
1.开发好的程序在自己电脑通过浏览器是可以直接访问的;
另外一台电脑是没有办法访问的,我们可以让这些电脑连接
到同一个局域网中,然后通过ip访问;
2.在互联网上其他的人是看不到我们开发的程序的,出发把程序发到到云服务器上;
在开发的过程中我们需要程序需要和微信服务器做对接,
如果微信服务器不能找到我们程序就没有办法对接,所以在开发时,
我们首先需要做内网穿透;
3.内网穿透目的时为了让我们的项目可以被互联网上的其他电脑访问;
内网穿透软件:花生壳,nat123,ngrok(免费,不是很稳定)
内网穿透原理:
4.ngrok:http://www.ngrok.cc/
1.下载,注册账号;
2.开通隧道
协议:http
名称:随便写;
前置域名:随便写;
本地端口: localhost:80(本地项目访问端口)
其他不需要填写;
3.复制隧道id,启动ngrok客户端;
c.开发接入
1.开发接入准备
a.登录微信公众号平台(需要修改开发》基本配置);
b.个人账号下很多的功能都无法使用,微信提供了测试账号申请
(微信公众号平台–>服务号–》开发文档–》开始开发—》接口测试号申请);
c. 接入微信公众平台开发,开发者需要按照如下步骤完成:
1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑
2.url 内网穿透的url+项目名+方法名
token:需要和代码中的一致;

@RequestMapping("/index")
public String index(HttpServletRequest request) {	
    String signature = request.getParameter("signature");
    String timestamp = request.getParameter("timestamp");
    String nonce = request.getParameter("nonce");
    String echostr = request.getParameter("echostr");
    System.out.println(signature+"\n"+timestamp+"\n"+nonce+"\n"+echostr);   
    if(check(timestamp,nonce,signature,TOKEN)) {
    	 System.out.println("接入成功");
         PrintWriter writer = response.getWriter();
	    	writer.write(echostr);
	    	writer.flush();
	    	writer.close();
    }else {
    	 System.out.println("接入失败");
    }
    
	return "index";
}
/**
 * 校验参数
 * @param timestamp
 * @param nonce
 * @param signature
 * @param token
 * @return
 */
private boolean check(String timestamp, String nonce, String signature,String token) {
	//1.将token、timestamp、nonce三个参数进行字典序排序   
	  String [] str = {token,timestamp,nonce};
	  Arrays.sort(str);
	  //2)将三个参数字符串拼接成一个字符串进行sha1加密 
	  String strs = str[0]+str[1]+str[2];
	  String mysig= sha1(strs);
	  System.out.println("mysig:---->"+mysig);
	  //3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
	 return mysig.equals(signature);
}

private String sha1(String strs) {
	// TODO Auto-generated method stub
	try {
		//获取加密对象
		MessageDigest md = MessageDigest.getInstance("sha1");
		//加密处理
	    byte[] digest = md.digest(strs.getBytes());
	    //处理加密结果
	    char [] chars = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
	    StringBuilder sb = new StringBuilder();
	    for (byte b : digest) {
		 sb.append((chars)[(b>>4)&15]);
		 sb.append(chars[b&15]);
		}
	    return sb.toString();
	} catch (NoSuchAlgorithmException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return null;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章