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

一、准备资源:

  • 自己的微信公众号:可以在该网址注册申请 微信公众平台:https://mp.weixin.qq.com/
  • ngrok.exe 和 ngrok.cfg:该资源可以在该网址下载 http://www.tunnel.mobi/

  • Eclipse

二、本地调试微信端口:

  • 按下 win + R 组合键,输入 cmd(或者 powershell),进去 shell 窗口
  • 将路径切换至自己 ngrok.exe 的存放路径:
  • 输入命令 ngrok -config ngrok.cfg -subdomain 任取名 Tomcat端口号,然后执行:如 ngrok -config ngrok.cfg -subdomain johnnie 80
注:若是在 powershell 中输入命令则应该如下:
执行效果:
  • 在浏览器上输入 http://localhost:4040/http/in 可以看到如下显示:

三、测试:

目前,基本的配置以及准备完毕。我们随意编写一个程序测试下,看是否能够通过外网来代替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. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import com.johnnie.weixin.utils.CheckUtils;
  10. @WebServlet("/WeixinServlet")
  11. public class WeixinServlet extends HttpServlet {
  12. private static final long serialVersionUID = 1L;
  13. public WeixinServlet() {
  14. super();
  15. }
  16. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. this.doPost(request, response);
  18. }
  19. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  20. String signature = request.getParameter("signature");   // 微信加密签名
  21. String timestamp = request.getParameter("timestamp");   // 时间戳
  22. String nonce = request.getParameter("nonce");           // 随机数
  23. String echostr = request.getParameter("echostr");       // 随机字符串
  24. PrintWriter out = response.getWriter();
  25. if(CheckUtils.checkSignature(signature, timestamp, nonce)){
  26. //          System.out.println("验证成功...");
  27. out.print(echostr);
  28. }
  29. }
  30. }

CheckUtils.java:

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

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

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

  1. 微信公众号笔记---本地调试微信接口

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

  2. 微信公众号开发本地调试【内网穿透】

    在做微信公众号开发的时候,必须接入外网已经备案的URL地址,不然本地没法进行调试,比较简单的方法可以做内网穿透,映射生成一个外网URL地址来进行回调测试. 这里推荐一个内网穿透工具--cpolar,可 ...

  3. 微信公众号笔记(二)

    微信公众号笔记(二) 视频地址: 微信公众号--零基础全面系统教学哔哩哔哩bilibili 一. 编辑排版注意事项 1.确定排版样式,形成自己的风格 例:问答形式: 一图一文字 2. 简单原则不要为排 ...

  4. 微信公众号开发本地环境开发_如何在5分钟内使HTTPS在本地开发环境上工作

    微信公众号开发本地环境开发 Almost any website you visit today is protected by HTTPS. If yours isn't yet, it shoul ...

  5. 微信公众号一、接入微信并实现机器人自动回复功能

    一.说明 微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN 测试平台 https://mp.w ...

  6. Java开发微信公众号(四)---微信服务器post消息体的接收及消息的处理

    在前几节文章中我们讲述了微信公众号环境的搭建.如何接入微信公众平台.以及微信服务器请求消息,响应消息,事件消息以及工具处理类的封装:接下来我们重点说一下-微信服务器post消息体的接收及消息的处理,这 ...

  7. php实现微信公众号分享,php实现微信公众号自定义分享内容的方法

    这篇文章主要介绍了php版微信公众号自定义分享内容实现方法,结合实例形式分析了php实现微信公众号自定义分享内容的接口调用与相关使用技巧,需要的朋友可以参考下 微信公众号号在手机中通过api接口可以实 ...

  8. 如何开发微信公众号以及如何运营微信公众号

    微信公众号已经成为了企业.个人和组织进行品牌推广.宣传和营销的重要平台.但是,如何开发和运营微信公众号并不是一件容易的事情.本文将从以下几个方面来介绍如何开发和运营微信公众号. 一.微信公众号的开发 ...

  9. 微信公众号数据2019_历史微信公众号排名,微信公众号新榜排名

    历史微信公众号排名,微信公众号新榜排名 公众号排名优化的注意事项及细节今天给大家分享一下,作为微信公众号的排名优化对于大多数人来说都已经知道了有这个渠道的事情,其实很多的新产品及渠道出来以后有不少的人 ...

最新文章

  1. UTF-8与UTF-8 BOM
  2. Nginx —— 用HTTP proxy module配置一个反向代理服务器
  3. Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件
  4. FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程
  5. Python3 透明网桥算法
  6. Java集合面试问题
  7. UVA 10600 ACM Contest and Blackout (次小生成树)
  8. 节能prru进入深度休眠节能_2021-2024年中国工业节能行业深度调研及投资前景预测报告...
  9. SoapUI5.1.2安装和破解教程
  10. IEC63174电动牙刷性能检测仪器分享
  11. Microsoft Visual C++ Build Tools下载/解决Visual C++ 14.0 is required问题
  12. css鼠标移入变成小手
  13. OMRON-FINS(TCP)协议详细解析和攻击
  14. vb冒泡排序法流程图_vb数组排序-冒泡排序法
  15. 空间大数据是什么,与云计算和大数据之间有什么关系?
  16. JS原生轮播(JS篇)
  17. 数据库 mysql 删除一列数据
  18. 福州大学计算机学院李敏,福州大学厦门工艺美术学院
  19. java获取拼音_java获取中文拼音
  20. c++定义虚构造_在定义的系统中发现虚构的设计

热门文章

  1. 浏览器开发工具的秘密
  2. c语言中方阵对角线的和程序,c语言程序 1、方阵求出主对角线上元素之和;2、辅对角线上元素之积;3方阵中最大的元素...
  3. 为什么很少有单片机机构?培训班一般多少费用?
  4. 计算机插补,插补原理及控制方法
  5. spring史上最全笔记
  6. 实现一个简洁朴素的左侧贴边导航栏html+CSS+javaScript
  7. 疯狂的程序员1-40
  8. webrtc入门:1.使用getUserMedia获取摄像头流
  9. 优美的数列(斐波那契数列)
  10. VUE报错You are using the runtime-only build of Vue where the template compiler is not available