字节健康平台php接入前必须确认三件事:一是完成企业资质认证并获取client_id与client_secret;二是access_token需本地缓存且自动刷新;三是心理测评回调地址必须https、公网可达并返回200。

字节健康平台 PHP 接入前必须确认的三件事
字节健康平台(现属抖音集团医疗健康生态)不提供官方 PHP SDK,所有对接都基于其开放 API(HTTP + JSON),需自行实现签名、请求、回调验证等逻辑。别找 bytehealth_sdk 或 composer require byte/health——不存在。
- 必须在「字节健康开放平台」后台完成企业资质认证、创建应用、获取
client_id和client_secret - 所有敏感操作(如拉取心理测评报告、触发干预任务)依赖
access_token,它由/oauth2/token接口颁发,有效期 2 小时,需本地缓存并自动刷新 - 心理测评结果回调地址(
callback_url)必须是 HTTPS、可公网访问、能正确响应 200,否则平台会停止推送
PHP 实现 OAuth2 授权码模式调用 /oauth2/token
用户授权后,字节会跳转回你的 redirect_uri 并附带 code 参数。PHP 后端需用该 code 换取 access_token:
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://open.bytehealth.com/oauth2/token',
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'grant_type' => 'authorization_code',
'client_id' => 'your_client_id',
'client_secret' => 'your_client_secret',
'code' => $_GET['code'],
'redirect_uri' => 'https://yourdomain.com/callback.php'
]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded']
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
<p>// 成功时 $response 包含 'access_token', 'refresh_token', 'expires_in'
// 失败时会有 'error' 和 'error_description' 字段</p>
注意:
-
redirect_uri必须与后台配置完全一致(包括末尾斜杠) -
client_secret绝对不能硬编码在前端或日志中 - 如果返回
invalid_grant,大概率是code已被使用过或超时(10 分钟失效)
调用心理测评报告接口 /v1/assessment/report 的关键校验点
该接口需携带 access_token,且必须用 POST + JSON Body 发送,不是 GET 查询参数:
$opts = [
'http' => [
'method' => 'POST',
'header' => "Authorization: Bearer {$access_token}\r\nContent-Type: application/json\r\n",
'content' => json_encode(['user_id' => 'u_123456789'])
]
];
$context = stream_context_create($opts);
$result = file_get_contents('https://open.bytehealth.com/v1/assessment/report', false, $context);
$data = json_decode($result, true);
常见失败原因:
- 返回
401 Unauthorized:token 过期或格式错误(检查是否漏了Bearer前缀) - 返回
403 Forbidden:应用未开通心理测评权限,或user_id不在该应用授权范围内 - 返回
400 Bad Request:JSON 格式非法,或user_id长度/字符不符合平台要求(通常为字母+数字,长度 8–32)
处理健康干预回调时如何防重放和伪造
字节健康平台在触发干预动作(如发送问卷、启动音频引导)后,会向你配置的 callback_url 发起 POST 请求,携带以下关键字段:
-
event_type(如intervention_started) -
data(加密 payload,需用 AES-128-CBC 解密) -
timestamp(毫秒时间戳) -
nonce(随机字符串) -
signature(HMAC-SHA256 签名,密钥为client_secret)
PHP 验证步骤:
- 检查
timestamp是否在当前时间 ±5 分钟内,防止重放攻击 - 拼接
timestamp+nonce+raw_body,用hash_hmac('sha256', $msg, $client_secret)计算签名,与 header 中X-Bytehealth-Signature对比 - 解密
data前,务必先 base64_decode,再用openssl_decrypt(IV 从 header 或 payload 中提取)
漏掉任意一步,都可能让恶意请求伪装成平台回调。
字节健康平台的接口设计偏企业级,没有“一键接入”路径。最易被忽略的是:token 刷新逻辑没做持久化(导致凌晨批量请求失败)、回调验签时没校验 timestamp、AES 解密 IV 混淆了填充方式(平台用 PKCS#7,不是 ZeroPadding)。这些细节不写进代码注释,上线后基本靠日志盲猜。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











