PHP API ライブラリのいずれかの XML バージョンを使用して、API 経由でバリアントの在庫数量を更新しようとしていますが、問題が発生しています。私は本当に近づいているように感じますが、これまでに戻ってきたのは「エラー」だけです...それ以上具体的なものはありません.
これはここでの別の質問に似ていますが、その質問には「あなたのライブラリは古くなっています。これらのいずれかを使用してください」と回答されています。現時点では、別のライブラリを交換したり試したりする時間はありません。これを機能させる必要があります。
SO、これが私が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、またはその両方の問題だと推測していますが、具体的なエラー データがなければ、何が起きているのかを知るのは困難です。ご協力ありがとうございます。