记录一次因IPv4和IPv6协议不同而引发的第三方接口调用失效的问题,仅供大家参考!!!
背景介绍
公司有一个微信小程序,我做后端的,负责给小程序提供数据接口。后来因为一系列原因小程序要对接一个中控(类似数据中台的概念),所有的人员和组织架构等信息数据要从中控获取。
我按照第三方(中控)给的接口文档开始对接接口。一开始调用接口都挺顺利的,直到我们公司因为网络问题进行一次网络修复后问题就出现了。
排查问题
公司网络修复后的第一天来公司上班,开始又一天的接口对接,结果第三方获取token的接口请求不成功了。直接在浏览器上访问token的地址报403的错误。这让我很奇怪,昨天下班前还好好的,怎么今天早上就不行了。
1、我开始打断点,把接口的入参和接口的地址都打印出来发给与我对接的开发人员(中控的开发人员),经他确认这些参数和地址都没有错。还给我换了一个账号进行测试,还是不行。中控的开发人员自己测试时发现他们是可以调用的通的。
2、又自我怀疑是本地开发环境的问题,之后把代码给同事让他用自己的环境调用下,发现还是不行。
3、我又把代码放到公司的测试服务器上,结果调用接口成功。
经过上面的反复折腾还是没搞定,我就开始怀疑是不是网路问题,或则第三方屏蔽了我们公司的地址。
下班后我回家进行测试,发现在家里也是可以正常调用第三方接口的,由此确定问题应该是出现的网络环境中。
第二天去公司我就联系了第三方的运维让他们查看下是否有设置黑名单之类的屏蔽了我们公司的IP,经过排除没有黑名单。而且公司网管说,我们用的不是专线,也就不能屏蔽IP了。这时我就有点蒙,不知道咋回事了。我又ping了一下token接口的域名确保是通的。这个时候第三方的运维也发了一张他ping域名的截图,告诉我也是可以ping的通的。都能ping的通,我也就没在意就顺手把我ping的截图也发给了他。
还好我的“顺手”+运维同学的细心,发现我们ping域名后反馈的IP地址协议不一样,运维同事ping后反馈是以IPV4,而我是IPV6。这下真相了!!
我立马查看电脑的IP协议,果然勾上了IPV6。我把IPV6选项去掉后再次通过本地环境访问token接口——通了。
总结
第三方用的IPV4协议作为地址,公司用的是IPV6协议作为地址,两边协议不同导致请求第三方接口403。