mirror of
https://github.com/w7corp/easywechat.git
synced 2025-01-22 11:32:08 +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
|
||||
|
||||
@ -10,6 +25,29 @@ $secret = 'f1c242f4f28f735d4687abb469072a29';
|
||||
$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
|
||||
@ -17,7 +55,7 @@ $auth = new Auth($appId, $secret);
|
||||
|
||||
$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');
|
||||
```
|
||||
|
||||
+ 判断是否已经授权
|
||||
|
||||
```php
|
||||
$auth->authorized();
|
||||
```
|
||||
|
||||
+ 获取已授权用户
|
||||
|
||||
```php
|
||||
$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
|
Loading…
Reference in New Issue
Block a user