henter / wechat-oauth
微信OAuth SDK
Requires
- php: >=5.3.9
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2024-09-12 03:53:54 UTC
README
概述
微信OAuth登录SDK
安装
Composer (推荐)
将以下配置添加到您的 composer.json
文件中
"henter/wechat-oauth": "dev-master"
然后使用 Composer 安装SDK
composer install
如果由于 Packagist 故障或不可用导致无法安装SDK,可以使用 Satis 或 Artifact 进行本地安装,详见Composer文档中的 仓库
手动安装
将 lib/Henter/WeChat
复制到项目目录,然后执行 require "/path/to/sdk/OAuth.php"
用法
自动加载
如果您使用Composer安装,可以使用以下代码进行自动加载
require 'vendor/autoload.php';
SDK位于全局命名空间下。
use Henter\WeChat\OAuth
初始化
通过实例化 OAuth
来完成初始化
$oauth = new \Henter\WeChat\OAuth($appid, $secret);
$appid
和 $secret
是微信开放平台应用的唯一标识和秘钥 AppSecret
代码示例
登录
$oauth = new \Henter\WeChat\OAuth($appid, $secret); $callback_url = 'http://your_site.com/your_callback_url'; $url = $oauth->getAuthorizeURL($callback_url);
重定向到 $url
,用户授权后,将重定向到 $callback_url
,并带上 code
和 state
参数(示例代码未传入 state
参数)
默认授权地址是跳转到微信扫描二维码页面(适用于PC端),如果用户在微信内访问网页点击微信登录,这种方式不太适合。需要使用以下方法获取用于微信内的授权地址:
$url = $oauth->getWeChatAuthorizeURL($callback_url);
注:这个在微信开放平台文档上没有(只在公众号平台文档有提到),不过测试发现同样适用于开放平台应用。
通过 code
参数获取 access_token
//获取code参数 $code = $_GET['code']; $oauth = new \Henter\WeChat\OAuth($appid, $secret); if($access_token = $oauth->getAccessToken('code', $code)){ $refresh_token = $oauth->getRefreshToken(); $expires_in = $oauth->getExpiresIn(); $openid = $oauth->getOpenid(); }else{ echo $oauth->error(); }
如果获取成功,需要保存这4个值用于后续接口调用,否则通过 $oauth->error()
获取错误信息
通过 access_token
调用API
$oauth = new \Henter\WeChat\OAuth($appid, $secret, $access_token);
或
$oauth = new \Henter\WeChat\OAuth($appid, $secret); $oauth->setAccessToken($access_token);
调用用户信息,需传入 openid
$userinfo = $oauth->api('sns/userinfo', array('openid'=>$openid));
其中 sns/userinfo
为 api 类型,具体请参考 微信API文档
通过 refresh_token
刷新或续期 access_token
$oauth = new \Henter\WeChat\OAuth($appid, $secret); //以下两种方式一样 $access_token = $oauth->getAccessToken('token', $refresh_token); 或 $access_token = $oauth->refreshAccessToken($refresh_token);
此时可以通过 $oauth->getRefreshToken()
获取新的 refresh_token
其它
本SDK无任何抛异常部分,调用 $oauth->getAccessToken()
或 $oauth->api()
等方法时如果返回 false
则表示未成功,错误信息均通过 $oauth->error()
获取,所以无需使用 try {} catch {}
方式处理错误
许可协议
MIT 许可协议 (MIT) 版权所有 (c) 2014 Henter <henter@henter.me>
以下任何人获得本软件及其相关文档的副本(“软件”)的副本,无论是否免费,都有权在不加限制地使用软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向软件提供者提供软件的人这样做,前提是
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对因使用本软件或与本软件的使用或其他交易而产生的任何索赔、损害或其他责任负责,无论此类索赔、损害或其他责任是基于合同、侵权或其他方式,无论是否与软件或其使用或其它交易有关。