概要
払い戻しは、ユーザーのアクティブな操作([払い戻し] ボタンを押す)によって開始することも、ユーザーの代わりに自動的に開始することもできます。トリガーに関係なく、非同期の払い戻しリクエストは Google から決済インテグレータに送信されます。インテグレータはリクエストを承認し、払い戻しが完了したら Google に通知する必要があります。
フローの仕組み
払い戻しフロー
ユーザーが開始する非同期の払い戻しフローの例を次に示します。
上の図のオブジェクトは次のとおりです。
- お客様: 全額払い戻しまたは一部払い戻しを希望しているユーザーです。
- Google サーバー: refund コマンドを決済インテグレータに送信する Google のバックエンド サーバー。
- 決済インテグレータ: 払い戻しリクエストを適切なカード発行会社に転送するインテグレータ。
- 発行元: 支払いに使用されるカード発行会社。払い戻しリクエストを受け付けます。
この例の払い戻しは、ユーザーによって開始されます。
- ユーザーが Google サーバーへの払い戻し手続きを開始します。
- Google は、決済インテグレータの
AsynchronousRefund
エンドポイントを呼び出します。 - インテグレータは
Acknowledged
レスポンスを Google に送信します。 - インテグレータはカード発行会社の適切な
Refund
エンドポイントを呼び出します。 - カード発行会社は払い戻しを処理し、
Success
でインテグレータに応答します。 - インテグレータは Google サーバー上で
RefundResultNotification
エンドポイントを呼び出して、結果を Google に通知します。 - Google は
RefundResultNotification
を承認します。 - Google がユーザーの利用可能な残高を更新します。
- お客様に払い戻しが行われます。
ベスト プラクティスとその他の考慮事項
Google 広告などの一部の Google サービスでは、アカウントにクレジットが残っている限り払い戻しがサポートされているため、トランザクションの払い戻しリクエストは無期限に実施する必要があります。技術的な制限がある場合、払い戻し期間はプラットフォームで認められる期間にする必要があります。
払い戻しが不承認となるのは、元の取引の残高が払い戻し額に満たない場合、またはアカウントが閉鎖されているか保留中で、インテグレータがユーザーにこの金額を送金できない場合のみです。
回収は、回収から数秒以内に開始されます。払い戻しの時期は Google の裁量によります。
払い戻しを全額払い戻しとみなすべきではありません。アカウントの払い戻しを行う際は、常に refundAmount
フィールドを考慮する必要があります。
一部払い戻しを複数サポートする必要があります。たとえば、1,100 円の取引が発生し、ユーザーが元の取引で 400 円、500 円、100 円の部分的な払い戻しに成功したとします。この場合、3 つの払い戻しの captureRequestId
はすべて同じですが、requestId
の値は異なります。この取引の残高は 1 ドルです。
今度は 1,200 円の商品を購入したとします。この例では、ユーザーは 2 回、それぞれ 600 円の払い戻しを行えます。この 2 つの払い戻しの requestId
の値が異なる(かつ captureRequestId
が同じ)場合、同じ取引に対する別々の払い戻しとして処理する必要があります。この場合、払い戻しが完了すると、お客様の取引の残高は 0 円になります。