微信公众号开发实时调试方法

原创
2014/10/24 09:44
阅读数 2.7W

   初充说明:微信官方目前已推出“微信Web开发者工具”,建议使用官方工具,在此下载:

http://mp.weixin.qq.com/wiki/10/e5f772f4521da17fa0d7304f68b97d7e.html#.E4.B8.8B.E8.BD.BD.E5.9C.B0.E5.9D.80  以下的内容对于反向隧道感兴趣的朋友可以了解:

    微信公众平台对开发者的支持并不友好,例如没有提供开发的 SDK,开发者中心甩手一套开发文档和一个在线调试页面,但开发者最需要的是在开过程中的本地调试,设置好断点,实时地查看程序运行流程与变量值才是最高效率的开发方式。本文将介绍用于 JFinal Weixin 开发时的调试方法。

   在介绍具体方法前,简要了解一下本地调试环境下各系统的交互过程。微信手机移动端向微信公众号应用程序发送信息的交互过程大致为:微信手机端 app ---> 腾讯微信服务器 ---> 公众平台填写的 URL 指向的服务器 ---> 本地公众号应用程序,这个过程反过来就是本地公众号应用程序向微信手机端 app 回复信息的过程:本地公众号应用程序 ---> 公众平台填写的 URL 指向的服务器 ---> 腾讯微信服务器 ---> 微信手机端 app。公众平台所填写的 URL 指向的服务器可以是你本地的机器,前提是你本地机器可以在外网访问到,本文仅讨论本地机器在外网无法被访问的情况

1、路由器有真实的公网地址,最好是静态ip

     通过设置路由器端口转发,将 80端口转发到你的本地机器即可。很多情况下路由器的外网 ip 地址仍然在另一个路由器的局域网范围内,此法失效。如果是动态 ip 还需要不断去修改微信平台的 url 指向或域名解析地址,所以此法不太实用。

2、使用 ngrok

   主要工作原理是:通过 ngrok 客户端连上 ngrok 提供的服务器,这样就打通了一个连接隧道,然后让公众平台上的 url 指向 ngrok 服务器,ngrok 服务器接收到消息后会通过隧道将信息转发到你本地的 ngrok 客户端,使用比较简单,可以参考官方文档:https://ngrok.com,不过 ngrok 速度较慢,微信服务器对实时性要求较高,每次通信超过 5 秒便超时,所以此法也不建议使用。

3、使用具有公网ip的服务器

   作为一名专业工程师,拥有公网 ip 地址的 VPS 服务器基本成了标配,阿里云 VPS 最便宜的一款每年也就几百块钱,平时挂挂自己喜欢的服务,做个站长,跑跑自己的开源项目甚爽。

   首先确保该服务器可以通过 XShell 这类 SSH连接上去,为连接配置一个反向隧道,如下图所示:

   注意红色框部分所填写的配置,连接上服远端服务以后,在本地修改一下 JFinal Weixin Demo 项目的 token 配置,再修改微信公众平台的 url 与 token 以后就可以开始调试开发了。

   如果远程服务器是 windows 系统,可以安装一个Bitvise SSH Server 软件即可将 windows 服务器打造成SSH Server 了。

    后续补充:如果上面方式还是搞不定,可以看一下 jfinal weixin WIKI 中提供的更容易的方式解决,请移步这里:http://git.oschina.net/jfinal/jfinal-weixin/wikis/JFinal-weixin-demo%E5%92%8C%E8%B0%83%E8%AF%95

4、Linux 用户

如果开发机器是 Linux 或是 Mac,直接使用如下 linux命即可建立反向隧道:ssh -R :80:localhost:本地端口 root@远程主机ip地址

展开阅读全文
打赏
20
79 收藏
分享
加载中
JFinal博主

引用来自“Dreamlu”的评论

13波总,WIKI里面的基于QQ浏览器的调试非常不错:http://git.oschina.net/jfinal/jfinal-weixin/wikis/JFinal-weixin-demo%E5%92%8C%E8%B0%83%E8%AF%95 我上周试了一下非常简单!
早说啊,我在博客中加上这一段内容
2015/12/11 18:32
回复
举报
13波总,WIKI里面的基于QQ浏览器的调试非常不错:http://git.oschina.net/jfinal/jfinal-weixin/wikis/JFinal-weixin-demo%E5%92%8C%E8%B0%83%E8%AF%95 我上周试了一下非常简单!
2015/12/11 13:49
回复
举报
JFinal博主

