无法通过PUT更新Shopify变量库存数量

时间:2012-08-20 20:12:18

标签: php xml api curl shopify

我正在尝试使用其中一个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的问题,或者两者兼而有之,但是如果没有特定的错误数据,我很难知道是什么。感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

没有为put请求设置内容类型标头。