背景:
最近项目迁移到新的服务器,在调用微信推送模板的时候,就出现了以下的异常:
2019-09-10 15:59:02.687 [ INFO] [http-nio-8007-exec-6] com.chaozhou.zhixin.util.wxmp.WxmpUtil.http_get:975 - 微信请求:grant_type=client_credential&appid=wx15d680a4d777a406&secret=443dc8bd58c6ba637ccdc9950e74edbb
2019-09-10 15:59:02.687 [ INFO] [http-nio-8007-exec-6] com.chaozhou.zhixin.util.wxmp.WxmpUtil.http_get:976 - 微信响应:{"errcode":40164,"errmsg":"invalid ip 111.111.111.111 ipv6 ::ffff:111.111.111.111, not in whitelist hint: [a303422994]"}
请求报文:grant_type=client_credential&appid=wx15d680a4d777a406&secret=443dc8bd58c6ba637ccdc9950e74edbb
响应报文:{"errcode":40164,"errmsg":"invalid ip 111.111.111.111 ipv6 ::ffff:111.111.111.111, not in whitelist hint: [a303422994]"}
2019-09-10 15:59:02.791 [ INFO] [http-nio-8007-exec-6] com.chaozhou.zhixin.util.wxmp.WxmpUtil.http_get:975 - 微信请求:access_token=&openid=o53ZJt131NxQCajtnqg_oNtCdsSE&lang=zh_CN
2019-09-10 15:59:02.792 [ INFO] [http-nio-8007-exec-6] com.chaozhou.zhixin.util.wxmp.WxmpUtil.http_get:976 - 微信响应:{"errcode":41001,"errmsg":"access_token missing hint: [Dmu8mA0342sz37!]"}推送失败:需要接收者关注
2019-09-10 15:59:02.792 [ INFO] [http-nio-8007-exec-6] com.chaozhou.zhixin.service.base.SsWechatService.commonWechatInterface:539 - 推送失败:需要接收者关注
2019-09-10 15:59:02.793 [ INFO] [http-nio-8007-exec-6] com.chaozhou.zhixin.util.common.LogUtils.info:44 - Result-FAILURE: 需要接收者关注 - POST - /base/wechat/commonWechatInterface
com.chaozhou.zhixin.controller.base.tool.SsWechatController.commonWechatInterface (SsWechatController.java:349)
com.chaozhou.zhixin.service.base.SsWechatService$$EnhancerBySpringCGLIB$$623a625a.commonWechatInterface (<generated>:-1)
com.chaozhou.zhixin.service.base.SsWechatService$$FastClassBySpringCGLIB$$f8296e7d.invoke (<generated>:-1)
com.chaozhou.zhixin.service.base.SsWechatService.commonWechatInterface (SsWechatService.java:540)
com.chaozhou.zhixin.util.common.StaceTraceUtils.getStubInfo (StaceTraceUtils.java:44)
异常提示还是比较明显的:需要接收者关注;
但我都用了很久了,肯定是有关注过了公众号的,而且在本地测试推送正常,为什么到线上就不行了呢?校对过
wxmp_AppID和wxmp_AppSecret的值,也都正确,那到底是什么原因呢?
注意这句异常:
响应报文:{"errcode":40164,"errmsg":"invalid ip 111.111.111.111 ipv6 ::ffff:111.111.111.111, not in whitelist hint: [a303422994]"}
翻译过来就是:
{“errcode”:40164,“errmsg”:“无效IP 111.111.111.111 IPv6::ffff:111.111.111.111,不在白名单提示中:[a303422994]”}
什么意思呢?
就是微信它也有考虑到安全性问题,所以你要通过微信服务器来推送消息 ,首先你需要把你项目所在的服务器,在微信公众号上面,将ip 放在微信的白名单里面,这样就不会导致发送失败了;
解决步骤如下:
1、登录公众号,点击头像,选择“帐号详情”,然后在下面“IP白名单 ”,选择“查看”;
2、在弹出来的框上面,点击“修改”,修改前需要管理员扫码验证,验证通过后即可把ip填上,保存即可,再试试推送,就正常了;
总结:
当项目搬迁到新服务器时,如果新服务器ip没有添加到微信公众号白名单时,都会出现该异常,如果确认微信用户已经有关注了公众号的情况下,就应该考虑是否没有将ip加入到白名单中;