产品使用文档与部署教程,持续更新中
本文档面向第三方程序开发者:你的 PHP 网站 / 软件接入云枢官网授权系统主站后,即可获得授权验证、远程广告、插件市场三项能力。主站为星聚部署的授权中心站(下文以 https://www.xjukeji.cn 为例,实际以你的主站域名为准)。
三项能力全部走 HTTP 协议,主站域名在程序打包时已注入(无需在你的代码里写死域名):
| 能力 | 接口 | 说明 |
|---|---|---|
| 授权验证 | GET /check.php | 验证授权码 + 域名绑定,返回授权状态与广告 |
| 远程广告 | GET /check.php(随响应返回) | 主控投放广告,程序声明广告位即可展示 |
| 插件市场 | GET /auth/api/market | 主控发布的插件列表,程序侧展示并安装 |
接入三步:
app_uid(程序 UID)与 auth_key(授权密钥);install/sdk/authcode.php 引入你的程序(或按本文档自行实现协议),在需要的位置调用 xj_ads_render();GET https://www.xjukeji.cn/check.php?url={域名}&authcode={授权码}&app_uid={程序UID}&t={时间戳}&sign={签名}
| 参数 | 必填 | 说明 |
|---|---|---|
| url | 是 | 当前站点域名(一级域名授权时主站自动取主域,如 a.x.com → x.com) |
| authcode | 是 | 授权码(主站打包时注入,或买家填写) |
| app_uid | 是 | 程序 UID(主站程序管理分配) |
| t | 推荐 | 秒级时间戳,±10 分钟内有效(防重放) |
| sign | 推荐 | md5(authcode + t + app_uid + auth_key)(防伪造) |
| ver | 可选 | 本地版本号,用于在线更新检测(见下) |
{"data": base64_encode(authcode(json_encode($result), 'ENCODE', auth_key))}
解密(authcode 为 Discuz 风格加解密,实现见第五节):
$plain = authcode(base64_decode($json['data']), 'DECODE', $auth_key); $result = json_decode($plain, true);
解密后字段:
| 字段 | 说明 |
|---|---|
| code | "1" 授权有效;"-1" 无效(msg 说明原因);"0" 最新版本 |
| name | 程序名称 |
| token | md5(authcode + 日期Ymd + auth_key),可用作当日令牌 |
| ads | 远程广告数组(见第三节),无广告返回空数组 |
带 ver 参数时的更新检测响应(code=1 表示有新版本):ver / version / uplog(更新日志)/ file(更新包下载链接)/ sql(更新 SQL 数组,可空)。file 链接 10 分钟内有效,需带 down 参数访问下载。
[
{"id": 1, "name": "演示广告", "position": "home_top", "type": "text",
"content": "广告文字", "ad_url": "https://xxx.com", "target": "_blank"},
{"id": 2, "position": "home_top", "type": "image", "content": "https://img/1.png"}
]
| 字段 | 说明 |
|---|---|
| position | 广告位标识(你的程序声明的) |
| type | text 文本 / html HTML 代码 / image 图片 |
| content | 广告内容(text 为纯文本;html 已经主控 XSS 过滤;image 为 http(s) 图片地址) |
| ad_url | 跳转链接(仅 http/https,空则不可点击) |
| target | _blank 新窗口 / _self 当前页 |
主控只下发「全部产品 + 你的程序」且启用、在生效时间区间内的广告,同一广告位多条按排序依次输出。
广告位由主控后台维护(授权中心 → 程序管理 → 编辑程序 → 广告位声明,JSON 键值对:标识与名称)。上传程序包时主控会自动扫描你源码中的 xj_ads_render('标识') 调用识别广告位,你无需手写声明。广告位价格(客户自助申请费用,0=免费)由主控在「远程广告 → 广告位管理」设置。
// 拉取全部广告(自动缓存 1-2 小时,主控修改后自动同步;请求失败读旧缓存,绝不抛错)
$ads = xj_ads_fetch();
// 渲染指定广告位(无广告返回空字符串)
echo xj_ads_render('home_top');
echo xj_ads_render('user_sidebar');
SDK 渲染安全规则:text 转义输出、html 直出(主控已过滤 script/iframe/事件属性/js 伪协议)、image 校验 http(s)、链接仅 http(s) 并带 rel="nofollow noopener"。
自实现协议(不用 SDK 时):请求 check.php(带签名)→ 解密取 ads → 按 position 分组渲染 → 本地缓存 1-2 小时。建议同 SDK 一样做缓存与降级,主站不可达时沿用本地缓存。
买家可在授权中心用户中心付费申请你的程序广告位(金额=主控设置的价格),提交广告内容,主控审核通过后自动上架并随 check.php 下发。程序侧无需任何额外开发。
GET https://www.xjukeji.cn/auth/api/market
{"code": 0, "msg": "ok", "data": [
{"id": 1, "name": "聚合支付系统", "icon": "", "desc": "聚合收款/代付 API…",
"version": "", "price": "0", "download_url": "/page/2", "buy_url": "", "status": 1, "sort": 100}
]}
| 字段 | 说明 |
|---|---|
| id | 插件 ID(market_id,安装后本地记录用) |
| name / icon / desc | 名称 / 图标 / 介绍(列表展示) |
| version | 版本号(可空) |
| price | 价格(0 = 免费) |
| download_url | 安装包直链(zip)或详情页地址;空则不可直接安装 |
| buy_url | 购买页地址(付费插件引导买家前往) |
| status | 1 = 上架(接口只返回上架插件) |
| sort | 排序(大在前) |
download_url 为 zip 直链 → 下载解压到你的插件目录;付费插件 → 跳 buy_url 引导购买;market_id,避免重复安装);| 函数 | 说明 |
|---|---|
xj_license_authcode($s, $op, $key, $expiry) | Discuz 风格加解密(ENCODE/DECODE),协议响应加解密基础 |
xj_license_domain($host) | 解析域名(一级域名授权时取主域) |
xj_license_request($server, $authcode, $app_uid, $key, $extra) | 签名请求 check.php 并解密返回结果数组(失败返回 null) |
xj_license_verify($local_url) | 授权验证:每天首次远程验证 + 当天本地缓存;返回 ok/code/msg/name/token |
xj_license_heart() | 心跳验证(建议每 2-6 小时调用),封禁/到期返回 false |
xj_license_data($k) | 取远程关键数据(core_key 等,用于核心文件解密) |
xj_ads_fetch() | 拉取广告数组(本地缓存 1-2 小时,失败降级旧缓存/空数组) |
xj_ads_render($position) | 渲染指定广告位 HTML(安全转义/协议校验,无广告返回空串) |
SDK 顶部 4 个全局变量(打包注入):$authcode 授权码、$app_uid 程序 UID、$auth_key 授权密钥、$xj_siteurl 主站地址。自实现协议时同样需要这四项。
接入程序在授权中心「在线加密」或程序管理第四步「打加密包」生成加密成品后,买家下载直接获得加密包(自动写入本人授权码)。档 B(混淆+加密壳)与核心加密文件的运行时代码需要向授权中心换取解密密钥:
POST /auth/xjkey 参数:url(绑定域名)、authcode(授权码)、app_uid(程序 UID)、t(时间戳)、sign=md5(authcode + t + app_uid + auth_key)。成功返回 key=RSA 私钥加密后的 sha256(auth_key|core_key),用随包内置的公钥解密即可。
注意:check.php 对开启一级域名授权(domain=1)的程序会把子域名映射为主域名校验;xjkey 的授权校验用原始域名。自有演示站接入时两条授权记录都要注册。
后台「授权中心 → 在线加密」:档 A 仅混淆(轻量防修改),档 B 混淆+加密壳(防破解,运行时联网校验)。程序管理向导第四步可直接对发布包目录打包,成品存云端并自动用于买家下载,也可点「下载加密包」直接分发。
后台「演示中心」为程序配置演示站地址与演示库连接后,前台 /demo 页即可供访客申请演示:手机验证码+邮箱校验,每次申请自动生成独立演示账号(24 小时有效,到期自动清理),双写进演示站数据库。
接入程序要求:登录逻辑校验账号的 demo_expire 字段(0=非演示账号放行;大于 0 且小于当前时间拒绝登录)。申请记录在后台演示中心可查。
添加/编辑程序分四步:上传源码 → 授权代码 → 程序信息 → 打加密包。保存后自动进入第四步,可查看最新加密包状态、选择档位重新打包、直接下载加密包分发。
官网系统新增「在线客服」模块:前台右下角浮窗实时对话(游客与登录会员都能聊),后台「客服中心 → 在线接待」统一接待,含快捷短语、图片/文件发送、关键词自动回复、访客备注/标签/拉黑、离线引导、未读角标与声音提醒。该模块属于站点自身功能,不对外提供第三方接口,接入程序无需任何改动。
| 接口 | 说明 |
|---|---|
POST /chat/open | 打开会话(返回访客身份、历史消息、是否需要填资料) |
POST /chat/send | 发送消息(type=text/image/file,带 client_msg_id 幂等去重) |
POST /chat/pull | 拉取增量消息(last_id 游标,自适应轮询调用) |
POST /chat/upload | 上传图片/文件(图片走 upload_image 真图校验;文件白名单 pdf/zip/rar/7z/doc(x)/xls(x)/ppt(x)/txt ≤10MB) |
POST /chat/profile | 填写称呼 / 电话 / 邮箱 |
POST /chat/close | 访客主动结束会话 |
以上均为同源请求,靠站点 cookie(xj_chat_id)识别访客,带蜜罐字段 website 与按 IP 的频率限制(发送 1 条/秒、20 条/分、300 条/天)。
GET /chat/cron?key=<chat_cron_key>:结束超时会话、清理过期消息(默认无消息 30 分钟结束、消息保留 90 天,后台可改)。密钥存 cms_setting.chat_cron_key,在 后台 → 客服中心 → 在线接待 → 设置 里可见并一键复制,宝塔计划任务每 5 分钟调用一次。不配置也能用:会话超时会在下次请求时惰性结束,只是过期数据清理没那么及时。
cms_chat_user(访客档案)、cms_chat_session(会话,含未读与已读水位)、cms_chat_message(消息,(session_id, client_msg_id) 唯一键做幂等)、cms_chat_quick(快捷短语)。新装随安装向导创建;老站随在线更新执行 install/update/chat_20260926.sql 创建;运行时也会自愈补建(app/service/CmsSchema.php)。若数据库账号无 CREATE 权限导致建表失败,前台浮窗自动退回「在线留言」表单,不影响站点运行。
/admin/chat(接待页)、/admin/chat/feed(会话与消息增量 + 未读汇总)、/admin/chat/badge(全局未读角标,15 秒轮询)、/admin/chat/send、/admin/chat/upload、/admin/chat/close、/admin/chat/visitor(备注/标签/拉黑)、/admin/chat/setting,以及 /admin/chat_quick/*(短语增删改)。均需后台登录态。