当跳转到第三方微信服务号时,报错提示api unauthorized。
错误分析
scope
参数)设置错误:access_token
为普通access_token
;access_token
。 看到上面大家应该已经清楚了,没错,就是 授权 不同导致的。
我们的基础框架是当用户获取到openid
和access_token
后自动去获取用户信息,而此时我们若使用静默授权,普通access_token
并不具备这种权利,就导致如题错误。
解决方法
scope
作用域 设置为 snsapi_userinfo
。时不时出现的问题,很恼人。
错误分析
官方错误码:40029 – 不合法的oauth_code
顾名思义,问题是由于微信返回时code错误引起的。
解决方法
官方说明:
code说明 :code
作为换取access_token的票据,每次用户授权带上的code将不一样,code
只能使用一次,5分钟未被使用自动过期。
因此报错有三种可能:
code
超过5分钟未使用,失效 – 重新获取即可。code
被多次使用 – 检查链接是否多次调用;判断微信返回码,为 40029
则重写code
;记录openID,若5分钟内多次出现,限制获取code。code
正常,但存储的access_token
未被重写 – 检查写入access_token
是否正常。该问题为链接拼接错误,重新拼接即可。
错误分析
官方错误码:40001 – 不合法的凭据
解决方法
官方说明:
获取access_token
时AppSecret
错误,或者access_token
无效。请开发者认真比对AppSecret
的正确性,或查看是否正在为恰当的公众号调用接口
报错提示很明显,要么是AppSecret
错要么是access_token
无效;
AppSecret
错 – 检查微信配置是否正确;access_token
无效 – 多个公众号冲突导致。在我的程序中就是存在两个公众号跳转,但由于配置文件问题,导致两个公众号在同一个位置配置access_token
,而当程序切换时使用到不匹配的access_token
就报这个错。
直接将文件中缓存的access_token
配置清空,重新获取即可。
ps:配置一定要修改
错误分析
官方错误码:微信 JS 接口签名不合法;
使用官方在线校验工具(https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign) 生成 signature
与本地程序生成的一致,但是仍然提示报错 invalid signature
。经过参数分析发现,是签名URL与当前页面URL不一致导致的报错。
解决方法
参数中的URL为 ip
地址,但实际访问时是走的 域名
。
因此,将参数中URL改为域名即可。
错误分析
顾名思义罗,很简单,就是微信返回的code
被重复使用导致的,问题很简单,重点是为什么会导致这个问题。
下面是我的问题重现:
40163
重复测试几次后,页面出现“非微信官方网页 转换为手机预览模式”提示,该提示出现在第二步之后,也就是表明此时回调应该是已经完成才对,而当我点击“继续访问”后,出现回调报错。
我来捋一捋,为什么code
会报错,因为重复调用;那为什么重复调用呢,因为在提示“非微信官方网页 转换为手机预览模式”前已经完成回调,而我们点击“继续访问”就变成了第二次回调,也就是重复使用code
啦。
综上,我们的实际问题也就转换为了:为什么会出现“非微信官方网页 转换为手机预览模式”该提示(此处只是个例)。
通过各种搜索与实践后发现,是由于 域名
导致的,我这边使用的 花生壳
的免费域名,而此域名很有可能已经被微信屏蔽,无法正常使用,买了个域名后,程序通过。(╮(╯▽╰)╭ 天上果然不能掉馅饼啊)
ps: 如果是使用微信测试号的话,可以直接使用 IP
访问。(内网IP
也行)
错误分析
官方错误码:不合法的 OpenID,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID。
翻译一下就是,openID 与 access_token不匹配了;
实际我的问题就是多个项目对应同一个公众号,而多个项目的access_token位置不同,并都在同时修改导致的
解决方法
所有项目指向同一个 access_token文件就解决了。