1

我正在尝试使用其中一个 PHP API 库的 XML 版本通过 API 更新变体库存数量,但遇到了问题。我觉得我真的很接近但到目前为止我得到的只是“错误”......没有比这更具体的了。

虽然这确实与此处的另一个问题相似,但该问题的回答是“您的库已过时,请使用其中一个”。在这一点上,我没有时间换出或试验不同的库。我需要让这个工作。

所以,这就是我通过 cURL“PUT”传递的内容:

<?xml version="1.0"?>
<variant>
   <inventory-quantity type="integer">123456</inventory-quantity>
   <id type="integer">123456789</id>
</variant>

这是返回的内容:

<?xml version="1.0" encoding="UTF-8"?>
<hash>
   <errors>Error</errors>
</hash>

我的功能如下:

function updateProductVariant($id,$qty) {
    $url = $this->buildDataURL('variants/'.$id);

    $string = '<variant>
   <id type="integer">'.$id.'</id>
   <inventory-quantity type="integer">'.$qty.'</inventory-quantity>
</variant>';

    $simpleXML = new SimpleXMLElement($string);
    $xml = $simpleXML->asXML();

    $putData = tmpfile();
    fwrite($putData,$xml);
    fseek($putData,0);

    $result = $this->curlPost($url,$xml,$putData);
    return $xml . "\n" . $result;
    #return $result;
}

cURL函数如下:

function curlPost($url,$request=null,$put=null,$post=null) {

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    if ($put) {
        curl_setopt($ch, CURLOPT_PUT, true);
        curl_setopt($ch, CURLOPT_INFILE, $put);
        curl_setopt($ch, CURLOPT_INFILESIZE, strlen($request));
    }
    if ($post) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8', 'Content-length: '.strlen($request)));
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    if(!curl_errno($ch)) {
        $result = curl_exec($ch);
    } else {
        $result = curl_errno($ch).": ".curl_error($ch);
    }
    curl_close($ch);

    return $result;
}

在这一点上,我猜这是 cURL 或 PUT 的问题,或者两者都有问题,但是如果没有特定的错误数据,我很难知道发生了什么。感谢您的任何帮助。

4

1 回答 1

3

未为放置请求设置内容类型标头。

于 2012-08-21T01:01:57.297 回答