0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Shopify Extensions開発者の悩み解消!サンキューページで注文IDを確実に取る`useApi`活用術

0
Posted at

ShopifyのCheckout UI Extensionsで開発を進めているとき、サンキューページで注文IDが取れずにしばらくハマった。顧客アンケートの結果を注文と紐づけたいのに、必要なデータにアクセスできないのは開発者として致命的だ。

※この記事は、個人技術ブログ CodeArchPedia.com の技術メモ(要約)です。

何が起きたか(課題)

サンキューページ(拡張ポイントpurchase.thank-you.block.render)で、localStorageからチェックアウトトークンや注文IDを取得しようとしたが、全く取れなかった。この現象は、ShopifyのCheckout UI ExtensionsがWeb Worker内で動作しているために発生する、セキュリティ上の制限が原因だった。

  • 画面表示はできるが、注文IDやチェックアウトトークンを取得できない。
  • windowオブジェクトやlocalStorageへのアクセスがWeb Workerによって制限されている。
  • 顧客アンケートの回答と注文を紐づけることができず、データ連携が不可能だった。

筆者

この問題はStack Overflowでもよく話題になっており、多くの開発者が同じ壁にぶつかっている状況だった。

どう解決したか(概要)

このサンキューページでのデータアクセス制限を回避する、Shopify公式の推奨アプローチは、useApiフックを利用することだった。このフックを使うと、Web Worker内からでも拡張ポイント固有のコンテキストデータに安全にアクセスできる。

解決の鍵となったのは、useApiに拡張ポイント名('purchase.thank-you.block.render')を渡すこと。これにより得られるデータオブジェクトから、注文確認情報を通じて注文IDを取り出す。

以下がその基本的な実装の骨子だ。

const { useApi } = require('@shopify/checkout-ui-extensions-react');

function MyComponent() {
  const api = useApi('purchase.thank-you.block.render');
  const orderId = api?.orderConfirmation?.current?.order?.id;

  // orderId を使った処理...

  return (
    // ... JSX ...
  );
}

このorderId(例: gid://shopify/Order/1234567890)をサーバーサイドに送信することで、フォームの回答と注文の紐付けが確実にできるようになった。

効果(Before/After)

useApiの適用により、これまで取得不可能だったサンキューページ上の注文IDへのアクセスが可能になった。これにより、カスタムフォームやアンケートの回答を、実際の注文レコードと完全に紐づけることができるようになり、データ収集の信頼性が向上した。

  • Before: 注文IDが取得できず、アンケート回答がどの注文に紐づくか不明瞭だった。
  • After: useApiを利用し、注文完了直後に注文IDを安全に取得、サーバーへのデータ送信と注文メタフィールドへの保存が可能になった。

ただし、サンキューページはリロードされる可能性があるので、データ重複送信を防ぐためのフラグ管理が次の重要なステップになる。


🚀 詳細な設定とコードはこちら

具体的なWAFのルール設定や、より詳細なログ解析データは元のブログで公開しています。

👉 Shopify Extensions開発者の悩み解消!サンキューページで注文IDを確実に取るuseApi活用術

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?