1

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、またはその両方の問題だと推測していますが、具体的なエラー データがなければ、何が起きているのかを知るのは困難です。ご協力ありがとうございます。

4

1 に答える 1

3

コンテンツタイプヘッダーがputリクエストに設定されていません。

于 2012-08-21T01:01:57.297 に答える