Skip to content

访客页入口与认证

GET /visitor

第三方服务端生成访客 Token 后,将访客浏览器跳转或嵌入到此地址。成功后页面加载的全部 /visitor/* 请求都必须携带同一 Token。

text
GET /visitor?token=<visitor-token>&group_id=0
参数必填说明
token服务端签发的访客 JWT。它包含商户和访客身份,不能由前端伪造。
group_id客服分组 ID,默认 0
tc#RRGGBB 格式的主题色。
mini小窗展示标记。
channel渠道标识;最长 32 个字符。

调用访客接口

除上传文件的受限兼容场景外,所有 /visitor/* 请求都在 HTTP 头传递 Token:

http
Authorization: Bearer <visitor-token>

Token 模式下,查询参数或请求体中不得再传 biduidnamenicknameavatarprofile_mode。这些字段只能来自服务端验证后的 Token。

当 Token 中 uid 为空时,必须先访问一次 /visitor 入口,让服务端创建并签发绑定 UID 的新 Token;随后才能调用业务接口。

Web 访客 Token 内容

Web 访客页使用与原生 SDK 不同的 Web Token 契约。它是 HS256 三段式 JWT,Payload 必须且只能包含以下字段:

json
{
  "bid": "<商户 ID>",
  "uid": "<访客 ID,可为空>",
  "name": "<访客昵称,可为空>",
  "avatar": "<头像 URL,可为空>",
  "profile_mode": "fill"
}
字段规则
bid必填,当前商户 ID。
uid可为空;为空时首次访问 /visitor 由服务端补齐身份。
name可为空,最长 128 个字符。
avatar可为空,最长 1024 个字符。
profile_modefilloverwrite;决定访客资料的合并方式。

商户后端使用该商户的 apiKey 对 Header 与 Payload 进行 HMAC-SHA256 签名。不要加入 exprole、任意自定义字段,也不要把 API Key 放到浏览器。

服务端签发示例

项目内可由服务端直接调用 WebVisitorToken::create()

php
use app\service\WebVisitorToken;

$token = WebVisitorToken::create(
    $apiKey,              // 仅服务端保存
    $bid,
    $currentUserId,
    $currentUserName,
    $currentUserAvatar,
    'fill'
);

$url = 'https://<客服系统域名>/visitor?token=' . rawurlencode($token) . '&group_id=0';

fill 适合只补全空资料;需要以业务系统资料覆盖访客已有名称、头像时使用 overwrite。商户被禁用、过期或没有配置 API Key 时,即使签名正确,服务端仍会拒绝 Token。

浏览器侧安全要求

  • Token 仅通过 HTTPS 传输;不要写入页面源码、URL 分享记录、浏览器日志或第三方统计参数。
  • 访客端请求始终使用 Authorization: Bearer <visitor-token>,上传文件的受限兼容场景除外。
  • Token 校验失败后停止重试,回到业务服务端重新生成入口地址;不要让浏览器自行签名或修改 Payload。
  • Web 访客 Token 与原生/跨端 SDK Token字段不同,不能互换使用。