bizarchさんの「Yahoo!ショッピング 商品画像アップロードAPIでInternalServerError(500)になる」と同じになりますが、どうしてもエラーの原因がわからないので教えてください。
bizarchさんの問合せ
http://qiita.com/bizarch/items/d6bf9771c011bf8f4865
商品画像をまとめたZIPファイルを作り転送しようと考えています。
PHP内で画像をZIP圧縮するところまでは問題なくできています。
できたZIPファイルをストアクリエータProで送信したところ、問題なく商品に画像がつきました。
しかし商品画像一括アップロードAPI で送信したところ、InternalServerError(500)になったり、OKが出るが画像はならない状態となります。
【InternalServerError(500)になるとき】
<?xml version="1.0" encoding="UTF-8" ?>
<Error>
<Message><![CDATA[システムエラーが発生しました。]]></Message>
<Detail></Detail>
<Code>ed-00001</Code>
</Error>
【正常に終わるが、画像は変わらないとき】
<?xml version="1.0" encoding="UTF-8" ?>
<ResultSet>
<Result>
<Status>OK</Status>
</Result>
</ResultSet>
この2つの違いは、画像が増えたか減ったかです。
PHPでは次のように書いています。
$url = 'https://test.circus.shopping.yahooapis.jp/ShoppingWebService/V1/uploadItemImagePack';
$boundary = '---------------------------'.time();
$contentType = "Content-Type: multipart/form-data; boundary=" . $boundary;
$src = '';
$src .= "--$boundary" . "\r\n";
$src .= sprintf('Content-Disposition: form-data; name="file"; filename="%s"%s', basename($zfn), "\r\n");
$src .= 'Content-Type: application/octet-stream'. "\r\n";
$src .= 'Content-Transfer-Encoding: binary'. "\r\n";
$src .= file_get_contents(ZIPファイルのパス) . "\r\n";
$src .= "--$boundary--" . "\r\n";
$seller_id = ストアID;
$url = $url . '?seller_id=' . $seller_id;
$headers = array(
$contentType,
'Authorization: Bearer ' . $token['access_token'],
'Content-Length: '.strlen($src),
);
$options = array('http' => array(
'method' => 'POST',
'content' => $src,
'header' => implode("\r\n", $headers),
'ignore_errors' => true,
));
$contents = file_get_contents($url , false, stream_context_create($options));
なぜエラーになったりOKになったりするのでしょう?
またOKになっても、ストアクリエータProで確認すると画像管理には登録されません。
画像はどこにとんでいったのでしょう?
因みに「?seller_id=」を外したり、パラメータ名「file」を「zip」などに返るとそれなりのエラーが返ってきます。
よろしくお願い致します。