特定国におけるPOS取引の現金取引丸め処理
ECサイト開発において、現金取引の丸め処理はしばしば見過ごされがちながら、それがないと意外と困るということがあります。特に、物理店舗とECサイトを併設するOMO(Online Merges with Offline)形式のビジネスモデルを採用している場合、この問題はより一層重要になります。今回は、Shopifyで特定の通貨に対してPOS(Point of Sale)上での現金取引を自動的に最寄りの単位に丸める機能をご紹介します。
技術的課題と現状分析
現在、Shopifyでは特定の通貨と地域に対して、現金の支払いと返金を自動的に最寄りの単位に丸める機能が導入されています。対象となるのは、CAD(カナダ)、AUD(オーストラリア)、NZD(ニュージーランド)、EUR(スイス、ベルギー、フィンランド)、DKK(デンマーク)、SEK(スウェーデン)、NOK(ノルウェー)です。
しかし、現状ではこの丸め処理が適用された取引金額を取得するためには、各取引ごとの金額と丸め処理の差分を手動で計算する必要がありました。これでは手間がかかる上に、エラーの元となります。
技術的ソリューションの提案
この問題を解決するために、ShopifyではGraphQLのAdmin APIの2024-10バージョン以降で、現金取引の丸め調整を簡単に取得するための新しいフィールドを導入しました。具体的には、注文レベルと取引レベルで丸め調整を取得するためのフィールドが追加されています。
実装手順とコード例
注文レベルでは、`Order`オブジェクトに`totalCashRoundingAdjustment`というフィールドが追加されました。これにより、POS注文内のすべての支払いと返金取引に適用された現金丸め調整の合計が取得できます。
以下に具体的なコード例を示します。
```javascript { order(id: 'gid://shopify/Order/12345') { totalCashRoundingAdjustment { presentmentMoney { amount } paymentSet { presentmentMoney { amount } } refundSet { presentmentMoney { amount } } } } } ```取引レベルでは、`OrderTransaction`オブジェクトに`amountRoundingSet`フィールドが追加されました。これにより、POS上での個々の現金支払いまたは返金取引に適用された現金丸め調整が取得できます。
以下に具体的なコード例を示します。
```javascript { orderTransaction(id: 'gid://shopify/OrderTransaction/12345') { amountRoundingSet { presentmentMoney { amount } } } } ```パフォーマンス・コスト分析
これらの新しいフィールドを利用することで、取引ごとの丸め処理の差分を手動で計算する手間が省けるため、開発者の作業効率が向上します。また、手動計算によるエラーを防ぐことも可能になります。これにより、システムの信頼性とパフォーマンスが向上するとともに、開発コストの削減にも貢献します。
実装時の注意点・ベストプラクティス
ただし、新しいフィールドを利用する際には、取引が現金取引であることを確認する必要があります。取引が現金取引であるかどうかは、`gateway`フィールドが`cash`と等しいかどうかで判断できます。
次のステップ・発展案
今後は、さらなる通貨に対応することが予定されています。また、APIのバージョンアップに伴い、より詳細な取引情報を取得するための新しいフィールドの追加も期待されます。
参考記事: Cash transaction rounding for Point of Sale purchases in selected countries






Share:
2025年1月アップデート:POS UIエクステンション
新たなMarkets APIの紹介