微信公众号开发实时调试方法
博客专区 > JFinal 的博客 > 博客详情
微信公众号开发实时调试方法
JFinal 发表于4年前
微信公众号开发实时调试方法
  • 发表于 4年前
  • 阅读 14006
  • 收藏 75
  • 点赞 19
  • 评论 39

【腾讯云】新注册用户域名抢购1元起>>>   

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

   初充说明:微信官方目前已推出“微信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
粉丝 3869
博文 4
码字总数 2275
作品 3
评论 (39)
一觉泯恩仇
先顶再看28 支持波总
00oo
@JFinal 最后一种方式,微信设置的URL为VPS的公网IP,建立反向隧道的目的就是微信服务器通过80端口访问VPS的请求通过反向隧道发送到本地机器,是这样么?

我自己采用putty设置好反向隧道之后,在vps用telnet localhost 80 提示连接成功,之后就可以采用本地调试了么,为什么我在微信端发消息没有反应?
JFinal

引用来自“00oo”的评论

@JFinal 最后一种方式,微信设置的URL为VPS的公网IP,建立反向隧道的目的就是微信服务器通过80端口访问VPS的请求通过反向隧道发送到本地机器,是这样么?

我自己采用putty设置好反向隧道之后,在vps用telnet localhost 80 提示连接成功,之后就可以采用本地调试了么,为什么我在微信端发消息没有反应?
没错,是这样的。设置好反向隧道以后,在 vps 上通过 wget localhost 访问一下,看本地 eclipse 控制台有无 JFinal action report 输出, 先确保隧道打通,再用微信测试才是王道
himooc
谢谢!我用花生壳,让花生壳把它的二级域名映射到我的内网,免费滴~
被占用
Jfinal-weixin-1.jar 开发的微信公众号,个人学习使用嘿嘿,,,,公众号:ixuruicn
JFinal

引用来自“himooc”的评论

谢谢!我用花生壳,让花生壳把它的二级域名映射到我的内网,免费滴~
用花生壳需要你路由器的 IP 确实是外网 IP
JFinal

引用来自“2b的it青年”的评论

Jfinal-weixin-1.jar 开发的微信公众号,个人学习使用嘿嘿,,,,公众号:ixuruicn
多去问答区反馈使用情况哈
deFan
仅限java?
JFinal

引用来自“deFan”的评论

仅限java?
不限任何语言,纯粹就是个反向隧道
JFinal

引用来自“猪大宝”的评论

http://localhost/jfinal_weixin/msg
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... No data received.
这个是怎么了啊
去问答区发起一个详细的问答吧,目前通过你提供的信息无法知道是什么原因
猪大宝
我现在wget测试是可以的,但是直接在浏览器域名访问是不行的,微信URL也调不通,怎么测试
JFinal

引用来自“猪大宝”的评论

我现在wget测试是可以的,但是直接在浏览器域名访问是不行的,微信URL也调不通,怎么测试
将项目启动,再把反向隧道配置好,然后打开浏览器并输入远程服务器 ip 地址: http://ip/msg, 看 eclipse 控制台是否输出了 JFinal action report,如果没有输出则证明反向隧道没有配置成功或者请求被防火墙阻止。如果反向隧道不能正常使用,后面的调试则无法继续
Jason_hu

引用来自“猪大宝”的评论

我现在wget测试是可以的,但是直接在浏览器域名访问是不行的,微信URL也调不通,怎么测试
可能是你的服务器,外部ip已经开启了80端口,这样隧道映射的时候,只映射成功了localhost的80端口。 SSH隧道映射的时候,如果服务器端口占用,是没有明确错误提示的,这个很不好。
本人纯属虚构
楼主截图是什么软件啊? 我的服务器是win2003已经安装了 Bitvise SSH Server 我在本地安装了 Bitvise SSH Client后不知道怎么设置反向代理 只看到一个 socks/http proxy forwarding
本人纯属虚构
楼主截图是什么软件啊? 我的服务器是win2003已经安装了 Bitvise SSH Server 我在本地(win7)使用putty设置好反向隧道后不知道怎么启动 本地不知道发什么命令 远程主机也不知道发什么命令 17
JFinal

引用来自“本人纯属虚构”的评论

楼主截图是什么软件啊? 我的服务器是win2003已经安装了 Bitvise SSH Server 我在本地(win7)使用putty设置好反向隧道后不知道怎么启动 本地不知道发什么命令 远程主机也不知道发什么命令 17

反向隧道用的 XShell,去官方下载,注册码一下
本人纯属虚构

引用来自“JFinal”的评论

引用来自“本人纯属虚构”的评论

楼主截图是什么软件啊? 我的服务器是win2003已经安装了 Bitvise SSH Server 我在本地(win7)使用putty设置好反向隧道后不知道怎么启动 本地不知道发什么命令 远程主机也不知道发什么命令 17

反向隧道用的 XShell,去官方下载,注册码一下
下了一个XShell终于OK了 不容易啊 谢谢 @JFinal
本人纯属虚构
还有个问题真是奇怪啊 设置对应的端口 http://ip/msg 和 http://ip:port/msg 都能正常访问 但是用域名的话只有加端口才能访问 http://website/msg 无法访问 http://website:port/msg 可以正常访问
Mr.CT
@JFinal WeixinApiController 需要在微信平台配置吗?这个控制器什么时候被调用的?
JFinal

引用来自“Mr.CT”的评论

@JFinal WeixinApiController 需要在微信平台配置吗?这个控制器什么时候被调用的?
WeixinApiContrller 对外界来说就是一个可以 http 调用的url资源,这个url是被你在浏览器里面手动调用的,不需要在微信平台配置。简单过程是:你在浏览器里面请求这个controller,然后这个controller再通过微信平台提供的api进行交互得到值,然后controller 再将此值返回给你
×
JFinal
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: