+发表新主题
查看: 2529|回复: 0

[问答求助] 微信公众号开发如何进行本地调试?

[复制链接]

[问答求助] 微信公众号开发如何进行本地调试?

[复制链接]
shitou 发表于 2015-11-6 10:37:28 浏览:  2529 回复:  0 [显示全部楼层] 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这几天见有小伙伴在问微信如何做本地调试的问题,表示没有做过本地调试 ,不过也上网搜了相关的实现方案,给需要的小伙伴们整理些思路,仅供参考!

方法一:ngrok的使用,基于windows

1:为什么要使用ngrok?在微信开发的时候 需要填写与微信服务器相连接的url 这个url必须是外网域名,也就是说我们需要在这个外网域名对应的ip服务器上做开发,而没办法本地开发调试,所以用ngrok获得一个外网域名,这个外网域名实际访问的是本地主机。这样把此外网域名填入到微信需要的外网url里 就可以在本地开发调试了。

2:下载ngrok ngrok - secure introspectable tunnels to localhost windows版

3:注册ngrok得到your auth token后面的自定义域名必须要有这个token

4: 打开cmd cd到ngrok.exe在的目录,执行ngrok 80就可以给你本机的127.0.0.1:80分配一个外网可以访问的域名,例如http://1f1b1c.ngrok.com,也就是外网访问http://1f1b1c.ngrok.com就是访问你本机的127.0.0.1:80,当然如果你执行ngrok 8080那就是分配一个域名访问127.0.0.1:8080。

5: 上面分配的域名是临时的,可能下次开电脑这个域名就变化了,我们需要一个固定的域名映射到本机的80端口。所以先登录 执行ngrok -authtoken XUsFLvG4hgb8ukjvML8YBXX 80 这里填写的是你注册时给你的token,然后ngrok -subdomain myapp 80 这样后续你通过http://myapp.ngrok.com就可以 ... 机的127.0.0.1:80了。当然如果是想访问的是8080端口 那就把上面的80都改成8080

6:不要关闭cmd窗口 关闭后提供的域名就访问不了了 如果要查看ngrok给你做的中转http信息 访问http://localhost:4040/

7:具体到微信的开发 一定要注意 由于是ngrok做的中转 出于安全考虑通不过微信的默认语句libxml_disable_entity_loader(true),所以注释掉他,等正式部署到服务器再取消注释

方法二:在服务器上抓包,在本地进行模拟

微信接入是个很头疼的东西,主要原因是webhook 的 url必须是服务器地址,无法在开发机上调试。目前为止我用的方案是在服务器上抓包在本地模拟,配合单元测试把功能开发完成后,再放到服务器上调试,但调试过程中难免要对代码做修改,体验很不好。最近受不了这么折腾,脑洞大开地想把服务器上的请求直接proxy到本地,然后发现 ssh 自带了这个功能。

主要的东西就是ssh 的 -R参数,这里假设微信后台填的webhook URL是 http://wechat.lazybee.me,本地开发环境开的端口是 http://127.0.0.1:8000,整个转发流程是这个样子的

1. Nginx 把 wechat.lazybee.me 的请求转发到其它端口,比如 10000 端口。(因为 80 端口上还有其它服务在跑,不能暴力转发 80 端口所有请求)

  1. server {

  2.     listen 80;

  3.     server_name wechat.lazybee.me;



  4.     location / {

  5.         proxy_pass http://127.0.0.1:10000;

  6.         proxy_set_header X-Real-IP $remote_addr;

  7.     }

  8. }
复制代码
2. 在本地开一个到服务器的转发通道。(要求服务器开启 sshd 服务)

  1. ssh lazybee.me -R 10000:127.0.0.1:8000
复制代码
3. 让本地开发环境监听 8000 端口。

这样就可以直接在本地边开发边测试了,当然别忘了根据微信的规则配置 OAuth2.0网页授权 等参数。我自己的开发环境通常会改host,然后在本地开个dnsmasq让iOS或Android设备用本地的dns,就可以很大程序上模拟真实环境了。

方法三:简单的IP映射

鉴于大部分ADSL都封了80端口,所以想要本地调试,有以下条件:
1.公网服务器一台,用于监听来自微信服务器的请求
2.支持动态域名和端口转发的路由器

首先注册一个路由器支持的动态域名服务商,将动态域名绑定至路由器,同时在路由器上设置端口转发,比如你的公众平台程序的端口是2222,那就将wan口的2222转发至lan口2222。

然后在公网服务器上用nginx监听80端口,解析你的子域名(如weixin.lfzyx.org),然后通过nginx的proxy_pass ,将请求转发至你的动态域名加2222端口。这样就可以通过weixin.lfzyx.org这个子域名调试你的微信公众平台接口了。

其他参考工具:
1.https://github.com/xred/WeTest
2.https://github.com/xixilive/wecheat.git
3.https://github.com/ushuz/weixin-simulator
4.https://github.com/node-webot/webot-cli
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网