PHP调用速卖通联盟API生成推广链接遇IncompleteSignature错误
速卖通联盟API推广链接生成签名错误解决方案
问题排查点及修复步骤
补充必填参数tracking_id
你提到已配置tracking_id,但代码中$param数组里没有这个参数,这是接口必填项,必须添加到参数列表中:$param["tracking_id"] = "你的跟踪ID"; // 替换为实际值修正Timestamp格式
速卖通API要求timestamp为YYYY-MM-DD HH:mm:ss格式的字符串,而非Unix时间戳,修改代码:$param["timestamp"] = date('Y-m-d H:i:s');统一请求参数传递方式
你当前同时在URL和POST body中传递参数,导致服务器接收的参数集合与签名用的参数集合不一致。正确的做法是:- URL仅保留基础地址
https://api-sg.aliexpress.com/sync - 所有参数放在POST body中,签名基于POST参数的拼接结果
- URL仅保留基础地址
移除多余的UTF-8编码
如果你的PHP环境默认编码是UTF-8,utf8_encode会导致参数重复编码,直接去掉即可。
修正后的完整代码
$url = "https://api-sg.aliexpress.com/sync"; $appKey = "***"; $appSecret = "***"; $appName = "***"; $trackingId = "你的跟踪ID"; // 补充跟踪ID $param = array(); $param["app_key"] = $appKey; $param["format"] = "json"; $param["promotion_link_type"]=0; $param["source_values"]="***"; $param["method"] = "aliexpress.affiliate.link.generate"; $param["sign_method"] = "md5"; $param["timestamp"] = date('Y-m-d H:i:s'); // 修正时间格式 $param["tracking_id"] = $trackingId; // 添加必填参数 ksort($param); // 拼接参数,移除utf8_encode $parameters = ''; foreach ($param as $key=>$value) { if ($parameters) { $parameters .= '&'; } $parameters .= $key . '=' . $value; } // 生成签名 $sign = strtoupper(md5($appSecret . $parameters . $appSecret)); // 签名拼接到POST参数中 $parameters .= '&sign=' . $sign; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded;charset=utf-8')); $response = curl_exec($ch); if (curl_errno($ch)) { echo 'Error: ' . curl_error($ch); } curl_close($ch); echo $response;
额外验证点
- 确认
source_values的格式符合要求(比如是商品ID列表,用逗号分隔) - 检查
appSecret没有多余的空格或特殊字符,确保和后台配置完全一致
内容的提问来源于stack exchange,提问作者Laurent
相关产品推荐
相关产品推荐

