接入微信公众平台开发

1.微信公众号开发准备
相关博客:
https://blog.csdn.net/Abysscarry/article/details/89071469
1.注册微信公众号账号
2.开发环境准备
1.开发好的程序在自己电脑通过浏览器是可以直接访问的;
另外一台电脑是没有办法访问的,我们可以让这些电脑连接
到同一个局域网中,然后通过ip访问;
2.在互联网上是访问不到我们本地的程序的,只有把程序放到
云服务器上才可以在互联网上访问;
3.在开发的过程中我们需要程序和微信服务器进行网络通信,
如果微信服务器不能找到我们程序就没有办法进行网络通信,
所以在开发时,为了让我们的项目可以被互联网上的其他电脑访问,
我们需要做内网穿透;
4.内网穿透软件:花生壳,nat123,ngrok(免费,不是很稳定)
5.ngrok:http://www.ngrok.cc/
1.下载,注册账号;
2.开通隧道
协议:http;
名称:随便写;
前置域名:随便写;
本地端口: localhost:80(本地项目访问端口)
其他不需要填写;
3.复制隧道id,启动ngrok客户端;
6.接入微信公众平台开发步骤:
1、填写服务器配置
1.服务器地址(内网穿透工具的域名)
2.token 需要和程序中一致;
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑

/**
	 * 接入微信公众平台开发
	 * 1.填写服务器配置;
	 *   a.开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上;
	 * 2.验证消息的确来自微信服务器
	 *   a.开发者通过检验signature对请求进行校验,确认此次GET请求来自微信服务器,
	   *              请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败;
	 * 3.第三步:依据接口文档实现业务逻辑;  
	 * @param request
	 * @param response
	 * @throws IOException
	 */
	@RequestMapping(value="/start",method = RequestMethod.GET)
	public void start(HttpServletRequest request,HttpServletResponse response) throws IOException {	
		//验证消息的确来自微信服务器
		if(wechatUtil.check(request)) {	    	
	    	PrintWriter writer = response.getWriter();
	    	writer.write( request.getParameter("echostr"));
	    	writer.flush();
	    	writer.close();
	    	System.out.println("接入成功");
	    	
	    }else {
	    	 System.out.println("接入失败");
	    }
		
	}
/**
	 *  验证消息的确来自微信服务器
	 * @param timestamp
	 * @param nonce
	 * @param signature
	 * @param token
	 * @return
	 */
	public boolean check(HttpServletRequest request) {
		 //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
		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);
		//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);
	}

	 /**
    * 加密处理
    * @param strs
    * @return
    */
	public 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;
	}

你可能感兴趣的:(Wechat)