简介:微信网页OAuth2.0授权接口是用于第三方应用获取用户许可后,实现与微信服务器安全通信的关键机制,支持授权码模式及简化模式。
微信OAuth2.0网页授权接口的ThinkPHP实现版本主要实现了oauth网页授权以及部分其他接口的功能。使用OAuth2.0授权的原因是通过此方式可以让开发者获取到用户的微信信息,包括昵称、头像等有用的数据,从而设计出更多更丰富的页面应用,例如当前流行的红包类活动。
此外,还有一项额外的好处在于可以控制页面在非微信浏览器中无法打开,减少代码被人窥探的风险。具体来说,在进行红包类活动时:
1. 用户访问链接后php接收到请求并跳转至微信OAuth2网页授权页;
2. 在获取到授权信息之后再次将用户引导回服务器端的PHP页面;此时返回的信息包括用户的详细资料等,然后记录在服务器中,并展示给用户。
3. 当好友点击分享后的连接时也会进行上述步骤。当发现从微信OAuth2受权数据中的用户与标识参数对应的分享者不一致的时候,则可以为用户提供红包。
使用方法如下:
- AuthAction.class.php ---- 认证基类
- IndexAction.class.php --- 测试类
- index/Conf/config.php --- 设置wx_appID(微信公众账号的appid)、wx_appsecret(微信公众账号的appsecret)、weixin_token(微信公众账号接口配置信息的Token)以及OAuth2.0授权后跳转到默认页面和过期时间等参数。
完成配置config.php之后,在微信公众号后台设置index.php/Index/wechatInitAuth进行微信API认证,提示配置成功方可使用。接下来是测试步骤:
1. 开通并填写appID、appsecret、Token至index/Conf/config.php。
2. 在微信中打开项目目录下的链接(例如:http://项目目录/index.php),若页面打印出session中的授权数据,则表示测试授权成功。
代码结构方面,在AuthAction的初始化函数_initialize中进行了OAuth2.0授权,所有基于AuthAction的控制器都将进行此过程(除了微信API认证过程wechatInitAuth)。对于同一用户在过期时间内多次访问时将不会重复请求权限以减少加载时间。受权过期时间可在index/Conf/config.php中的wx_webauth_expire设置,默认值为6500秒,建议不超过7200秒。
需要注意的是微信OAuth2.0授权分为两种模式:snsapi_base(不弹出授权页面直接跳转只能获取用户openid)和snsapi_userinfo(通过openid拿到昵称、性别等信息)。默认使用前者并且session中只保存基础数据。如果需要后者,可以自行修改代码实现。
具体实现方法见代码中的注释说明。