暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

解决微信公众号本地开发时的IP白名单问题

背井 2021-03-03
7160

由于公司办公网络 IP 不是固定的,每次变更时,本地开发机器调用微信开放平台接口时都会因为IP白名单问题而报错。

一个有效但繁琐的解决办法是,每次报错时,手动获取本机新的IP并登录开放平台将IP加入到白名单中。

这样做,一两次还好,如果经常如此,怕谁也受不了。

下面提供一个更高效的方式。(这个方式不限于公众号开发,基本上所有同类问题都可照此方法解决!)。

既然问题出在 IP 会变化上,我们就想办法弄一个不会变的 IP 来使用。

互联网公司基本都会有自己的公网服务器,而且这个公网服务器 IP 一般是不会变的,能利用这个不变的 IP ,岂不妙?

怎么做?

之前的文章 《ssh二三事》中,介绍过 SSH 的一些用法,尤其是强大的端口转发。

我们要做的,是把公网服务器的 IP 设置到开放平台IP白名单中,再将公网服务器设置为一个代理,本地开发机器使用这个代理来发送请求。如此一来,当本地机器调用开放平台接口时,对开放平台而言,看到的 IP 会一直是公网服务器的,不会受到本机 IP 改变的影响。

目的达成。

实现步骤如下:

  1. 打开动态端口转发(socks5代理):
# 在开发机器上执行
ssh -D 12345 -N your_server

复制

your_server 换成公网服务器登录地址。

通过以下命令检查代理是否成功:

# 在开发机器上执行
# 会发现返回的ip是公网服务器的ip
curl -x socks5://127.0.0.1:12345 httpbin.org/ip

复制
  1. 在IDE中设置jvm运行参数:
-DsocksProxyHost=localhost -DsocksProxyPort=12345

复制

Intellij IDEA 中设置截图如下:

  1. 给用到的网络库设置代理

如果你用的是 Spring 框架内置的 RestTemplate 来调用公众平台接口,请参考网络上设置代理的方法。

我用的是封装好的微信公众平台API,试了一下,它会自动应用上上面的jvm参数:

<!-- 我使用的公众平台库 -->
<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-mp</artifactId>
    <version>3.9.0</version>
</dependency>

复制

以上,本地开发时的IP白名单问题就化解了,不用再为频繁变动的 IP 问题而烦扰。

- END -


文章转载自背井,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论