微信公众号后端开发-使用ngrok搭建本地环境

2021-04-16  本文已影响0人  码丁

今天记录一个微信公众号后端开发中遇到的问题。

一、问题描述

客户希望能动态生成带参数的微信二维码,用户扫描后,服务端能接收二维码中的参数进行逻辑处理。

先简单梳理一下流程:

  1. 调用微信的生成带参数的二维码接口,生成二维码。
  2. 服务端提供回调接口,用于接收微信发送的扫描带参数二维码事件

步骤1的开发没有难度,直接调用相应接口就能完成。重点说一下步骤2,既然是回调接口,那就意味着需要提供一个接口,供微信服务器来调用。可是本地环境在局域网内,微信无法访问到,开发的时候怎么才能方便的调试呢?

本地开发通常都是使用微信测试号,在测试号里也是可以配置服务器地址的。那能把本机地址配上去吗?显然是不能的。

image.png

二、解决方案

先说结论:借助ngrok工具进行内网穿透。ngrok的文档中有这样一句话:

Expose a local web server to the internet。

翻译过来就是“把本地的web服务器暴露在公网上”,那就着能通过公网访问本地的web服务器,我们不就是希望能在本地环境方便的开发、调试吗?这就达到了目的。

步骤:

  1. 从ngrok的官网上下载好,然后启动。我这里映射到了本地环境的8000端口。


    image.png
  2. 在测试号中配置好服务器信息,提交。


    image.png

扩展知识

  1. 微信测试号的消息传递只支持明文传输,如果有消息加密的需求,那该怎么办?这时就要借助微信公众平台接口调试工具了,接口类型选消息接口调试,接口列表选事件消息,加密调试选安全模式,输入参数就可以进行接口调用了。

    image.png
  2. 有的开发者有真实的微信公众号,想基于微信公众号在本地环境直接开发。由于ngrok的域名被微信限制,所以是无法直接配置的。在配置之前,开发者可以在微信中随机访问一下。比如我这里在微信中访问了上面用到的域名http://7fdb639cca98.ngrok.io

    image.png

那这种情况是不是就不能用ngrok了呢?办法也是有的。首先你得有一台独立的外网服务器,然后安装好nginx,配置一个反向代理。配置极其简单。

location / {
    proxy_pass http://7fdb639cca98.ngrok.io;
}

然后用你外网服务器的域名或者ip替换掉ngrok的域名就可以了。这是我配置好之后的结果。我们会发现域名发生了改变,不是ngrok的地址,变成了我外网服务器的ip地址。


image.png

小结

  1. 接收、处理微信的消息、事件可以借助内网穿透工具解决,对于主动发起调用微信接口的方式不会受限制。
  2. 进行服务器配置时,微信会向服务器发起一个验证消息的请求,开发者需要提前实现该接口,否则也是配置不成功的。
  3. 消息加解密传输的代码,微信官方提供了实现。可以直接前往微信公众平台开发-接入查看和下载,更具体的消息加解密方案可以查看消息加解密接入指引
上一篇下一篇

猜你喜欢

热点阅读