Weibo.php
2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
namespace anerg\OAuth2\Gateways;
use anerg\OAuth2\Connector\Gateway;
class Weibo extends Gateway
{
const API_BASE = 'https://api.weibo.com/2/';
protected $AuthorizeURL = 'https://api.weibo.com/oauth2/authorize';
protected $AccessTokenURL = 'https://api.weibo.com/oauth2/access_token';
/**
* 得到跳转地址
*/
public function getRedirectUrl()
{
$this->switchAccessTokenURL();
$params = [
'client_id' => $this->config['app_id'],
'redirect_uri' => $this->config['callback'],
'scope' => $this->config['scope'],
'state' => $this->config['state'],
'display' => $this->display,
];
return $this->AuthorizeURL . '?' . http_build_query($params);
}
/**
* 获取当前授权用户的openid标识
*/
public function openid()
{
$this->getToken();
if (isset($this->token['openid'])) {
return $this->token['openid'];
} else {
throw new \Exception('没有获取到新浪微博用户ID!');
}
}
/**
* 获取格式化后的用户信息
*/
public function userinfo()
{
$rsp = $this->userinfoRaw();
$userinfo = [
'openid' => $this->openid(),
'channel' => 'weibo',
'nick' => $rsp['screen_name'],
'gender' => $rsp['gender'],
'avatar' => $rsp['avatar_hd'],
];
return $userinfo;
}
/**
* 获取原始接口返回的用户信息
*/
public function userinfoRaw()
{
$this->getToken();
return $this->call('users/show.json', ['uid' => $this->openid()]);
}
/**
* 发起请求
*
* @param string $api
* @param array $params
* @param string $method
* @return array
*/
private function call($api, $params = [], $method = 'GET')
{
$method = strtoupper($method);
$params['access_token'] = $this->token['access_token'];
$data = $this->$method(self::API_BASE . $api, $params);
return json_decode($data, true);
}
/**
* 根据第三方授权页面样式切换跳转地址
*
* @return void
*/
private function switchAccessTokenURL()
{
if ($this->display == 'mobile') {
$this->AuthorizeURL = 'https://open.weibo.cn/oauth2/authorize';
}
}
/**
* 解析access_token方法请求后的返回值
* @param string $token 获取access_token的方法的返回值
*/
protected function parseToken($token)
{
$data = json_decode($token, true);
if (isset($data['access_token'])) {
$data['openid'] = $data['uid'];
unset($data['uid']);
return $data;
} else {
throw new \Exception("获取新浪微博ACCESS_TOKEN出错:{$data['error']}");
}
}
}