在应用需要整合ucenter时候需要用到 uc_client 目录,而往往我们并不需要那么多功能,那么有没有简单的方法呢?下面一个文件搞定ucenter 主要接口,包含,注册,登录,退出,同步登录相关接口。
2,
* 'uc_appkey' => '026fsDv7Oil9sdawt3b3vz1j7cvVQiYWIECUi4CmxlPgvnEZtO6svxwGmk4mimQ6YlDsgfLz9ke91j9PDrEUd3YR3nwYI+CCnTGk0W6dQzOytnuxvk4qYm5tLQ',
* 'uc_url' => 'http://xiuno.com/dz7/uc_server/',
* 'uc_charset' => 'UTF-8',
* );
* $s = uc_user_register('xxxa', 'xxxa', 'xxxa@gmail.com');
* $arr = uc_user_login('xxxa', 'xxxa');
* $arr = uc_get_user('xxxa');
* $arr = uc_user_synlogin(1);
* print_r($arr);
* @param type $username
* @param type $password
* @return string
*/
function uc_user_login($username, $password) {
$username = urlencode(uc_charset($username));
$password = urlencode($password);
if (strpos($username, '@') === FALSE) {
$s = uc_http_request('user', 'login', "username=$username&password=$password&isuid=3"); // username
} else {
$s = uc_http_request('user', 'login', "username=$username&password=$password&isuid=2"); // email
}
if (strpos($s, 'Access denied for agent changed') !== FALSE) {
return '可能 APPKEY 没有设置正确。';
}
$arr = uc_xml_to_array($s);
if (is_array($arr)) {
return array(
'status' => $arr[0],
'username' => uc_charset($arr[1], 0),
'password' => $arr[2],
'email' => $arr[3],
'merge' => $arr[4]
);
} else {
return $arr;
}
}
//ucenter 返回:
//
//
// -
//
-
//
-
//
//
// 正则替换后返回:
// Array
// (
// [0] => 4
// [1] => abcde
// [2] => abcde@gmail.com
// )
function uc_xml_to_array($s) {
if (strpos($s, '') !== FALSE) {
preg_match_all('#- #is', $s, $m);
if (!empty($m[1])) {
foreach ($m[1] as $k => $v) {
$arr[$v] = $m[2][$k];
}
return $arr;
}
}
return $s;
}
//同步登录:
// 返回一个数组,包含其他应用的 js 路径,格式大致如:
// array (
// 0 => 'http://www.domain1.com/api/uc.php?auth=xxxxxx&action=rsynlogin',
// 1 => 'http://www.domain2.com/api/uc.php?auth=xxxxxx&action=rsynlogin',
// 2 => 'http://www.domain3.com/api/uc.php?auth=xxxxxx&action=rsynlogin',
// )
// 接收到后 放入HTML页面,使其发送HTTP请求,完成其他应用的 cookie 设置,实现同步登录。同步退出同理。
function uc_user_synlogin($uid) {
$s = uc_http_request('user', 'synlogin', "uid=$uid");
preg_match_all('#