项目开发中微信渠道为了获取用户地理位置(经纬度)需要调用微信JSAPI,在参数的获取过程中需要后端服务器请求获取access_token,在生产上报出了空指针,也就是未获取到access_token,我们看下获取access_token接口说明。
接口调用请求说明
https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数说明
参数 | 是否必须 | 说明 |
grant_type | 是 | 获取access_token填写client_credential |
appid | 是 | 第三方用户唯一凭证 |
secret | 是 | 第三方用户唯一凭证密钥,即appsecret |
返回说明
正常情况下,微信会返回下述JSON数据包给公众号:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
参数说明
参数 | 说明 |
access_token | 获取到的凭证 |
expires_in | 凭证有效时间,单位:秒 |
公司开发分为sit uat 准生产 生产环境,在sit和uat配置时使用的是微信测试号,没有出现任何问题,生产偏偏出现问题,在排查中发现微信接口返回报文是
{
“errcode”: -1000
“errmsg”: "system error"
}
提示:未知返回状态.
经过各种百度发现官方的一段说辞。
为了提高公众平台开发者接口调用的安全性,避免一旦开发者ID和密码泄露后给帐号造成损失。我们对调用“获取access_token”接口增加IP白名单校验:只有将IP地址设置为公众号的IP白名单,才能成功调用该接口。
开启IP白名单的步骤如下:
1、登录公众平台,进入开发->基本配置页面
2、点击配置进入IP白名单设置页
3、填写IP地址列表
多个之间回车隔开
4、管理员扫码确认保存
这里说明了问题是未配置白名单ip,为什么会返回-1000状态而不是40164状态,是因为在生产的企业微信未配置任何ip白名单。未配置ip白名单返回-1000,配置了但是不再白名单ip中返回40164。
公司项目后端是通过代理服务器出去的,所以我们在配置的时候找到了代理服务器的出口也就是出口的公网ip全部配置进ip白名单中,问题解决。