henter/wechat-oauth

微信OAuth SDK

1.0.1 2015-11-09 06:28 UTC

This package is auto-updated.

Last update: 2024-09-12 03:53:54 UTC


README

Latest Stable Version Total Downloads Build Status Coverage Status

概述

微信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,并带上 codestate 参数(示例代码未传入 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>

以下任何人获得本软件及其相关文档的副本(“软件”)的副本,无论是否免费,都有权在不加限制地使用软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向软件提供者提供软件的人这样做,前提是

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对因使用本软件或与本软件的使用或其他交易而产生的任何索赔、损害或其他责任负责,无论此类索赔、损害或其他责任是基于合同、侵权或其他方式,无论是否与软件或其使用或其它交易有关。