文档章节

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

JFinal
 JFinal
发布于 2014/10/24 09:44
字数 1104
阅读 14737
收藏 77

   初充说明:微信官方目前已推出“微信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 。

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

© 著作权归作者所有

共有 人打赏支持
JFinal

JFinal

粉丝 3946
博文 4
码字总数 2275
作品 3
海淀
CTO(技术副总裁)
加载中

评论(39)

JFinal
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 我上周试了一下非常简单!
早说啊,我在博客中加上这一段内容
如梦技术
如梦技术
13波总,WIKI里面的基于QQ浏览器的调试非常不错:http://git.oschina.net/jfinal/jfinal-weixin/wikis/JFinal-weixin-demo%E5%92%8C%E8%B0%83%E8%AF%95 我上周试了一下非常简单!
JFinal
JFinal

引用来自“simafei2”的评论

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

引用来自“yourOnlyJack”的评论

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

引用来自“xtuul”的评论

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

引用来自“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" 这个是浏览器访问的,可以获取公众号菜单
我晚上回去试试,谢谢波总
JFinal
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" 这个是浏览器访问的,可以获取公众号菜单
微信公众号开发之网页授权认证获取用户的详细信息,实现自动登陆

原创声明:本文转来源本人另一博客【http://blog.csdn.net/liaohaojian/article/details/70175835】绝非他人处转载 从接触公众号到现在,开发维护了2个公众号,开发过程中遇到很多问题,现在...

半山闲人
2017/04/15
0
0
微信JS-SDK之地理位置的获取与在线导航,集成百度地图实现在线地图搜索

原创声明:本文来源于本人另一博客【微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索】原创作品,绝非他处摘取,转载请联系博主 本次讲解微信开发第三篇:获取用户地址位置信息,...

半山闲人
2017/05/24
0
0
微信公众号开发工具汇总

前阵子写了篇入坑指南,介绍了下开发微信公众号的基本流程。最近又捣鼓了一阵,发现这开发工具的选择对于提高开发效率真是有莫大的帮助,所谓“只要工具选得好,月底奖金跑不了”。今天得空,...

郗南枫
2017/09/25
0
0
微信公众号开发之网页中及时获取当前用户Openid及注意事项

目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 (四)微信公众号开发之网页授权获取用户基本信息 (五)微信公众...

micahel
2017/01/12
0
0
微信小程序学习资源

微信小程序开发资源汇总 QQ交流群 目录 官方文档 新闻报道 社区 工具 插件 分析 讨论 教程 视频教程 文章 代码 轮子 置顶 WePY:组件化的小程序开发框架 :100: WePY 开发资源汇总 :100: ZanU...

技术金三胖
01/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Swift-系统默认UICollectionViewController的基本用法

不用xib创建时,需要重写 override init(collectionViewLayout layout: UICollectionViewLayout){} 在调用时需传 UICollectionViewLayout值,不然就会报错 let layout = UICollectionViewFlow......

west_zll
4分钟前
0
0
Spring Boot 最核心的 3 个注解详解

最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。然而,当我问他们 Spring Boot 最核心的 3 个注解是什么,令我失望的是鲜有人能答...

Java技术栈
5分钟前
0
0
Sqoop 增量导入导出及Job操作示例

增量导入 递增列的增量导入append # 第一次导入[root@node222 ~]# /usr/local/sqoop-1.4.7/bin/sqoop import --connect jdbc:mysql://192.168.0.200:3306/sakila?useSSL=false --table ac......

PeakFang-BOK
11分钟前
0
0
Thread中断的理解

★中断的理解:1)中断可以理解为线程的一个标识位属性;2)表示一个运行中的线程是否被其他线程进行了中断操作 中断好比其他线程向该线程打了个招呼,其他线程通过调用该线程的interrupt()...

karma123
18分钟前
0
0
App store 侵权投诉

App Store Content Dispute 侵权投诉 https://www.apple.com/legal/internet-services/itunes/appstorenotices/#?lang=zh...

壹峰
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部