云端请求客户端站点接口
更新时间:2024-07-25 11:10
对于 Discuz! 平台,请下载并安装“WitFrame API”插件。同时需要配置一个系统类型为“For Discuz!X”的项目,并在“通讯设置”中设置好连接参数,确保通讯成功。
对于 Discuz! X5.0,无需任何操作,直接点击“插件管理”中的“云插件”入口即可。
RESTful API 调用
对于 Discuz! X5.0,可以直接通过 RESTful API 接口调用数据
$v = Lib\Site::Discuz_Restful('/profile');
客户端页面信息获取
此接口可以请求客户端的页面,并把相应的变量以数据形式返回。
Lib\Site::Client_Page($params)
请求参数
参数 | 类型 | 含义 |
---|---|---|
$params | array | 参数数组 |
$params['script']
页面脚本名,字串类型,必填参数。对于 Discuz! 平台,forum.php 只需写 forum 即可
$params['session']
用户身份的 ID,字串类型,初次请求可为空。请求后会放返回值的 '_session' 中供业务再次请求时透传身份。
session 在平台中的有效期为 12 小时,如需保存更长时间,可使用 'cmd' 的 'getSession' 命令获取完整的用户身份数据。
$params['sessionData']
如您获取了完整的用户身份数据,可用此方法直接透传完整数据,而不是只透传一个用户身份 ID。传递此参数时 'session' 参数失效。
$params['output']
设置输出的数据内容以及映射关系,数组类型,例如:
$params['output'] = array(
'_G/uid,username,groupid' => 'user',
'_G/messageparam' => 'msg',
);
数组的 key 为平台脚本内的变量,value 为映射输出的变量。
'_G/uid,username,groupid' 表示获取 $_G['uid]、$_G['username']、$_G['groupid] 的内容,输出对应 key 为 'user'。
$params['rawOutput']
布尔值类型,声明以原生内容输出,输出的内容将进行 base64_encode 转码,请自行解码
$params['rawOutput'] = true;
$params['get']
GET 数据,数组类型,例如:
$params['get'] = array(
'mod' => 'logging',
'action' => 'login',
);
$params['post']
POST 数据,数组类型,例如:
$params['get'] = array(
'subject' => '标题',
'message' => '帖子内容',
'formhash' => $formHash
);
$params['file']
上传文件的内容,传递 $_FILES 的内容
针对 Discuz! 平台
$params'output' = true 时会返回上传文件用的 hash 值
$params['cmd']
执行独立的命令,包含以下内容:
getSession
获取完整的用户身份数据,需配合 $params['session'] 参数传递用户身份 ID。
完整范例
echo "\nInit";
$v = Lib\Site::Client_Page(
array(
'script' => 'member',
'output' => array(
'_G/uid,username,groupid,timestamp' => 'm'
),
'get' => array(
'mod' => 'logging',
'action' => 'login',
)
)
);
$session = $v['_session'];//透传 session id
$formHash = $v['_formhash'];//透传 formhash
print_r($v);
echo "\nLogin";
$v = Lib\Site::Client_Page(
array(
'script' => 'member',
'output' => array(
'_G/uid,username,groupid,timestamp' => 'm',
'_G/messageparam' => 'msg',
'_attachhash' => true,//需要 _attachhash 上传文件用
),
'get' => array(
'mod' => 'logging', 'action' => 'login', 'loginsubmit' => 'yes', 'lssubmit' => 'yes',
),
'post' => array('fastloginfield' => 'username', 'username' => 'admin', 'password' => 1, 'formhash' => $formHash),
'session' => $session,
)
);
$session = $v['_session'];//透传 session id
$formHash = $v['_formhash'];//透传 formhash
$hash = $v['_attachhash'];//获取 _attachhash
print_r($v);
echo "\nGetSession";
$v = Lib\Site::Client_Page(['cmd' => 'getSession', 'session' => $session]);
$sessionData = $v['_result'];//获取完整的 session 数据
print_r($v);
echo "\nNewThread";
$v = Lib\Site::Client_Page(
array(
'script' => 'forum',
'output' => array(
'_G/uid,username,groupid,timestamp' => 'm',
'_G/messageparam' => 'msg',
),
'get' => array(
'mod' => 'post', 'action' => 'newthread', 'topicsubmit' => 'yes', 'fid' => 2,
),
'post' => array('subject' => '标题' . time(), 'message' => 'Discuz! 平台,由一群高擎互联网人在倾情支持, 他们来自于腾讯 Discuz! 创业团队成员以及优秀的开发者。在中国互联网风云变迁中,Discuz! 20多年间为300万企业及站长赋能,秉承“开放、连接、共赢”的精神,倡导与生态伙伴及开发者共建健康可持续的 Discuz! 品牌合作模式,突破需求、连接和信任的局限,保持创新活力,无论是在企业内部交流社区,企业在连接 To C 发展积极贡献。' . time(), 'formhash' => $formHash),
'sessionData' => $sessionData,//这次不透传 session id,而是透传完整的 session 数据(非必要不推荐,传输量会大)
)
);
print_r($v);
echo "\nUpload";
$files = array();
if (!empty($_FILES['file']) && $_FILES['file']['error'] == 0) {
$files['Filedata'] = $_FILES['file'];
}
$v = Lib\Site::Client_Page(
array(
'script' => 'misc',
'get' => array(
'mod' => 'swfupload', 'action' => 'swfupload', 'operation' => 'upload', 'fid' => 2,
),
'post' => array(
'uid' => 1, 'hash' => $hash,
),
'file' => $files,
'session' => $session,
),
);
print_r($v);
echo "\nSecCode";
$v = Lib\Site::Client_Page(
array(
'script' => 'misc',
'rawOutput' => true,
'get' => array(
'mod' => 'seccode',
'idHash' => 'xxx',
),
)
);
header('Content-type: image/png');
print_r(base64_decode($v));exit;
返回当前的客户端平台
Lib\Site::Client_Type()
返回参数
返回值 | 含义 |
---|---|
空 | SaaS |
Discuz | Discuz! 客户端 |
客户端站点用户登录态检测
Lib\Site::Client_CheckLogin($data)
请求参数
参数 | 类型 | 含义 |
---|---|---|
$data['username'] | string | 用户名 |
$data['uid'] | int | UID |
$data['email'] | string | |
$data['password'] | string | 密码 |
username、uid、email 三选一传递,password 必传
返回参数
校验失败返回 false,否则返回用户信息
客户端站点用户信息
Lib\Site::Client_GetUserInfo($data)
请求参数
参数 | 类型 | 含义 |
---|---|---|
$data['username'] | string | 用户名 |
$data['uid'] | int | UID |
username、uid 二选一传递
返回参数
返回用户信息
客户端站点信息
Lib\Site::Client_GetSiteInfo()
返回参数
返回站点名称、积分设置等信息