mirror of
https://github.com/w7corp/easywechat.git
synced 2025-01-22 19:52:10 +00:00
授权页文档更新
parent
74a086cba4
commit
214d05fc29
70
网页授权.md
70
网页授权.md
@ -1,4 +1,19 @@
|
|||||||
|
|
||||||
|
## 注意:`Auth` 服务不缓存 `access_token`,在获取到用户信息后请自己缓存当前用户信息,不要每次都直接请求 `$auth->authorize()`;
|
||||||
|
|
||||||
|
通常的逻辑应该是:
|
||||||
|
|
||||||
|
1. 检查你自己的 Session 中是否有登录信息,如果有则不跳授权页面
|
||||||
|
2. 如果 Session 中没有登录信息,则跳转到授权页并获取用户信息(`$auth->authorize()` 一个方法全搞定)
|
||||||
|
3. 把拿到的用户信息存到 Session 中
|
||||||
|
|
||||||
|
- 有 SESSION -> **最终业务界面**
|
||||||
|
- 没有 SESSION -> 用户**最终业务界面** -> **授权页** 完成授权存 SESSION -> 跳转到你的**最终业务界面**
|
||||||
|
|
||||||
|
## 友情提示
|
||||||
|
|
||||||
|
授权逻辑不要写在业务页!!! 不然你分享出去的链接会带你自己的 `code` 出去,这样就会判断不了是否已经授权。
|
||||||
|
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
@ -10,6 +25,29 @@ $secret = 'f1c242f4f28f735d4687abb469072a29';
|
|||||||
$auth = new Auth($appId, $secret);
|
$auth = new Auth($appId, $secret);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
+ 授权并返回用户
|
||||||
|
|
||||||
|
`Bag authorize($to = null, $scope = 'snsapi_userinfo', $state = 'STATE')` 授权并返回用户
|
||||||
|
|
||||||
|
内部逻辑:
|
||||||
|
|
||||||
|
1. 非微信回调,会自动跳转到微信授权页,并且以当前页(`$to` 为 `null` 时取当前页)作为回调页
|
||||||
|
2. 如果已经授权返回用户对象,`$scope` 为 `snsapi_base` 时用户对象只有 `openid` 一个属性
|
||||||
|
|
||||||
|
```php
|
||||||
|
|
||||||
|
// 请一定要自己存储用户的登录信息,不要每次都授权
|
||||||
|
if (empty($_SESSION['logged_user'])) {
|
||||||
|
$user = $auth->authorize(); // 返回用户 Bag
|
||||||
|
$_SESSION['logged_user'] = $user;
|
||||||
|
// 跳转到其它授权才能访问的页面
|
||||||
|
}
|
||||||
|
|
||||||
|
var_dump($_SESSION['logged_user']);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 其它单独使用的方法
|
||||||
|
|
||||||
+ 生成授权链接
|
+ 生成授权链接
|
||||||
|
|
||||||
```php
|
```php
|
||||||
@ -17,7 +55,7 @@ $auth = new Auth($appId, $secret);
|
|||||||
|
|
||||||
$auth->url($to, $scope, $state = 'STATE');
|
$auth->url($to, $scope, $state = 'STATE');
|
||||||
// 直接跳转
|
// 直接跳转
|
||||||
$auth->redirect($to, $scope, $state = 'STATE'); 直接跳转
|
$auth->redirect($to, $scope, $state = 'STATE'); // 直接跳转
|
||||||
```
|
```
|
||||||
|
|
||||||
> 注意:
|
> 注意:
|
||||||
@ -36,41 +74,11 @@ $url = $auth->url('http://overtrue.me', 'snsapi_base');
|
|||||||
$url = $auth->url('http://overtrue.me', 'snsapi_userinfo');
|
$url = $auth->url('http://overtrue.me', 'snsapi_userinfo');
|
||||||
```
|
```
|
||||||
|
|
||||||
+ 判断是否已经授权
|
|
||||||
|
|
||||||
```php
|
|
||||||
$auth->authorized();
|
|
||||||
```
|
|
||||||
|
|
||||||
+ 获取已授权用户
|
+ 获取已授权用户
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$auth->user();
|
$auth->user();
|
||||||
```
|
```
|
||||||
|
|
||||||
## 示例:
|
|
||||||
|
|
||||||
```php
|
|
||||||
// 如果已经授权或者 SESSION 未过期
|
|
||||||
|
|
||||||
if ($auth->authorized() || Session::get('logged_open_id')) {
|
|
||||||
$user = $auth->user();// 获取已经登录后用户信息
|
|
||||||
Session::set('logged_open_id', $user['open_id']);
|
|
||||||
|
|
||||||
//code 显示授权后的页面,或者跳转到其它授权才能访问的页面
|
|
||||||
//...
|
|
||||||
} else {
|
|
||||||
$to = "http://微信授权完成后跳回你的地址,就是当前代码所在的 URL";
|
|
||||||
$auth->redirect($to);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### 在 [Laravel](http://laravel.com) 里使用
|
|
||||||
|
|
||||||
在 Laravel 里的跳转请使用 `url` 而不要使用 `redirect`, 因为在 Laravel 控制器方法必须返回字符串或者实现了 `__toString()` 的对象:
|
|
||||||
|
|
||||||
```php
|
|
||||||
return Redirect::to($auth->url($to, 'snsapi_base', 'STATE'));
|
|
||||||
```
|
|
||||||
|
|
||||||
更多关于微信网页授权 API 请参考: http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
|
更多关于微信网页授权 API 请参考: http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
|
Loading…
Reference in New Issue
Block a user