云端请求客户端站点接口

更新时间: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)

请求参数

参数类型含义
$paramsarray参数数组

$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
DiscuzDiscuz! 客户端

客户端站点用户登录态检测

Lib\Site::Client_CheckLogin($data)

请求参数

参数类型含义
$data['username']string用户名
$data['uid']intUID
$data['email']stringEMail
$data['password']string密码

username、uid、email 三选一传递,password 必传

返回参数

校验失败返回 false,否则返回用户信息


客户端站点用户信息

Lib\Site::Client_GetUserInfo($data)

请求参数

参数类型含义
$data['username']string用户名
$data['uid']intUID

username、uid 二选一传递

返回参数

返回用户信息


客户端站点信息

Lib\Site::Client_GetSiteInfo()

返回参数

返回站点名称、积分设置等信息