/ドメイン.myshopify.com/admin/api/2025-04/orders.json?name= 注文番号
で#から始まる注文番号を検索してIDを取得し、
それをつかってAPIでキャンセルしてました。
テストではそれで上手くいってたんですが、実装後に検索結果で出てくる注文が異なることに気が付きました。
どうやったらキャンセルAPIが使えますか?
REST APIを使用して注文番号(#から始まる)で検索し、取得したIDでキャンセル処理を実装していたが、テスト環境と本番環境で検索結果が異なる問題が発生。
推奨される解決策:
GraphQLでの実装方法:
orders(query: "name:#1001")クエリで注文IDを取得orderCancel mutationを使用関連ドキュメントとコード例が提供されており、GraphQL APIでの再実装が提案されている。
/ドメイン.myshopify.com/admin/api/2025-04/orders.json?name= 注文番号
で#から始まる注文番号を検索してIDを取得し、
それをつかってAPIでキャンセルしてました。
テストではそれで上手くいってたんですが、実装後に検索結果で出てくる注文が異なることに気が付きました。
どうやったらキャンセルAPIが使えますか?
なぜ、テストと実際の運用で結果が変わってしまうのかは分からないのですが、
まず、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で組み直してみてはいかがでしょうか?
ご参考まで。
(キュー田辺)