Yahoo!ショッピング注文APIで詰まったハマりポイント3選|キャメル/スネーク混在、文字コード、XML POST

記事
IT・テクノロジー
Yahoo!ショッピングのAPI連携、地味にハマります。

ヴィージェイ物産株式会社(神戸市)では4モール(Amazon・Yahoo!・Qoo10・自社EC)を並行運営しており、Yahoo!ショッピングの注文取得・出品管理・在庫同期を全てAPI連携で自動化しています。その実装過程で「公式ドキュメントだけでは気付けなかった」ハマりポイントが3つあったので、これから連携する方向けに共有します。

EC事業者の方、Yahoo!ショッピングAPIを叩こうとしている開発者の方の参考になれば嬉しいです。

■ ハマりポイント①:注文APIと商品APIで「キャメル/スネーク」が混在している

これが一番ハマりました。2日溶かしました。

Yahoo!ショッピングのAPIは大きく2系統あります:

・注文関連API(orderInfo、orderList 等):キャメルケース(sellerId、pageKey)
・商品管理API(item、stock 等):スネークケース(seller_id、item_code)

最初は「seller_id」で全API叩いていたのですが、注文APIだけ500エラーが返ってきて2日悩みました。Postmanで sellerId に変えたら一発で動きました。

■ 対策コード例(Python)

# 注文API用(キャメルケース)
order_params = {'sellerId': 'your-shop-id', 'pageKey': 1, 'fromYmd': '20260401', 'toYmd': '20260430'}

# 商品管理API用(スネークケース)
item_params = {'seller_id': 'your-shop-id', 'item_code': 'SKU-001'}

教訓:Yahoo!ショッピングAPIは1つのSDKを使うより、APIごとにパラメータ命名を分けて管理する方が安全。

■ ハマりポイント②:注文APIはXML形式POSTリクエストである

REST APIに慣れている人はJSONで投げがちですが、Yahoo!ショッピングの注文APIはXML形式のPOSTリクエストを求めます。

NG:JSONで投げると400エラー
OK:XML形式でPOST

XMLボディの例:
<?xml version="1.0" encoding="UTF-8"?>
<Req>
<Search>
<Condition>
<OrderTimeFrom>2026-04-01T00:00:00+09:00</OrderTimeFrom>
<OrderTimeTo>2026-04-30T23:59:59+09:00</OrderTimeTo>
</Condition>
<Field>OrderId,OrderTime,TotalPrice</Field>
</Search>
</Req>

ヘッダー:'Authorization': 'Bearer YOUR_ACCESS_TOKEN', 'Content-Type': 'application/xml; charset=utf-8'

■ Content-Type に「; charset=utf-8」を必ず付ける

これも罠です。Content-Type: application/xml だけだと、サーバ側で文字コード解釈がブレます。必ず ; charset=utf-8 を付ける。

■ ハマりポイント③:レスポンスの文字コードが EUC-JP / Shift_JIS / UTF-8 で揺れる

リクエストはUTF-8固定でいけても、レスポンスの文字コードがAPIによって違う問題があります。

・商品データ取得:UTF-8 が多い
・注文データ取得:レスポンスヘッダーは UTF-8 を返すが、本文の特定タグだけ EUC-JP 由来の文字化けを起こすケースがある
・古いショップでは Shift_JIS が混じる

■ 対策:自動判定デコード関数(Python)

import chardet

def decode_response(response_bytes):
"""レスポンスの文字コードを自動判定してUTF-8に統一"""
try:
return response_bytes.decode('utf-8')
except UnicodeDecodeError:
pass
detected = chardet.detect(response_bytes)
encoding = detected.get('encoding', 'utf-8')
return response_bytes.decode(encoding, errors='replace')

これで「商品名が文字化け」「住所が読めない」を防げます。

■ まとめ:Yahoo!ショッピングAPIを叩く前にチェック

1. キャメル/スネーク混在を意識する(注文API=キャメル、商品API=スネーク)
2. 注文APIはXML POST+Content-Type: application/xml; charset=utf-8
3. レスポンス文字コードは自動判定でUTF-8に統一する

ヴィージェイ物産株式会社では、上記の知見をMCPサーバー(43ツール)として体系化し、Claude Desktopから自然言語で「今日の注文を取得して」と指示するだけで全自動処理する仕組みを自社運用しています。

EC事業者の方で「自動化したいけどAPIで詰まっている」「自分で実装する時間がない」という方は、ココナラのプロフィールから出品サービスをご覧ください。

※この記事は、ヴィージェイ物産株式会社(神戸市)が自社運営の4モール並行EC事業で実際にハマった事例をもとに執筆しています。記載内容は2026年4月時点の情報です。

※次回は「Amazon SP-APIのLWA Token取得で詰まる『リフレッシュトークンの正しい運用』」を予定しています。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら