pythonで注文APIを使う方法(ヤフーショッピング,Qoo10,au pay マーケット)

<!-- wp:heading {"level":1} -->
<h1>記事を書くきっかけ</h1>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>自身で物販システムを構築したときに解説記事が皆無だったため本記事を執筆することにしました。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※構築した物販システムは下記の動画で紹介しております。</p>
<!-- /wp:paragraph -->

<iframe width="560" height="315" src="https://www.youtube.com/embed/4vIj4XW7RQs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

<!-- wp:heading {"level":1} -->
<h1>対象の読者像</h1>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>・pythonで注文APIを使ってみたい方</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>・ヤフーショッピング、Qoo10、au payマーケットの注文APIの違いを理解したい方</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>・python以外で注文API使用したいけど、解説記事が見当たらなくて困っている方</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※pythonでスクレイピング経験がある方なら理解できるレベルと思います。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":1} -->
<h1>事前にインストールが必要なライブラリ</h1>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>事前に下記のリンク先を参考にをpip installして下さい。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://requests-docs-ja.readthedocs.io/en/latest/user/install/" data-type="URL" data-id="https://requests-docs-ja.readthedocs.io/en/latest/user/install/">・requests</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>・<a href="https://ai-inter1.com/python-selenium/#st-toc-h-4" data-type="URL" data-id="https://ai-inter1.com/python-selenium/#st-toc-h-4">selenium</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※selenium3をインストールして下さい</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":1} -->
<h1>受注APIの解説</h1>
<!-- /wp:heading -->

<!-- wp:heading -->
<h2>ヤフーショッピング</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3>事前準備</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><a href="https://developer.yahoo.co.jp/webapi/shopping/introduction.html#introduction_02" data-type="URL" data-id="https://developer.yahoo.co.jp/webapi/shopping/introduction.html#introduction_02">公式ソース</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>上記リンク先の1～5までを実施します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※注文APIを利用できるまでに約1週間程度かかります</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>リフレッシュトークンを取得する</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>公式ですとアクセストークン取得となっておりますが、重要なのはアクセストークンと同時に取得できるリフレッシュトークンになります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>アクセストークンとは、APIにアクセスする際に使用するトークン</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>リフレッシュトークンとは、アクセストークンを再取得するのに必要なトークン</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>になります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>下記の公式画像①～③がリフレッシュトークン取得までの内容になります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※画像は公式ページにリンクしてます。</p>
<!-- /wp:paragraph -->

<!-- wp:image {"sizeSlug":"large","linkDestination":"custom"} -->
<figure class="wp-block-image size-large"><a href="https://developer.yahoo.co.jp/yconnect/v2/authorization_code/"><img src="https://s.yimg.jp/images/login/pc/img/yconnect/doc/2.0.0/authorization_flow_serverside.png" alt=""/></a></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>以下のpythonソースコードを実行して、リフレッシュトークンを取得します。</p>
<!-- /wp:paragraph -->

```python:
import requests
import json
import pprint
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
import base64

app_id = #事前準備で取得したアプリケーションIDを入力
secret = #事前準備で取得したシークレットを入力
redirect_uri = #事前準備で登録したリダイレクトURIを入力

driver = webdriver.Chrome()
url = "https://auth.login.yahoo.co.jp/yconnect/v2/authorization?response_type=code+id_token&client_id={app_id}\
       &state=xyz&redirect_uri={redirect_uri}&&scope=openid+profile&nonce=ef3a091928d5491624c0ac54d697124422705091"\
	   .format(app_id=app_id,redirect_uri=redirect_uri)

driver.get(url)

code = input("認可コードを入力>>>")

body = app_id + ":" + secret
basic = base64.b64encode(body.encode())

headers = {"Accept":"*/*","Content-Type":"application/x-www-form-urlencoded; charset=utf-8"}
#headers["Authorization"] = "Basic " + str(basic)

data = "grant_type=authorization_code&code={code}&redirect_uri={redirect_uri}&client_id={app_id}&client_secret={secret}"\
       .format(code=code,redirect_uri=redirect_uri,app_id=app_id,secret=secret)
url = "https://auth.login.yahoo.co.jp/yconnect/v2/token"

req = requests.post(url=url,headers=headers,data=data)
print(req)
token_directry = json.loads(req.text)

print("access_token:>>>" + token_directry["access_token"])
print("refresh_token:>>>" + token_directry["refresh_token"])
```

