问题描述:
客户迁移公众号无告知,导致公众号的用户,存在两个openId,一个旧公众号的openId,一个新公众号的openId。需要做openId转换处理
解决方案:
按照微信官方提供的文档 https://kf.qq.com/faq/1901177NrqMr190117nqYJze.html
需要获取旧的公众号关注的用户,批量调用获取到旧的openId,然后调用openId转换接口。这里要注意,关注用户列表最多只能获取1w条,而openId转换接口,一次只能转换100条。
所以需要注意拆分数据。
遇到的坑
-
旧公众号被注销,意味着该公众号所有接口无法调用,就算是简单的调用获取access_token,也返回 {“errcode”:50002,“errmsg”:“user limited rid: 605b1f97-576045c5-7ff0585d”},因为返回50002,表示没有权限
-
直接调用新公众号的openId接口进行测试,因为没有配置电脑IP到微信白名单,提示{ errcode: 40164, errmsg: ‘invalid ip 117.100.47.169 ipv6 ::ffff:117.100.47.169, not in whitelist hint: [39lrcA01394100]’ }
-
调用openId转换接口,请求参数格式错误,返回{“errcode”:47001,“errmsg”:“data format error rid: 605c4c13-0a9e5a8c-35950107”},格式错误
-
调用openId转换接口,返回{“errcode”:63178,“errmsg”:“appid wrong rid: 605c4ce1-1279f77e-3a826739”},这里需要注意,1、是不是请求参数错误;2、是不是公众号双方管理员都有确认迁移;3、openId转换接口是否是https
{
“from_appid”:“xxxxxxxx”,//此处为原帐号的appid
“openid_list”:[“oEmYbwN-n24jxvk4Sox81qedINkQ”,“oEmYbwH9uVd4RKJk7ZZg6S
zL6tTo”]//需要转换的openid,即第1步中拉取的原帐号用户列表,这些必须是旧账号目前关注的才行,否则会出错;一次最多100个,不能多。
}遇到问题:openid_list转换为json多了\转义符,结果返回的错误依旧是63178,并且也是appid wrong rid,存在误导情况,导致我一直去查63178是什么原因,丝毫没有觉得是自己请求参数多了转义符导致。这里必须记住要跟官网的请求参数一样,不能多转移也不能少字符串
-
调用openId转换接口,状态码返回301或者 Moved Permanently,查看请求是不是https
官网错误URL:http://api.weixin.qq.com/cgi-bin/changeopenid?access_token=xxxxx
正确URL:https://api.weixin.qq.com/cgi-bin/changeopenid?access_token=xxxxx
-
调用openId转换接口,提示access_token失效,返回{“errcode”:40001,“errmsg”:“invalid credential, access_token is invalid or not latest rid: 605c2ed0-2e206c4a-6885f518”}
总结
-
一开始遇到的问题,access_token从微信获取,失效时间为7200(两小时),但是实际上去调用的时候,总是莫名其妙就提示access_token失效,所以只能重新去获取。
-
后面又遇到,本地调试的时候,偶尔可以获取的到token,偶尔提示当前ip没有权限,只能让运维加入到微信的白名单里面
-
又因为WxClient是自己封装的,token会存在redis上,但是用redis上的token偶尔会提示token失效,处理:自己重新定义一个Get方法去调用
-
access_token获取成功之后,调用的时候,因为接口http调用失败,后面查看好久,才知道需要更改为https,然后调用的时候,又报请求参数错误。再看参数,发现是少了字符串,多了转义符这些细节问题
-
结果调用的时候,还是报63178,返回的信息也是说appid wrong 这个,实际上是openid_list出错,多了转义符导致的,必须要跟官网的请求参数一样才可以。
-
最终解决,经历过封装的wxClient返回的token有问题,接口路径错误,白名单没有加上,请求参数错误。这一系列细节上的问题。最终通过。
一句话总结:对接还是粗心,而且微信官网文档有些不靠谱,具体的还是要多质疑,不然很容易卡在一些莫名其妙的问题上。