使用ngrok 二 -- 微信公众号笔记---本地调试微信接口

前言:最近因为某些原因,要进行微信公众号开发,因此开始学习微信公众号开发的相关知识。本篇博文主要是介绍一下本人学习过程中如何进行“本地调试微信端口”?

一、准备资源:


  • Eclipse

二、本地调试微信端口:

  • 按下 win + R 组合键,输入 cmd(或者 powershell),进去 shell 窗口
  • 将路径切换至自己 ngrok.exe 的存放路径:

  • 输入命令 ngrok -config ngrok.cfg -subdomain 任取名 Tomcat端口号,然后执行:如 ngrok -config ngrok.cfg -subdomain johnnie 80

注:若是在 powershell 中输入命令则应该如下:

执行效果:

三、测试:

目前,基本的配置以及准备完毕。我们随意编写一个程序测试下,看是否能够通过外网来代替localhost来访问Web项目。

1. 新建一个 JavaWeb 项目:Weixin

2. 在 WebContent 下编辑一个 index.html 文件,代码随意

[html]  view plain  copy
  1. <span style="font-size:18px;"><!DOCTYPE html>  
  2. <html>  
  3.     <head>  
  4.         <meta charset="UTF-8">  
  5.         <title>Insert title here</title>  
  6.     </head>  
  7.     <body>  
  8.         This is index.html  
  9.     </body>  
  10. </html></span>  

3. 部署到 Tomcat 服务器上,运行该项目,在地址栏上输入 http://localhost/Weixin/ ,显示如下:


4. 用我们刚刚的外网地址 http://johnnie.tunnel.mobi 替换掉 http://localhost,显示如下:


而且可以看到 http://localhost:4040/http/in 下的显示改变了:


还有 cmd 下的显示也改变了:


出现上面的情况就说明我们的基本环境已经 ok 了,Congratulation!!!

5. 编写 Servlet:

WeixinServlet.java:

[java]  view plain  copy
  1. package com.johnnie.weixin.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.annotation.WebServlet;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import com.johnnie.weixin.utils.CheckUtils;  
  13.   
  14. @WebServlet("/WeixinServlet")  
  15. public class WeixinServlet extends HttpServlet {  
  16.     private static final long serialVersionUID = 1L;  
  17.          
  18.     public WeixinServlet() {  
  19.         super();  
  20.     }  
  21.   
  22.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  23.         this.doPost(request, response);  
  24.     }  
  25.   
  26.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  27.         String signature = request.getParameter("signature");   // 微信加密签名  
  28.         String timestamp = request.getParameter("timestamp");   // 时间戳  
  29.         String nonce = request.getParameter("nonce");           // 随机数  
  30.         String echostr = request.getParameter("echostr");       // 随机字符串  
  31.           
  32.         PrintWriter out = response.getWriter();  
  33.         if(CheckUtils.checkSignature(signature, timestamp, nonce)){  
  34. //          System.out.println("验证成功...");  
  35.             out.print(echostr);  
  36.         }  
  37.     }  
  38.   
  39. }  

CheckUtils.java:

[java]  view plain  copy
  1. package com.johnnie.weixin.utils;  
  2.   
  3. import java.security.MessageDigest;  
  4. import java.util.Arrays;  
  5.   
  6. /** 
  7.  * 校验工具类 
  8.  * @author johnnie 
  9.  * 
  10.  */  
  11. public class CheckUtils {  
  12.       
  13.     private CheckUtils(){}  
  14.   
  15.     private static final String TOKEN = "TOKEN";   
  16.     public static boolean checkSignature(String signature, String timestamp, String nonce){  
  17.         String[] arr = new String[]{TOKEN, timestamp, nonce};  
  18.         // 1. 排序  
  19.         Arrays.sort(arr);  
  20.           
  21.         // 2. 生成字符串  
  22.         StringBuffer buff = new StringBuffer();  
  23.         for(int i = 0; i < arr.length; i ++){  
  24.             buff.append(arr[i]);  
  25.         }  
  26.         String content = buff.toString();  
  27.           
  28.         // 3. sha1 加密  
  29.         String temp = getSha1(content);  
  30. //      System.err.println("temp--->" + temp);  
  31. //      System.out.println("signature--->" + signature);  
  32.           
  33.         return temp.equals(signature);          // 将通过 sha1 加密后生成的字符串与微信传递过来的签名相比较  
  34.     }  
  35.       
  36.     /** 
  37.      * sha1 加密 
  38.      * @param str 
  39.      * @return 
  40.      */  
  41.     public static String getSha1(String str){  
  42.           
  43.         if (str == null || str.length() == 0){  
  44.             return null;  
  45.         }  
  46.           
  47.         char[] hexDigits = { '0''1''2''3''4''5''6''7''8''9',   
  48.                 'a''b''c''d''e''f'};  
  49.         try {  
  50.             MessageDigest mdTemp = MessageDigest.getInstance("SHA1");  
  51.             mdTemp.update(str.getBytes("UTF-8"));  
  52.                
  53.             byte[] md = mdTemp.digest();  
  54.             int j = md.length;  
  55.             char[] buf = new char[j * 2];  
  56.             int k = 0;  
  57.             for (int i = 0; i < j; i++) {  
  58.                 byte byte0 = md[i];  
  59.                 buf[k++] = hexDigits[byte0 >>> 4 & 0xf];  
  60.                 buf[k++] = hexDigits[byte0 & 0xf];  
  61.             }  
  62.               
  63.             return new String(buf);  
  64.               
  65.         } catch (Exception e) {  
  66.             e.printStackTrace();  
  67.             return null;  
  68.         }  
  69.     }  
  70.       
  71. }  

6. 进入自己的微信公众平台:微信公众平台:https://mp.weixin.qq.com/,进入开发者中--->服务器配置--->修改配置,将相关信息输入,如下:


点击提交,若提交成功则显示如下:


这也就说明我们的开发环境和微信端已经连接成功,本地调试环境搭配完毕,Congratulation!!!

四、配置过程中的错误已经解决方法:

1. Server failed to allocate tunnel: The tunnel http://example.tunnel.mobi is already registered.

问题解决:将 example 名字换成自己任取的名字即可,如上面就是改为 johnnie

2. Unable to initiate connection to 127.0.0.1:8080. A web server must be running on port 127.0.0.1:8080 to complete the tunnel.

错误原因:端口号不正确,端口号必须是自己电脑上 Tomcat 服务器所配置的链接端口(因为我将Tomcat的端口改为80了,所以此处输入的8080就报错)
问题解决:将命令改为 ngrok -config ngrok.cfg -subdomain johnnie 80 即可


原文地址:http://blog.csdn.net/gulu_gulu_jp/article/details/48684237

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值