Associate.class.php
7.19 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<?php
/**
* 第三方操作
*/
class Controller_Associate extends Controller_Abstract
{
/**
* 登录
*
* @param string key 应用的唯一ID
* @param string sign 通过应用颁发的密钥所生成的签名
* @param integer type 第三方类型:3:weibo,4:qq,5:支付宝,6:人人,7:豆瓣,8:facebook,9:instagram
* @param string auth 唯一标识(第三方用户)
* @param string $nick 用户的昵称
* @param string $headpic 用户的头像
* @param string $alipay_email 支付宝用户的邮箱或手机号,用于合并有货的老数据,必须的参数
* @param string fields 需要返回的信息
* @param string token 访问令牌
* @param string expires_in 使用周期(访问令牌)
* @param string refresh_token 刷新令牌 (第三方有则传,没有则可不传)
* @return json
*/
public function indexAction()
{
$result = Config_Code::$error['system'];
do
{
/* 执行第三方登录操作 */
$type = $this->_request->post('type', false);
$auth = $this->_request->post('auth', false);
$nick = $this->_request->post('nick', '');
$headpic = $this->_request->post('headpic', '');
$alipayEmail = $this->_request->post('alipay_email', '');
$fields = $this->_request->post('fields', '');
// 登录成功返回订阅的用户信息,登录失败则返回提示信息
$result = Facade_Associate::login($type, $auth, $nick, $headpic, $alipayEmail, $fields, $this->_appScope, $this->_appId);
if (isset($result['code']))
{
break;
}
// 执行登录操作,写入Cookie及Session
Facade_Auth::login($result['uid']);
/* 保存第三方应用授权过用户的访问信息 */
$token = $this->_request->post('token', false);
$expiresIn = $this->_request->post('expires_in', false);
if ($token && $expiresIn)
{
$refreshToken = $this->_request->post('refresh_token', null);
Facade_Associate::set($auth, $type, $result['uid'], $token, $refreshToken, $expiresIn);
}
return $this->returnJson(Config_Code::$success['system']['code'], $result, Config_Code::$success['system']['message']);
}
while (false);
return $this->returnJson($result['code'], null, $result['message']);
}
/**
* 回调登录
*
* @param string key 应用的唯一ID
* @param string sign 通过应用颁发的密钥所生成的签名
* @param integer type 第三方类型:3:weibo,4:qq,5:支付宝,6:人人,7:豆瓣,8:facebook,9:instagram
* @param string auth 唯一标识(第三方用户)
* @param string $nick 用户的昵称
* @param string $headpic 用户的头像
* @param string $alipay_email 支付宝的邮箱或手机号,用于合并有货的老数据
* @param string fields 需要返回的信息
* @param string token 访问令牌
* @param string expires_in 使用周期(访问令牌)
* @param string refresh_token 刷新令牌
* @param string callback 回调地址
* @param string method 回调地址采用的方法
*/
public function callbackloginAction()
{
do
{
/* 判断传递的回调地址是否有效 */
$method = $this->_request->post('method', 'post');
$callback = $this->_request->post('callback', null);
if (null === $callback || !is_string($callback) || 0 !== stripos($callback, 'http://'))
{
return;
}
/* 执行第三方登录操作 */
$type = $this->_request->post('type', false);
$auth = $this->_request->post('auth', false);
$nick = $this->_request->post('nick', '');
$headpic = $this->_request->post('headpic', '');
$alipayEmail = $this->_request->post('alipay_email', '');
$fields = $this->_request->post('fields', '');
// 登录成功返回订阅的用户信息,登录失败则返回提示信息
$data = Facade_Associate::login($type, $auth, $nick, $headpic, $alipayEmail, $fields, $this->_appScope, $this->_appId);
if (isset($data['code']))
{
break;
}
// 执行登录操作,写入Cookie及Session
Facade_Auth::login($data['uid']);
/* 保存第三方应用授权过用户的访问信息 */
$token = $this->_request->post('token', false);
$expiresIn = $this->_request->post('expires_in', false);
if ($token && $expiresIn)
{
$refreshToken = $this->_request->post('refresh_token', null);
Facade_Associate::set($auth, $type, $data['uid'], $token, $refreshToken, $expiresIn);
}
$data += Config_Code::$success['system'];
} while (false);
return $this->_callback($callback, $method, $data);
}
/**
* 绑定手机号或邮箱
*
* @param string key 应用的唯一ID
* @param string sign 通过应用颁发的密钥所生成的签名
* @param integer uid 统一用户中心的ID
* @param string account 账号 唯一的
* @param string password 密码,当type为1或2时需要传递,默认为空
* @return json
*/
public function bindAction()
{
$result = Config_Code::$error['system'];
do
{
$uid = $this->_request->post('uid', null);
$account = $this->_request->post('account', '');
$password = $this->_request->post('password', '');
$result = Facade_Associate::bind($uid, $account, $password);
}
while (false);
return $this->returnJson($result['code'], null, $result['message']);;
}
/**
* 获取用户的所有已授权信息
*
* @return json
*/
public function getAllAuthAction()
{
$result = array();
$uid = $this->_request->query('uid');
if (is_numeric($uid))
{
$result = Facade_Associate::getByUid($uid);
}
return $this->returnJson(Config_Code::$success['system']['code'], $result, Config_Code::$success['system']['message']);
}
/**
* @todo test interface
*/
public function testAction()
{
return;
$appId = '1391846466';
$auth = 'acf580d44fa051144e52a8e9ed31afc4';
$test = Facade_Associate::set($auth, $appId, 39000003, '7ad7ba80e8e3a68cf25d625d52370d3e', '210eb5a022ab64befc007485ce01dc7b', '8035200');
$test = Facade_Associate::get($auth, $appId);
$test = Facade_Associate::upd($auth, $appId, array('uid' => 39000000));
$test = Facade_Associate::del($auth, $appId);
$test = Facade_Associate::setAuthInfo(39000003, 4, 'goodboy@qq.com', md5(md5('password' . 'salt')), 'salt');
}
}