<!-- wp:paragraph -->
<p>※seleniumを使用してchromeブラウザでスクレイピング可能にしておく必要があります。詳しくは、<a href="https://ai-inter1.com/python-selenium/#st-toc-h-4" data-type="URL" data-id="https://ai-inter1.com/python-selenium/#st-toc-h-4">こちら</a>を参照してください。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※実行環境はselenium3になります。(selenium4だとエラーになります)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>◎リフレッシュトークン取得までの流れ</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>①必要情報をソースコードに入力する</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block {"langType":"python","langName":"Python"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-python" data-lang="Python"><code>app_id = #事前準備で取得したアプリケーションIDを入力
secret = #事前準備で取得したシークレットを入力
redirect_uri = #事前準備で登録したリダイレクトURIを入力</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>上記の＃部分に取得した情報を入力してpythonを実行して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>②ヤフーIDを認可する</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":19,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://motoya-portfolio.com/wp-content/uploads/2022/05/1ヤフーIDを認可-1024x786.jpg" alt="" class="wp-image-19"/><figcaption>pythonを実行すると上記の画面が立ち上がるので、<br><strong>受注APIを利用するストアと紐づいてるヤフーID</strong>にログインします。</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>③認可コードを取得する</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":20,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://motoya-portfolio.com/wp-content/uploads/2022/05/2認可コード取得-1024x236.jpg" alt="" class="wp-image-20"/><figcaption>事前に登録したリダイレクトURIにリダイレクトするので、出力されたURLを確認します。</figcaption></figure>
<!-- /wp:image -->

<!-- wp:loos-hcb/code-block {"fileName":"出力されたURL"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain" data-file="出力されたURL"><code>https://{リダイレクトURL}#state=xyz&
id_token={～長い～}&
code=xxxxxxxx</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>上記の形式のURLになっているので、</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>一番末尾</strong>のcode=xxxxxxxxの<strong>xxxxxxxxの部分をコピー</strong>します。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※この部分が認可コード</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>④認可コードをDOS画面にコピペ</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":21,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://motoya-portfolio.com/wp-content/uploads/2022/05/3認可コードをpythonを起動したDOSに入力-1024x521.jpg" alt="" class="wp-image-21"/><figcaption>pythonを実行したDOS画面に③でコピーした認可コードを貼付けて”Enter”を押します。</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>⑤リフレッシュトークンの取得</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":22,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://motoya-portfolio.com/wp-content/uploads/2022/05/4.リフレッシュトークンget-1024x515.jpg" alt="" class="wp-image-22"/><figcaption>上記のようにDOS画面にリフレッシュトークン(画像赤枠)が出力されます。</figcaption></figure>
<!-- /wp:image -->

<!-- wp:paragraph -->
<p>"&gt;&gt;&gt;"の先がリフレッシュトークンになるのでコピーして使用して下さい。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>これでヤフーショッピングの受注APIを使用する準備が完了しました！</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>注文APIの使用方法</h3>
<!-- /wp:heading -->

<!-- wp:heading {"level":4} -->
<h4>各トークンの有効期限</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>アクセストークン：取得から1時間</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>リフレッシュトークン(証明書なし)：取得から12時間</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>リフレッシュトークン(証明書あり)：取得から4週間</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※1度でも証明書なしでAPIにアクセスすると元のリフレッシュトークンの有効期限は4週間➡12時間に変更される</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>リフレッシュトークンからアクセストークンの再発行方法</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>アクセストークンの有効期限が1時間と短いため</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>受注管理の完全自動化をしたい場合、リフレッシュトークンからアクセストークンを再取得する必要があります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>上記は下記の関数で実現できます。</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block {"langType":"python","langName":"Python"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-python" data-lang="Python"><code>def refresh_token(refresh_token_base):
	
	app_id = #事前準備で取得したアプリケーションIDを入力
  secret = #事前準備で取得したシークレットを入力 
	
	headers = {&quot;Accept&quot;:&quot;*/*&quot;,&quot;Content-Type&quot;:&quot;application/x-www-form-urlencoded; charset=utf-8&quot;}
	data = &quot;grant_type=refresh_token&client_id={app_id}&client_secret={secret}&refresh_token={refresh_token}&quot;.format(app_id=app_id,secret=secret,refresh_token=refresh_token)
	
	print(data)
	url = &quot;https://auth.login.yahoo.co.jp/yconnect/v2/token&quot;

	req = requests.post(url=url,headers=headers,data=data)
	token_directry = json.loads(req.text)
	print(req.text)
	return token_directry[&quot;access_token&quot;]
</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>上記の【app_id,secret】の部分を自身で取得した情報を入力すれば、このまま組み込めば使用可能です。</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block {"fileName":"関数の呼び出し"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain" data-file="関数の呼び出し"><code>access_token = refresh_token(#取得したリフレッシュトークンを入力)</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>という感じで呼び出して使ってください。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>証明書の使用方法</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>※重要</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>証明書をダウンロードするとzipになっているので、解凍したフォルダを任意の場所に設置して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block {"langType":"python","langName":"Python"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-python" data-lang="Python"><code>req = requests.post\
(url=url,headers=headers,data=data,\
cert=\
({証明書フォルダ内.crtファイルまでのpath},\
{証明書フォルダ内.keyファイルまでのpath})</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>上記のように"cert="の部分を組み込んでrequests.postすれば証明書情報を含んでpostできます。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>注文検索APIの特徴と使い方</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><a href="https://developer.yahoo.co.jp/webapi/shopping/order/" data-type="URL" data-id="https://developer.yahoo.co.jp/webapi/shopping/order/">公式ページ</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>公式ページを見て頂くとわかりますが</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>注文APIといっても沢山種類があるので、まずは基本となる【注文検索API】について解説します。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>特徴</h5>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>①1回のpostで複数種類の注文番号情報をレスポンスできる(最大2000件)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>②注文された商品情報等レスポンスしてくれない情報が存在する</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>使い方</h5>

```python
def YahooShopOderApi1(refresh_token_base):

  T_now = datetime.datetime.now()
	T_before = T_now + datetime.timedelta(days=-15)
		
	T_to = T_now.strftime('%Y%m%d%H%M%S')
	T_from = T_before.strftime('%Y%m%d%H%M%S')
		
	access_token = refresh_token(refresh_token_base)
		
	url = "https://circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderList"
	
	headers = {"Authorization":"Bearer " + access_token}	
		
	data = """
	<Req>
	<Search>
		<Result>1000</Result>
		<Condition>
		<OrderTimeFrom>{OrderTimeFrom}</OrderTimeFrom>
		<OrderTimeTo>{OrderTimeTo}</OrderTimeTo>
		</Condition>
		<Field>OrderId,OrderStatus,PayStatus</Field>
	</Search>
	<SellerId>#ストア名を入力してください</SellerId>
	</Req>""".format(OrderTimeFrom=T_from,OrderTimeTo=T_to)
		
	req = requests.post(url=url,headers=headers,data=data,cert=({証明書フォルダ内.crtファイルまでのpath},{証明書フォルダ内.keyファイルまでのpath})
```

<p><strong>※重要</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>①refresh_token_baseという変数には、取得したリフレッシュトークンを事前に代入して実行して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>②&lt;SellerId&gt;&lt;/SellerId&gt;の項には、自身のストア名を入力してください</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>ソースコードの解説</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>実行日から15日以内の注文全て(上限1000件)について、</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>【OrderId,OrderStatus,PayStatus】のレスポンスをお願いします。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>という内容です。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>レスポンス項目は色々ありますので、<a href="https://developer.yahoo.co.jp/webapi/shopping/orderList.html" data-type="URL" data-id="https://developer.yahoo.co.jp/webapi/shopping/orderList.html">公式解説</a>を照会しながら</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&lt;Field&gt;&lt;/Field&gt;の項に付け足しすればレスポンス項目の増減ができます。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>注文詳細APIの特徴と使い方、レスポンス形式</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>前項で解説した注文検索APIでは照会できない情報が存在するので、さらに詳細な注文情報を照会したい場合に本APIを使用します。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>特徴</h5>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>①1回のpostで1つの注文番号しか照会できない</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>②全ての注文情報を照会できる</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>使い方</h5>

```python
def YahooShopOderApi2(refresh_token_base,OrderId):
  
  data = """
	<Req>
		<Target>
	   			<OrderId>{OrderId}</OrderId>
		  <Field>BillMailAddress,ItemId,Quantity</Field>
		</Target>
		<SellerId>#ストア名を入力してください</SellerId>
	</Req>""".format(OrderId = OrderId)
				
	url = "https://circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderInfo"
	headers = {"Authorization":"Bearer " + access_token}
	req = requests.post(url=url,headers=headers,data=data,cert=({証明書フォルダ内.crtファイルまでのpath},{証明書フォルダ内.keyファイルまでのpath})
```

<!-- wp:paragraph -->
<p><strong>※重要</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>①refresh_token_baseという変数には、取得したリフレッシュトークンを事前に代入して実行して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>②OrderIdという変数には、参照したい注文番号を代入して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>③&lt;SellerId&gt;&lt;/SellerId&gt;の項には、自身のストア名を入力してください</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>ソースコードの解説</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>指定した注文番号の【顧客メールアドレス、注文された商品管理番号と数量】をレスポンスして下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>という内容です。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>レスポンス項目は色々ありますので、<a href="https://developer.yahoo.co.jp/webapi/shopping/orderInfo.html" data-type="URL" data-id="https://developer.yahoo.co.jp/webapi/shopping/orderInfo.html">公式解説</a>を照会しながら</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&lt;Field&gt;&lt;/Field&gt;の項に付け足しすればレスポンス項目の増減ができます。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>レスポンス形式</h5>
<!-- /wp:heading -->

<!-- wp:loos-hcb/code-block {"fileName":"レスポンスXML"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain" data-file="レスポンスXML"><code> &lt;OrderInfo&gt;
 &lt;Item&gt;
        &lt;ItemId&gt;&lt;![CDATA[item-n77]]&gt;&lt;/ItemId&gt;
        &lt;Quantity&gt;2&lt;/Quantity&gt;
 &lt;/Item&gt;
 &lt;Item&gt;
        &lt;ItemId&gt;&lt;![CDATA[item-p09]]&gt;&lt;/ItemId&gt;
        &lt;Quantity&gt;1&lt;/Quantity&gt;
 &lt;/Item&gt;
 &lt;/OrderInfo&gt;</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>ここが他モール間で差異が大きい部分なのですが</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>1つの注文番号に対して2種類以上の商品が注文されている場合、どのように表現するかという部分に焦点をあてると色々なモールのAPI仕様が早く理解できるようになります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>ヤフーショッピングの特徴としては、上記【レスポンスXML】のように</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>注文された商品種類数だけ&lt;OrderInfo&gt;タグ内に&lt;Item&gt;タグを発行することで複数種類の注文商品を表現してます。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>au payマーケット</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3>事前準備</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>wow!managerより、</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>各種お申込み &gt;&gt;  API利用申請</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>から申請し、APIキーを取得して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※APIキーの有効期限は3か月なので3か月おきに再発行する流れになります</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>注文API(受注API)の使用方法</h3>
<!-- /wp:heading -->

<!-- wp:heading {"level":4} -->
<h4>受注情報一括取得APIの特徴と使い方、レスポンス形式</h4>
<!-- /wp:heading -->

<!-- wp:heading {"level":5} -->
<h5>特徴</h5>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>①1回のgetで複数種類の注文番号情報をレスポンスできる(最大1000件)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>②注文された情報全てをレスポンスしてくれる</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>使い方</h5>
<!-- /wp:heading -->

```python
def auOrderApi1(au_api_key):  

  shopId = #ストアに割り振られている会員番号を入力してください  
  
  T_now = datetime.datetime.now()
	T_before = T_now + datetime.timedelta(days=-30)	
	endDate = T_now.strftime('%Y%m%d')
	startDate = T_before.strftime('%Y%m%d')

	requestURL = "https://api.manager.wowma.jp/wmshopapi/searchTradeInfoListProc"
  params = {"shopId":shopid,\
            "totalCount":100,\
            "startDate":startDate,\
            "endDate":endDate}
	
	headers = {"Content-type": "application/x-www-form-urlencoded",\
             "Authorization": "Bearer " + au_api_key}
	req = requests.get(url=requestURL,headers=headers,params=params)
```

<!-- wp:paragraph -->
<p><strong>※重要</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>①変数【au_api_key】には、取得したAPIキーを事前に代入して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>②【shopId】には、ストアに割り振られている会員番号を入力して組み込んでください</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>ソースコードの解説</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>本日から30日以内の注文(上限100件)について、全注文の情報をレスポンスして下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>という意味合いになります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>特徴的な部分として、該当する注文情報を参照可能な155項目の注文情報全てレスポンスします。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※公式ドキュメントは非公開ですので、wowマネージャーから取得して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>レスポンス形式</h5>
<!-- /wp:heading -->

<!-- wp:loos-hcb/code-block {"fileName":"レスポンスXML"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain" data-file="レスポンスXML"><code>&lt;orderInfo&gt;
&lt;detail&gt;
        &lt;itemCode&gt;&lt;![CDATA[item-n77]]&gt;&lt;/itemCode&gt;
        &lt;unit&gt;2&lt;/unit&gt;
 &lt;/detail&gt;
 &lt;detail&gt;
        &lt;itemCode&gt;&lt;![CDATA[item-p09]]&gt;&lt;/itemCode&gt;
        &lt;unit&gt;1&lt;/unit&gt;
 &lt;/detail&gt;
&lt;/orderInfo&gt;</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>au payマーケットの特徴としては、上記【レスポンスXML】のように</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>注文された商品種類数だけ&lt;orderInfo&gt;タグ内に&lt;detail&gt;タグを発行することで複数種類の注文商品を表現してます。また、注文情報を一括取得できるAPIのみで必要な受注情報全てが取得可能です。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>Qoo10</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3>事前準備</h3>
<!-- /wp:heading -->

<!-- wp:heading {"level":4} -->
<h4>APIキーの発行</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><a href="http://doc.image-qoo10.jp/sqm/JP/guide_APItoFTP_JP.pdf" data-type="URL" data-id="http://doc.image-qoo10.jp/sqm/JP/guide_APItoFTP_JP.pdf">公式ソース</a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>上記、公式ソースを参照してQSMよりAPIキー発行申請をするとAPIキーを貰えます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※APIキー申請から発効までに数日かかります</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>SAKの発行</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>公式ドキュメントは、<a href="https://api.qoo10.jp/GMKT.INC.Front.QAPIService/Document/QAPIGuideIndex.aspx" data-type="URL" data-id="https://api.qoo10.jp/GMKT.INC.Front.QAPIService/Document/QAPIGuideIndex.aspx">こちら</a>を参照してください。</p>
<!-- /wp:paragraph -->

```python
def SAK(USER_ID,PASS,API_KEY):

	url = "https://api.qoo10.jp/GMKT.INC.Front.QAPIService/ebayjapan.qapi/CertificationAPI.CreateCertificationKey"
	headers = {"Content-Type":"application/x-www-form-urlencoded","Content-Length":"length","GiosisCertificationKey":API_KEY,"QAPIVersion":"1.0"}
	params = {"returnType":"text/xml","user_id":USER_ID,"pwd":PASS}
	req = requests.post(url=url,headers=headers,data=params)
	print(req.text)

USER_ID = #QSMのログインID
PASS = #QSMのログインPASS
API_KEY = #事前に発行したAPIキー
SAK(USER_ID,PASS,API_KEY)
```

<!-- wp:paragraph -->
<p>上記をpythonで実行すれば、下記のようにレスポンスされるので</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&lt;ResultObject&gt;タグ内の情報がSAKになります。</p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":28,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="https://motoya-portfolio.com/wp-content/uploads/2022/05/キャプチャ-1024x93.jpg" alt="" class="wp-image-28"/></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":4} -->
<h4>APIキーとSAKについて</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>APIキー：SAKを発行するのに必要。期限は明記されていない</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>SAK：APIにリクエストするのに必要。期限は発行から1年間</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>注文API(配送API)の使用方法</h3>
<!-- /wp:heading -->

<!-- wp:heading {"level":4} -->
<h4>ShippingBasic.GetShippingInfo_v2の特徴と使い方、レスポンス形式</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><a href="https://api.qoo10.jp/GMKT.INC.Front.QAPIService/Document/QAPIGuideIndex.aspx" data-type="URL" data-id="https://api.qoo10.jp/GMKT.INC.Front.QAPIService/Document/QAPIGuideIndex.aspx">公式ソース</a></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>特徴</h5>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>①1回のリクエストで複数種類の注文番号情報をレスポンスできる(件数上限なし)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>②注文された情報全てをレスポンスしてくれる</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>③ステータス管理において、ヤフーショッピングでいうところの注文ステータス・入金ステータス・出荷ステータスを全て合わせた"ShippingStat"という概念で管理している</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>※テスト注文を通して私の理解したところでは、</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>1：未入金・出荷不可</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>2：入金済・出荷可</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>4：出荷済</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>と解釈してシステム化しております。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>使い方</h5>
<!-- /wp:heading -->

```python
def Qoo10OrderApi(Qoo10_SAK):  

  T_now = datetime.datetime.now()
	T_before = T_now + datetime.timedelta(days=-30)
	
	endDate = T_now.strftime('%Y%m%d')
	startDate = T_before.strftime('%Y%m%d')
	requestURL = "https://api.qoo10.jp/GMKT.INC.Front.QAPIService/ebayjapan.qapi"
  params = {"v":"1.0",\
            "returnType":"xml",\
            "ShippingStat":"2",\
            "method":"ShippingBasic.GetShippingInfo_v2",\
            "key":Qoo10_SAK,\
            "search_Sdate":startDate,\
            "search_Edate":endDate}	

	req = requests.get(url=requestURL,params=params)
```
<!-- wp:paragraph -->
<p><strong>※重要</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>変数【Qoo10_SAK】には事前に取得したSAKを代入して関数実行して下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>ソースコードの解説</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>本日から30日以内の未出荷、かつ出荷可能な注文("ShippingStat":"2")全ての情報をレスポンスして下さい</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>という内容になります。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>検索条件は、"ShippingStat"・"search_Sdate"・"search_Edate"の内容を変更すれば良いので、公式ソースを読みながら変更してみてください。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":5} -->
<h5>レスポンス形式</h5>
<!-- /wp:heading -->

<!-- wp:loos-hcb/code-block {"fileName":"レスポンスXML"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain" data-file="レスポンスXML"><code>&lt;ShippingInfo&gt;
&lt;packNo&gt;0&lt;/packNo&gt;
&lt;orderNo&gt;0&lt;/orderNo&gt;
&lt;sellerItemCode&gt;co-1&lt;/sellerItemCode&gt;
&lt;orderQty&gt;1&lt;/orderQty&gt;
&lt;/ShippingInfo&gt;

&lt;ShippingInfo&gt;
&lt;packNo&gt;0&lt;/packNo&gt;
&lt;orderNo&gt;1&lt;/orderNo&gt;
&lt;sellerItemCode&gt;co-2&lt;/sellerItemCode&gt;
&lt;orderQty&gt;2&lt;/orderQty&gt;
&lt;/ShippingInfo&gt;
</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>Qoo10の特徴としては、上記【レスポンスXML】のように</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>注文された商品種類数だけ&lt;shippingInfo&gt;タグを発行することで複数種類の注文商品を表現してます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>つまるところ、Qoo10での注文情報出力は”受注した商品種類単位"で出力している特徴があります。</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>※&lt;packNo&gt;タグ情報が同じであれば同一注文という意味になります。</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>※ヤフーショッピング、au payマーケットは"受注した注文数単位”で出力してます。</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>また、注文情報を一括取得できるAPIのみで必要な受注情報全てが取得可能です。</p>
<!-- /wp:paragraph -->