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