调用京东AI接口前必须确认三件事:一是去京东云控制台开通商品文案生成服务并获取access_token、app_key、app_secret;二是access_token需每2小时刷新,调用/oauth2/token接口;三是使用京东云AI专属域名而非api.jd.com。

京东AI接口调用前必须确认的三件事
京东AI商品描述生成服务不是开箱即用的PHP函数,它依赖外部HTTP API,且需提前申请密钥和开通权限。没拿到 access_token、app_key、app_secret 就写代码,100%返回 401 Unauthorized 或 {"code":40001,"msg":"invalid app_key"}。
- 去京东云控制台 →「AI服务」→「商品文案生成」开通服务,不是在京东联盟或商家后台
-
access_token有2小时有效期,不能硬编码进脚本;每次调用前需先用/oauth2/token接口刷新(需app_key+app_secret) - 接口地址不是文档里写的“https://api.jd.com”,而是京东云AI专属域名,例如:
https://aiapi.jdcloud.com/jdai/product-desc-gen(以控制台实际为准)
用cURL发POST请求时绕不开的header和body细节
京东AI这个接口对 Content-Type 和签名方式很敏感,错一个字段就返回 {"code":40005,"msg":"invalid signature"}。别用 file_get_contents 或 json_encode 直接丢数组——它要的是标准表单格式(application/x-www-form-urlencoded),且所有参数必须参与签名。
- 必须设置
Content-Type: application/x-www-form-urlencoded,不能是application/json - 所有请求参数(包括
timestamp、nonce、sign、text、style)都要先按字典序拼成字符串,再用HMAC-SHA256+app_secret算签名 -
timestamp必须是毫秒级当前时间(round(microtime(true) * 1000)),误差超过5分钟直接拒收 - 示例关键片段:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([<br> 'app_key' => 'your_app_key',<br> 'timestamp' => round(microtime(true) * 1000),<br> 'nonce' => uniqid(),<br> 'sign' => $sign,<br> 'text' => 'iPhone 15 Pro 256GB 钛金属',<br> 'style' => 'marketing'<br>]));
PHP里生成京东要求的sign签名最容易漏掉的点
签名不是简单拼接再hash。京东AI的 sign 是把所有非空请求参数(不含 sign 自身)按 key 升序排列后,用 key=value 连接,再用 app_secret 做 HMAC-SHA256,最后 base64 编码——少一步就 40005。
- 排序前必须过滤掉空值和
sign字段,否则签名不一致 - 拼接时用
&连接,不是&(HTML实体);等号前后不能有空格 - 计算前要把整个字符串 UTF-8 编码,中文乱码会导致签名失败
- 示例核心逻辑:
$params = array_filter([<br> 'app_key' => $app_key,<br> 'timestamp' => $ts,<br> 'nonce' => $nonce,<br> 'text' => $text,<br> 'style' => $style<br>]);<br>ksort($params);<br>$str = '';<br>foreach ($params as $k => $v) {<br> $str .= $k . '=' . rawurlencode($v) . '&';<br>}<br>$str = rtrim($str, '&');<br>$sign = base64_encode(hash_hmac('sha256', $str, $app_secret, true));
生成结果里带换行和营销符号,但前端渲染要小心XSS
京东返回的文案常含
、★、? 等富文本符号,直接 echo 到HTML页面可能触发XSS或排版错乱。这不是接口问题,是PHP输出层没做处理。
- 别用
htmlspecialchars()全量转义——它会把 ★ 变成★,失去营销感 - 推荐用
nl2br()处理换行,再对用户可控内容(如输入的text)单独过滤,文案主体可信任但需strip_tags()清除潜在HTML标签 - 如果存入数据库,注意字段要支持 utf8mb4(emoji需要);MySQL老版本默认 utf8 不行
- 返回结构示例:
{<br> "code": 0,<br> "data": {<br> "desc": "?【旗舰性能】iPhone 15 Pro 搭载A17芯片\n✅ 钛金属机身|超耐摔设计\n? 今日下单,顺丰包邮!"<br> }<br>}
京东AI的文案生成本身不难调通,难的是签名逻辑和时效性管理。很多人卡在 sign 错误,其实只是拼接时漏了 rawurlencode 或忘了删 sign 字段。token 过期后不自动刷新,跑着跑着就静默失败——得自己加个缓存+时间戳判断。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