引用来自“simafei2”的评论

波总, 请问下Mac 反向隧道怎么建立的呀,查了好多资料都没有建成功过
Mac 下直接用命令建立反向隧道:ssh -R :80:localhost:80 root@远程主机ip地址。第一个 80 为远程端口号,后面的80为本地项目启动时的端口号,具体意义与本博文用的XShell建立反向隧道一样,根据你的实际情况进行改动。
2015/12/11 10:03
回复
举报
波总, 请问下Mac 反向隧道怎么建立的呀,查了好多资料都没有建成功过
2015/12/10 21:59
回复
举报
JFinal博主

引用来自“yourOnlyJack”的评论

@波总 ,强烈要求波总看一下最新的微信自带调试功能。非常酷,开发者模式可以生产一个URL用以调试本地网络。哪有文中所述那么复杂
微信官方新出来的功能不? 给个链接哈
2015/11/19 22:33
回复
举报
@波总 ,强烈要求波总看一下最新的微信自带调试功能。非常酷,开发者模式可以生产一个URL用以调试本地网络。哪有文中所述那么复杂
2015/11/19 22:10
回复
举报
JFinal博主

引用来自“xtuul”的评论

@波总 ,我也通过XSHELL连接到阿里云服务,按照你的图示也配置了,但是就是转不到本地来,利用IP进行访问还是访问到了阿里云上,能把第三种设置方法,说详细一些吗?
阿里云最新版本的linux的确不能直接正常工作,安装一个nginx,然后用于微信的域名 80 端口转发到 9999,然后隧道配置中的远程incoming 端口由 80 改成 9999即可,前几天确认过可用。简单来说就一句话,在本博客的基础之上,远程端口让 nginx 做次转发
2015/11/02 09:17
回复
举报
@波总 ,我也通过XSHELL连接到阿里云服务,按照你的图示也配置了,但是就是转不到本地来,利用IP进行访问还是访问到了阿里云上,能把第三种设置方法,说详细一些吗?
2015/10/30 16:50
回复
举报

引用来自“uestcdengww”的评论

波总,你好!
我在阿里云vps上可以测试到隧道已打通,如下所示。但是通过浏览器访问公网ip一直失败,不知道为什么?
root@iZ28dwnr7nwZ:~# wget http://localhost:80/jfinal_weixin/msg
--2015-07-22 22:49:11-- http://localhost/jfinal_weixin/msg
Resolving localhost (localhost)... 127.0.0.1, 127.0.1.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: ‘msg.12’

[ <=> ] 69 --.-K/s in 0s

2015-07-22 22:49:11 (3.53 MB/s) - ‘msg.12’ saved 69

引用来自“JFinal”的评论

很明显访问返回的状态是 200,证明是成功的。另外,路由 "/msg" 是让微信平台访问的,不是让 wget 来访问的。访问一下 "/api/getMenu" 这个是浏览器访问的,可以获取公众号菜单
我晚上回去试试,谢谢波总
2015/07/23 14:54
回复
举报
JFinal博主

引用来自“uestcdengww”的评论

波总,你好!
我在阿里云vps上可以测试到隧道已打通,如下所示。但是通过浏览器访问公网ip一直失败,不知道为什么?
root@iZ28dwnr7nwZ:~# wget http://localhost:80/jfinal_weixin/msg
--2015-07-22 22:49:11-- http://localhost/jfinal_weixin/msg
Resolving localhost (localhost)... 127.0.0.1, 127.0.1.1, ::1
Connecting to localhost (localhost)|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: ‘msg.12’

[ <=> ] 69 --.-K/s in 0s

2015-07-22 22:49:11 (3.53 MB/s) - ‘msg.12’ saved 69
很明显访问返回的状态是 200,证明是成功的。另外,路由 "/msg" 是让微信平台访问的,不是让 wget 来访问的。访问一下 "/api/getMenu" 这个是浏览器访问的,可以获取公众号菜单
2015/07/23 08:48
回复
举报
更多评论
打赏
39 评论
79 收藏
20
分享
返回顶部
顶部