最近在用laravel开发一个微信公众号,遇到了一个微信网页授权的神坑。中文的错误提示是:”redirect_uri 参数错误”。搞了几天,终于搞明白这个神坑是如何产生的。
微信网页授权的两次跳转
在微信网页授权的整个过程中,会产生两次跳转。第一次是发起授权后,微信会把授权的user信息发送到callback的网页。callback网页拿到user信息后,将信息写入session。第二次跳转,就是写入成功后,跳转回到用户访问的目标页面。
这里最关键的就是第一次跳转的url,微信网页授权的神坑,就在这里。
第一次跳转的redirect_uri是由两个参数拼接而成
ctmd的,我想了很久才想明白,这个redirect_uri实际上是两个参数拼接而成。一个参数是在微信公众号的后台设置的:
里的 授权回调页面域名 。
另外一个参数是,我们放在.env环境变量里的 wechat_oauth_callback,这个redirect_uri实际上是这两个字符串拼接而成的。
如果微信后台设置的是 http://www.your-site-url.com,那么wechat_oauth_callback 就应该是/wechat/callback。如果第一个参数是http://www.your-site-url.com/ ,那么wechat_oauth_callback,就应该是wechat/callback。
拼接后的地址就是完整的redirect_uri,http://www.your-site-url.com/wechat/callback。微信网页授权的神坑就在这里,微信官方文档里和各种第三方库里都很少有人提到这个神坑。。。