yuji0602’s blog

日々思っていることなど。

Node.jsでYahoo!ショッピングの注文APIを叩いてみる

概要

業務でYahoo!ショッピングAPIを利用しているのですが、注文APIは少し苦戦したのでメモを残します。 とりあえず立たけるようになったので良かった・・

ちなみに、マニュアルは以下のページにあります。

ショッピング:注文に関するAPI - Yahoo!デベロッパーネットワーク

なお、アクセストークンについては既に取れている前提で記載しています。

注文ステータス別件数参照

注文ステータス別の件数を取得するAPIです。こちらは簡単でした。

サンプル

const request = require('request')
const accessToken = '<ACCESS_TOKEN>'
const sellerId = 'snbx-xxxxx'
const url = 'https://test.circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderCount'

const options = {
  method: 'GET',
  url: url,
  headers: {
    'Authorization': 'Bearer ' + accessToken
  },
  qs: {
    seller_id: sellerId,
  },
  ignore_errors: true
}

request.get(options, (err, res, body) => {
  if (!err && res.statusCode === 200) {
    console.log(body)
  } else {
    console.log('Error!')
    console.log(res)
  }
})

レスポンス

<?xml version="1.0" encoding="UTF-8" ?>
<ResultSet totalResultsAvailable="1" totalResultsReturned="1" firstResultPosition="1">
    <Result>
        <Status>OK</Status>
        <Count>
            <NewOrder>1</NewOrder>
            <NewReserve>0</NewReserve>
            <WaitPayment>0</WaitPayment>
            <WaitShipping>0</WaitShipping>
            <Shipping>0</Shipping>
            <Reserve>0</Reserve>
            <Holding>0</Holding>
            <WaitDone>0</WaitDone>
            <Suspect>0</Suspect>
            <SettleError>0</SettleError>
            <Refund>0</Refund>
            <AutoDone>1</AutoDone>
            <AutoWorking>0</AutoWorking>
            <Release>0</Release>
            <NoPayNumber>0</NoPayNumber>
            <StoreStatus1>0</StoreStatus1>
            <StoreStatus2>0</StoreStatus2>
            <StoreStatus3>0</StoreStatus3>
            <StoreStatus4>0</StoreStatus4>
            <StoreStatus5>0</StoreStatus5>
            <StoreStatus6>0</StoreStatus6>
            <StoreStatus7>0</StoreStatus7>
            <StoreStatus8>0</StoreStatus8>
            <StoreStatus9>0</StoreStatus9>
            <StoreStatus10>0</StoreStatus10>
        </Count>
    </Result>
</ResultSet>

注文検索API

注文検索APIの方はちょっと苦労したのですが、何とか値が取れるようになったので良かったです。

サンプル

セラーIDのsnbx-xxxxxxは任意の値を入れてください。

const request = require('request')
const accessToken = '<ACCESS_TOKEN>'
const sellerId = 'snbx-xxxxxx'
const url = 'https://test.circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderList'

const xml = `
<Req>
<SellerId>${sellerId}</SellerId>
<Search>
<Condition>
<OrderTimeFrom>20180611000000</OrderTimeFrom>
</Condition>
<Field>OrderId,Version,OrderStatus</Field>
</Search>
</Req>`

const options = {
  method: 'POST',
  url: url,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Bearer ' + accessToken
  },
  body: xml,
  ignore_errors: true
}

request(options, (err, res, body) => {
  if (!err && res.statusCode === 200) {
    console.log(body)
  } else {
    console.log('Error!')
    console.log(err)
    console.log(res)
  }
})

レスポンス

<?xml version="1.0" encoding="UTF-8" ?>
<Result>
    <Status>OK</Status>
    <Search>
        <TotalCount>2</TotalCount>
        <OrderInfo>
            <OrderId>snbx-xxxxx-10000001</OrderId>
            <Version>1</Version>
            <OrderStatus>5</OrderStatus>
            <Index>1</Index>
        </OrderInfo>
        <OrderInfo>
            <OrderId>snbx-xxxxx-10000002</OrderId>
            <Version>1</Version>
            <OrderStatus>5</OrderStatus>
            <Index>2</Index>
        </OrderInfo>
    </Search>
</Result>