こんにちは、いつもお世話になっております。
自分はまだ技術が十分ではありませんが、ECサイトを作っております。(セキュリティについてはSQLi,XSS,CSRF対策済みで、他は現在勉強中になります。決済機能は外部のためカード情報は保持しません)
現在、カラーミー(ユーザー数4万人のECサイトのASP)と自分のECサイトの在庫連携機能をカラーミーAPIを利用して作っているのですが、「カラーミーのショップの在庫数をAPIから更新する方法」がまったくわかりません。※商品にはオプション(サイズ)ありの条件。
オプションなしの在庫更新は知り合いにサンプルを頂き、無事に在庫更新できたのですが、オプションありの商品の在庫更新をどうやってやれば良いのか検討も付きません。SQLならWHERE句にidとoptionを入れてUPDATEするだけですが。やることは単純なのに書き方がわからないのです。
公式ドキュメントやネット上に更新のサンプルコードや解説がなく、1日以上つまってしまい、これ以上は自分で解決できる見込みがないため、投稿させて頂きました。
環境はローカルです。PHP 7.4.15 / MySQL 8.0.23 / Apache 2.4.46 (Win64)
カラーミー公式APIドキュメント
https://developer.shop-pro.jp/docs/colorme-api#operation/updateProduct
(「在庫」という機能にはGETしか存在せず「商品」というところでPUT(更新)するようです)
variants という中に、option1_value, option2_value, stocks が入ってます。
どなたかの手を借りないと、実現できそうにないので、テストアカウントを作成し、公開しても問題のないアクセストークンを取得しました。
以下が在庫数を取得できているコードになります。商品には**「カラー と サイズ」が存在します。(オプション1 と オプション2)**
<?php $header = [ 'Authorization: Bearer 3e8a09c7e2b04e8b69e52e3507daac8e334fcb6b069cef00d8caec84d2305724' ]; $url = 'https://api.shop-pro.jp/v1/products/159565096.json'; $param = array( 'product' => array( 'stocks' => 1000 ) ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); $information = curl_getinfo($ch); curl_close($ch); print_r(array( 'http_code' => $information['http_code'], 'response' => $result, )); ?>
アクセストークン: 3e8a09c7e2b04e8b69e52e3507daac8e334fcb6b069cef00d8caec84d2305724 (動作確認済)
商品ID: 159565096
商品ページ: https://apimuzui.shop-pro.jp/?pid=159565096
ちなみに、商品にはオプション1(サイズ)のみ存在する場合、オプション1と2(サイズとカラー)が存在する場合がありますが、自分の場合はオプション1(サイズ)のみ存在する場合が多いです。
もし自分に前提知識が不足している領域があれば、合わせてご指摘頂けると助かります。
PHPやDBや(セキュリティは少し)勉強はしましたが、LinuxやHTTP/TCPなどネットワークの基礎概念の勉強はまだできておりません。
トークンを作る際に、cURLというコマンドツールを使った方が良いという情報が出てきましたが、これについてもよく理解できてません。
PHPで自分だけで考えて作るときに詰まることはありませんが、いつもAPIのように外部との連携になると突然まったくわからず、1つのことに1週間以上はまってしまったりします。
この機会にちゃんと足りない知識を埋め、いろいろなAPIを問題なくスムーズに使えるようになりたいと考えております。
どなたか在庫の更新の方法をご教授いただけませんでしょうか。
公式ドキュメントもネット上にも「更新方法」については情報が不足していると思うので、実装できた際には記事にして、誰が見てもスムーズにできるように、やり方を公開しようと思っております。
お手数おかけしますが、何卒よろしくお願いいたします。jsonのURLの後に検索ワードのようにオプションの値を入れるのでしょうか。
頂いた回答を参考に以下のコードに修正しましたが、エラーになってしまいました。
実際に在庫数を変更を確認したパラメーターをそのまま参考にさせて頂き書いたので、正常に動くはずですがとても不思議です。
Array ( [http_code] => 500 [response] => {"errors":[{"code":500000,"message":"Internal Server Error","status":500}]} )
何が原因でしょうか。
<?php $header = [ 'Authorization: Bearer 3e8a09c7e2b04e8b69e52e3507daac8e334fcb6b069cef00d8caec84d2305724' ]; $url = 'https://api.shop-pro.jp/v1/products/159565096.json'; **$param = array( 'product' => array( 'variants' => array ( 'option1_value' => 'WH', 'option2_value' => 'S', 'stocks' => 99 ) ) );** $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); $information = curl_getinfo($ch); curl_close($ch); print_r(array( 'http_code' => $information['http_code'], 'response' => $result, )); ?>
解決コードがコメント欄になってしまったので、ここに記載しておきます。
<?php $attributes = array( "product" => array( "variants" => array( array( "option1_value"=>"WH", "option2_value"=>"S", "stocks"=>1 ) ) ) ); $request_options = array( 'http' => array( 'method' => 'PUT', 'header' => "Authorization: Bearer 3e8a09c7e2b04e8b69e52e3507daac8e334fcb6b069cef00d8caec84d2305724\r\n" . "Content-Type: application/json\r\n", 'content' => json_encode($attributes) ) ); $context = stream_context_create($request_options); $url = 'https://api.shop-pro.jp/v1/products/159565096.json'; $response_body = file_get_contents($url, false, $context); $response = json_decode($response_body, true); print '<pre>'; print_r( $response ); print '</pre>'; ?>
3e8a09c7e2b04e8b69e52e3507daac8e334fcb6b069cef00d8caec84d2305724 はアクセストークンです。
$url の 159565096 は商品ID です。
それぞれのケースに合わせて変更して下さい。
同じことでハマる人が少なくなることを願います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/09 08:12 編集
2021/05/09 08:38
2021/05/09 08:47
2021/05/09 09:28 編集
2021/05/09 09:33 編集
2021/05/09 09:57 編集
2021/05/09 09:50
2021/05/09 10:18
2021/05/09 10:23
2021/05/09 10:27
2021/05/09 10:30
2021/05/09 10:34
2021/05/09 10:40
2021/05/09 10:47
2021/05/09 10:56
2021/05/10 01:56