网站需要接入微信登录和微信支付,接入完成完成后发现PC端是可以正常扫码登录,也可以正常进行支付操作,但是移动端在微信中使用第三方微信登录,一直显示登录不了,支付也是支付不了,这就奇怪了,同样是微信登录和微信 支付为什么在PC端是正常的而在移动端不行呢?
原因是PC端的微信登录能力使用的微信开放平台的微信登录能了,而移动端我们大多时候接入的是微信公众号端的登录能力,两者有什么区别呢?我们来看看:
对于微信生态,它有两套体系(严格来说是至少两套),分别是开放平台和公众平台。在构建授权链接这一步,取决于你接入的体系,会有对应的链接。PC Web 接入的是开放平台,而手机 Web 接入的是公众平台(当然,手机 Web 其实也可以接入开放平台,但是不推荐!)。
比如对于 PC 来说,一般来说,第三方网站的授权链接页面,会展示说哪个接入方想要获取你的什么数据,你同意吗?并展示一个同意或者拒绝的按钮在页面上。而对于微信,它在授权链接网页页面展示的却是一个二维码,用户是否同意,要通过手机扫完这个二维码后,在手机上才能看到。虽然比较特殊,但仍然是一个标准的 OAuth 2.0/OIDC。
对于 PC Web 来说,一个典型的授权链接是:
https://open.weixin.qq.com/connect/qrconnect?scope=snsapi_login&state=d3Yvfou3pdgp-UNVZ-i7DTDEbv4rZTWx6Wh7lmxzyvk.98VO-haMdj4.c0L0bnybTEatKpqInU02nQ&response_type=code&appid=wxc09e145146844e43&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Frealms%2Fmaster%2Fbroker%2Fweixin%2Fendpoint
前面为什么说,手机 Web 不能接入开放平台呢?因为在手机 Web 页上展示一个二维码,让用户来扫码确认,操作上不方便。因此手机端一般使用公众平台,对于这种情况,用户可以直接在微信里打开该链接,并进行授权(显式的或者隐式的),然后微信会颁发授权码再跳转到接入方,也是一个标准的 OAuth 2.0/OIDC 流程。一个典型的手机端授权链接是:
https://open.weixin.qq.com/connect/oauth2/authorize?scope=...&state=...&response_type=code&appid=...&redirect_uri=...
注意这两个链接不太一样,因为是两套体系。不过,其主机名都是 http://open.weixin.qq.com,因为这都是微信的开放能力。
如果在手机端微信网页授权报错{errcode:40029,errmsg:invalid code},那么很显然问题是发生在了微信公众号端的参数配置上,其中我们最可能需要用到的就是APPID和AppSecret,以及code,提示code无限的原因,多半是APPID和AppSecret参数不匹配造成的,请检查你得参数设置。