我正在尝试使用其中一个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的问题,或者两者兼而有之,但是如果没有特定的错误数据,我很难知道是什么。感谢您的帮助。
答案 0 :(得分:3)
没有为put请求设置内容类型标头。