APIで注文キャンセルしたい

Topic summary

REST APIを使用して注文番号(#から始まる)で検索し、取得したIDでキャンセル処理を実装していたが、テスト環境と本番環境で検索結果が異なる問題が発生。

推奨される解決策:

  • REST APIからGraphQL APIへの移行を検討
  • 2024年10月1日以降、REST Admin APIはレガシーAPIとなり、2025年4月1日から新規公開アプリはGraphQL APIのみで構築する必要がある
  • REST APIは今後メンテナンスされない可能性がある

GraphQLでの実装方法:

  • 注文検索:orders(query: "name:#1001")クエリで注文IDを取得
  • キャンセル処理:orderCancel mutationを使用

関連ドキュメントとコード例が提供されており、GraphQL APIでの再実装が提案されている。

Summarized with AI on October 28. AI used: claude-sonnet-4-5-20250929.

/ドメイン.myshopify.com/admin/api/2025-04/orders.json?name= 注文番号

で#から始まる注文番号を検索してIDを取得し、

それをつかってAPIでキャンセルしてました。

テストではそれで上手くいってたんですが、実装後に検索結果で出てくる注文が異なることに気が付きました。

どうやったらキャンセルAPIが使えますか?

@mxmtst0314

なぜ、テストと実際の運用で結果が変わってしまうのかは分からないのですが、

まず、REST APIを利用する強い理由がないようでしたら、GraphQL APIを利用することをお勧めいたします。

https://shopify.dev/docs/api/admin-rest/2025-04/resources/order#get-orders?status=any

The REST Admin API is a legacy API as of October 1, 2024. Starting April 1, 2025, all new public apps must be built exclusively with the GraphQL Admin API. For details and migration steps, visit our migration guide.

とのことですので、今後REST APIはメンテナンスされない恐れがあります。

GraphQLでnameで注文を検索されたい場合は、

https://shopify.dev/docs/api/admin-graphql/unstable/queries/orders

を参考にしますと、

query {
  orders(query: "name:#1001") {
    edges {
      node {
        id
      }
    }
  }
}

のようにすると、商品のIDが取得できるかと思います。

(ご存知でしたら恐縮です。)

同様に注文キャンセル用のmutationも用意されていますので、

https://shopify.dev/docs/api/admin-graphql/unstable/mutations/ordercancel

こちらを参考にGraphQLで組み直してみてはいかがでしょうか?

ご参考まで。

(キュー田辺)