百分点AI接口必须走官方SDK或按约定签名规则发起POST请求,否则返回401或Invalid signature;签名需用HMAC-SHA256对raw body计算,严格要求timestamp(毫秒)、nonce(16位小写+数字)、body MD5拼接格式;Header须含X-BP-App-Key、X-BP-Signature等,Content-Type为application/json;user_profile至少含age、gender等有效标签,空profile报错。

PHP调用百分点AI接口传用户画像的正确姿势
直接结论:百分点AI的推荐模型接口不是开放HTTP服务,必须走其官方SDK或按约定签名规则发起POST请求;不签名、不带X-BP-App-Key和X-BP-Signature头,100%返回401 Unauthorized或Invalid signature错误。
构造签名时最容易漏掉的三个细节
百分点要求对请求体(raw body)做HMAC-SHA256签名,且参与签名的字段顺序、编码、拼接方式极其严格。常见翻车点:
-
timestamp必须是当前毫秒时间戳(不是秒),且要参与签名字符串拼接 -
nonce必须是16位随机小写字母+数字组合(不能含大写或符号),重复使用会触发限流 - 签名原文格式为:
app_key={key}&nonce={n}×tamp={t}&body={md5(body)},其中body是原始JSON字符串的MD5(32位小写),不是JSON对象本身
PHP中用cURL发请求的关键参数配置
不用SDK时,必须手动设置Header和Body格式。注意Content-Type必须为application/json; charset=utf-8,且body不能经过json_encode()二次转义(即不能把已转义的字符串再encode一次)。
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json; charset=utf-8',
'X-BP-App-Key: your_app_key_here',
'X-BP-Signature: ' . $signature . '',
'X-BP-Timestamp: ' . $timestamp . '',
'X-BP-Nonce: ' . $nonce . ''
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $raw_json_body); // 注意:这里是字符串,不是数组
用户画像数据结构必须匹配百分点schema
传user_profile字段时,不能只塞手机号或ID。必须包含至少一项有效标签,比如age、gender、city、interests(数组)、recent_browse(数组)等。空profile或只有user_id会导致返回empty profile错误。
立即学习“PHP免费学习笔记(深入)”;
示例合法片段:
{
"user_id": "u_123456",
"user_profile": {
"age": 28,
"gender": "male",
"city": "beijing",
"interests": ["tech", "sports"],
"recent_browse": ["item_789", "item_456"]
},
"scene": "home_feed",
"size": 10
}
签名逻辑和字段校验是整个链路最脆弱的一环,哪怕nonce多一个字符、timestamp差500ms、body里多一个空格,都会让签名失败——而错误提示往往只说“invalid”,不会告诉你哪错了。










