PHP /载从属关系API:IncompleteSignature /请求签名不符合平台标准

7dl7o3gd  于 5个月前  发布在  PHP
关注(0)|答案(1)|浏览(51)

我使用Aliexpress的附属API来检索产品价格并将链接转换为附属链接。
我可以得到产品信息没有任何问题,但当我试图把我的链接到加盟链接,我得到以下错误消息:

{"error_response":{"type":"ISV","code":"IncompleteSignature","msg":"The request signature does not conform to platform standards","request_id":"210101cd17036054742456317"}}

字符串
我使用与其他API方法完全相同的签名方法,但对于这个特定的方法,它不起作用。
这是我用途:

$url = "https://api-sg.aliexpress.com/sync";
$appKey = "***";
$appSecret = "***";
$appName = "***";

$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"] = time();
ksort($param);

foreach ($param as $key=>$value)
    {
        if (!isset($parameters))
            {
                $parameters = $key."=".$value;
            }
        else
            {
                $parameters = $parameters."&".$key."=".utf8_encode($value);
            }
    }

  $final = $url."?".$parameters."&sign=".strtoupper(md5($appSecret.$parameters.$appSecret));

 $ch = curl_init($final);
 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;


我也尝试了sha256和hmac,但我得到相同的错误消息.在MD5的签名工作正常使用全球速卖通.会员.产品.查询方法.我检查文档和唯一的强制性参数是:promotion_link_type,source_values,tracking_id.(doc here:https://developers.aliexpress.com/en/doc.htm?docId=45804&docType=2
我错过了什么吗?
谢谢

wxclj1h5

wxclj1h51#

感谢@MarkusZeller找到了解决方案
修改代码:

$url = "https://api-sg.aliexpress.com/sync";
$appKey = "***";
$appSecret = "***";
$appName = "***";

$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"] = time();
ksort($param);

字符串
foreach($param as $key=>$value){(!isset($parameters)){ $parameters = $key."=".$value; } else { $parameters = $parameters."&".$key."=".utf8_encode($value); } } $sign = str_replace(“&","",$parameters); $sign = str_replace(“&","",$sign); $sign = str_replace(“=","",$sign); $final = $url."?".$parameters."&sign=".strtoupper(md5($appSecret.$sign.$appSecret));

$ch = curl_init($final);
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'));


响应函数= curl_exec($ch);
其余的代码保持不变。我不得不使用一些存储在$sign中的修改,这些修改没有添加到最终的参数中。

相关问题