You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.8 KiB
99 lines
3.8 KiB
<?php
|
|
/**
|
|
* IYUU用户注册、认证
|
|
*/
|
|
namespace IYUU\Library;
|
|
|
|
use Curl\Curl;
|
|
|
|
class Oauth
|
|
{
|
|
// 合作的站点
|
|
public static $sites = ['ourbits','hddolby','hdhome','pthome'];
|
|
// 爱语飞飞token
|
|
public static $token = '';
|
|
// 合作站点用户id
|
|
public static $user_id = 0;
|
|
// 合作站点密钥
|
|
public static $passkey = '';
|
|
// 合作站名字
|
|
public static $site = '';
|
|
// 登录缓存路径
|
|
public static $SiteLoginCache = ROOT_PATH.DS.'config'.DS.'siteLoginCache_{}.json';
|
|
/**
|
|
* 从配置文件内读取爱语飞飞token作为鉴权参数
|
|
*/
|
|
public static function getSign()
|
|
{
|
|
global $configALL;
|
|
// 爱语飞飞
|
|
$token = isset($configALL['iyuu.cn']) && $configALL['iyuu.cn'] ? $configALL['iyuu.cn'] : '';
|
|
if (empty($token) || strlen($token)<46) {
|
|
echo "缺少辅种接口请求参数:爱语飞飞token \n";
|
|
echo "请访问https://iyuu.cn 用微信扫码申请,并填入配置文件config.php内。\n\n";
|
|
exit(1);
|
|
}
|
|
return $token;
|
|
}
|
|
/**
|
|
* 用户注册与登录
|
|
* 作用:在服务器端实现微信用户与合作站点用户id的关联
|
|
* 参数:爱语飞飞token + 合作站点用户id + sha1(合作站点密钥passkey) + 合作站点标识
|
|
*/
|
|
public static function login($apiUrl = '', $sites = array())
|
|
{
|
|
global $configALL;
|
|
// 云端下发合作的站点标识
|
|
self::$sites = $sites ? $sites : self::$sites;
|
|
$ret = false;
|
|
self::$token = self::getSign();
|
|
foreach (self::$sites as $name) {
|
|
if (is_file(str_replace('{}', $name, self::$SiteLoginCache))){
|
|
// 存在鉴权缓存
|
|
$ret = true;
|
|
continue;
|
|
}
|
|
if (isset($configALL[$name]['passkey']) && $configALL[$name]['passkey'] && isset($configALL[$name]['id']) && $configALL[$name]['id']) {
|
|
self::$user_id = $configALL[$name]['id'];
|
|
self::$passkey = sha1($configALL[$name]['passkey']); // 避免泄露用户passkey秘钥
|
|
self::$site = $name;
|
|
|
|
$curl = new Curl();
|
|
$curl->setOpt(CURLOPT_SSL_VERIFYPEER, false);
|
|
$data = [
|
|
'token' => self::$token,
|
|
'id' => self::$user_id,
|
|
'passkey'=> self::$passkey,
|
|
'site' => self::$site,
|
|
];
|
|
$res = $curl->get($apiUrl, $data);
|
|
p($res->response);
|
|
|
|
$rs = json_decode($res->response,true);
|
|
if (isset($rs['ret']) && $rs['ret'] == 200 && isset($rs['data']['success']) && $rs['data']['success']){
|
|
self::setSiteLoginCache($name, $rs);
|
|
$ret = true;
|
|
}else{
|
|
$msg = isset($rs['msg']) && $rs['msg'] ? $rs['msg'] : '远端服务器无响应,请稍后重试!';
|
|
$msg = isset($rs['data']['errmsg']) && $rs['data']['errmsg'] ? $rs['data']['errmsg'] : $msg;
|
|
echo $msg . PHP_EOL;
|
|
}
|
|
} else {
|
|
echo $name.'合作站点参数配置不完整,请同时填写passkey和用户id。' . PHP_EOL;
|
|
echo '合作站点鉴权配置,请查阅:https://www.iyuu.cn/archives/337/'. PHP_EOL. PHP_EOL;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
/**
|
|
* 写鉴权成功配置
|
|
*/
|
|
private static function setSiteLoginCache($key = '', $array = [])
|
|
{
|
|
$json = json_encode($array, JSON_UNESCAPED_UNICODE);
|
|
$myfile = str_replace('{}', $key, self::$SiteLoginCache);
|
|
$file_pointer = @fopen($myfile, "w");
|
|
$worldsnum = @fwrite($file_pointer, $json);
|
|
@fclose($file_pointer);
|
|
}
|
|
}
|
|
|