序言

一般本地开发环境都是运营商分配的内网ip,这就造成了本地调试微信支付的时候,回调无法直达开发环境,这样的情况就可以借助内网穿透来解决。解决方案有DDNS、花生壳、Ngrok、Frp等,本文具体介绍ngrok的操作方法。


安装ngrok

  • 根据开发环境下载对应客户端(本文采用64位windows客户端)
  • 解压客户端到d盘根目录
  • 注册ngrok账户,获取authtoken
  • 打开客户端配置authtoken
$ ./ngrok authtoken yourauthtoken
  • 在80端口上启动http隧道
$ ./ngrok http 80

360截图16511004313978.png

  • 访问客户端返回的链接即可(80端口服务需要开启)

应用到项目

默认的操作只能访问到80服务默认的目录,要实现微信支付通知。要么将项目直接部署在默认的根目录,但是这样并不科学,ngrok可以使用修改后的Host头重写请求,实现将请求转发到对应的应用程序(如WAMP,MAMP和pow)
  • 在Apache中配置虚拟域名example.com指向待调试的项目的目录
  • 将主机标头重写为“example.com”
ngrok http -host-header=example.com 80

访问即可实现ngrok转发请求到本地指定项目

修改配置文件实现快速启动

ngrok从命令行按名称启动预配置的隧道,而不必每次都记住所有正确的参数

  • 修改配置文件 C:\Users\example\.ngrok2\ngrok.yml
tunnels:
   httpbin:
    proto: http
    addr: 80
    host_header: example.com
  • 启动名为'httpbin'
ngrok start httpbin

web ui

实时监控流量内容

ngrok提供实时Web UI,您可以在其中内省隧道上运行的所有HTTP流量。启动ngrok后,只需在Web浏览器中打开http://localhost:4040即可检查请求详细信息。该页面显示了请求和响应的所有详细信息,包括时间,持续时间,标头,查询参数和请求有效负载以及线路上的原始字节。

360截图16600831566091.png

再次请求

调试微信支付没做出正确响应的时候需要复现请求,如果等待微信的后续通知会减慢开发周期,使用ngrok的Web UI上任何请求右上角的“replay”按钮以重发送请求,这将大大加快了迭代周期。

replay2.png

ngrok除了上述配置外还提供了全球的分布式服务器,您可以通过配置选取最近的服务器达到降低延迟的目的。

本文仅展示了ngrok的部分功能,更加详尽的用法请参考官方文档

最后修改:2020-02-24
如果覺得我的文章對你有用,請隨意讚賞