简单说一下微信开发OAuth2.0授权的一个小坑

最近在开发一个微信项目,在网页中要获得微信用户的基本信息,微信给出一个连接,可以通过该连接引导用户授权,连接样式如下:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
如果你的代码中在用户访问这个网址之前有逻辑想要写入session中,那么很不幸,用户在访问这段连接后,授权后回调回来时,相当于又开启了新的会话,之前保存的session就没用了。所以,大家有什么需要保存的数据,还是写在state参数中,以get的方式获得吧。

举个例子:

如果,我有一个需要用户从微信中打开的链接,其中,有一个参数id用于判断是通过谁来访问的,id就是邀请人的id,类似于:

http://xxx.com/index.php?id=123

代码:


openid;
	// 把邀请人ID存到数据库中
	// ......
}
elseif (isset($_SESSION['openid'])) {
	// 如果存在$_SESSION['openid']跳过授权页面,直接进入相关逻辑,不能让用户每次访问都授权
	// 授权次数是有限的
	// 逻辑代码
}
?> 



以上代码是错误的写法,因为在微信回调回来的时候,开启了一个新的会话,之前的邀请人ID并没有被带回来。

所以,如果在回调之前有要保存的数据,最好在state中,微信回调回来的地址中会把你的参数含在地址中,可以用get方式获取。

你可能感兴趣的:(PHP相关)