【Shopify.dev和訳】Apps/Payments/Capturing an authorized payment
この記事について
この記事は、Apps/Payments/Capturing an authorized paymentの記事を和訳したものです。
記事内で使用する画像は、公式ドキュメント内の画像を引用して使用させていただいております。
Shopify アプリのご紹介
Shopify アプリである、「商品ページ発売予告アプリ | リテリア Coming Soon」は、商品ページを買えない状態のまま、発売日時の予告をすることができるアプリです。Shopify で Coming Soon 機能を実現することができます。
Shopify アプリである、「らくらく日本語フォント設定|リテリア Font Picker」は、ノーコードで日本語フォントを使用できるアプリです。日本語フォントを導入することでブランドを演出することができます。
Capturing an authorized payment
キャプチャーとは、マーチャントが承認された支払いのために資金を獲得するプロセスのことです。
キャプチャーは、2 部構成のペイメントフローの第 2 部であり、認証されたペイメントがファイナライズされた後に発生します。
ファイナライズされた支払いは、kind
がauthorization
に設定されます。
マーチャントが承認されたトランザクションの資金をキャプチャしたい場合、Shopify はペイメントアプリにキャプチャリクエストを送信し、アプリはそれを解決または拒否することができます。
- マーチャントは、承認された支払いをキャプチャするためにクリックします。
- Shopify は決済アプリにバックエンドリクエストを送信し、キャプチャリクエストを指定します。
- アプリは 201 と空のレスポンスボディで応答します。
- アプリはCaptureSessionResolveまたはCaptureSessionRejectのいずれかの変異を使用してキャプチャを確定します。
- Shopify はステータスを更新します。
要件 | Requirements
- ペイメントアプリの構築を開始するを完了している。
- 一般的なトランザクション要件を理解している。
- ペイメントアプリの要件を満たす必要があります。
スコープ | Scopes
GraphQL ミューテーションを使用するには、アプリがペイメントアプリのアクセススコープを認識している必要があります。
フローの開始 | Initiate the flow
キャプチャーは、Shopify によって開始された支払いのkind
プロパティの値がauthorization
である場合にのみ実行できます。
オーソリゼーションでは、資金を保留し、Shopify のキャプチャーリクエストに対してCaptureSessionResolveまたはCaptureSessionRejectのいずれかのメッセージを返信し、資金のキャプチャーを受け入れるか拒否するかを決定します。
キャプチャーフローは、Shopify からプロバイダのキャプチャーセッション URLへの HTTP リクエストで始まります。
リクエストボディー | Request Body
{
"id": "2sl4WR9jF82W0vQVg8fjux9S",
"gid": "gid://shopify\/CaptureSession/2sl4WR9jF82W0vQVg8fjux9S",
"payment_id": "e6dXWOq7-_NSjXFeCjQ9jsGZ"
"amount": "123.00",
"currency": "CAD",
"merchant_locale": "en",
"proposed_at": "2020-07-13T00:00:00Z",
}
リクエストヘッダー | Request headers
Shopify-Shop-Domain: my-test-shop.myshopify.com
Shopify-Request-Id: 94169f7e-ac8d-4ef4-9fd2-90f0791daddf
リクエストの属性 | Request attributes
Attribute | Description | Type |
---|---|---|
id required
|
キャプチャーの試みのためのユニークな識別子。idempotency key として使用されます。与えられた ID を持つリクエストは、以前に受信した同じ ID を持つリクエストと同一であると仮定します。 | String |
gid required
|
Shopify と通信する際にキャプチャを識別します (GraphQL の変異などで)。 | String |
mayment_id required
|
キャプチャーされる承認済みの支払いの ID です。 | String |
amount required
|
キャプチャされる金額です。ロケールに関係なく、値は常に小数点をセパレータとして使用して送信されます。 | String |
currency required
|
3 文字の ISO 通貨コードです。 | String |
merchant_locale required
|
マーチャントが使用する言語を表す IETF BCP 47 言語タグ。 | String |
proposed_at required
|
キャプチャ要求が提案された時刻を表すタイムスタンプ。 | String(ISO-8601) |
承認された支払いの補足 | Capture an authorized payment
キャプチャーリクエストの処理に成功した後は、CaptureSessionResolveミューテーションを使って解決することができます。
POST https://{shop_domain}/payments_apps/api/2021-07/graphql.json
mutation captureSessionResolve($id: ID!) {
captureSessionResolve(id: $id) {
captureSession {
id
}
userErrors {
code
field
message
}
}
}
id
引数は、キャプチャのgid
に対応しています。
{
"id": "gid://shopify/CaptureSession/WVXNNTgPLXRNqHxF7_hvpNzE"
}
JSON Response
{
"data": {
"captureSessionResolve": {
"captureSession": {
"id": "gid://shopify/CaptureSession/WVXNNTgPLXRNqHxF7_hvpNzE"
},
"userErrors": []
}
},
...
}
}
}
キャプチャの拒否 | Reject a capture
キャプチャーリクエストを処理したくない場合は、拒否する必要があります。
認証の有効期限が切れている場合や、リクエストが詐欺的であったり高リスクであると疑われる場合には、キャプチャーを拒否したいと思うかもしれません。
キャプチャーを拒否するのは、最終的で回復不可能なエラーの場合だけにしてください。それ以外の場合は、キャプチャーの解決を再度試みる必要があります。
キャプチャーを拒否するには、RefundSessionRejectミューテーションを使用します。
POST https://{shop_domain}/payments_apps/api/2021-07/graphql.json
mutation captureSessionReject($id: ID!, $reason: CaptureSessionRejectionReasonInput!) {
captureSessionReject(id: $id, reason: $reason) {
captureSession {
id
}
userErrors {
code
field
message
}
}
}
{
"id": "gid://shopify/CaptureSession/GbPYHMeBk3VALoEU8l095cbh",
"reason": {
"code": "PROCESSING_ERROR"
}
}
拒否の一部として、キャプチャが拒否された理由をCaptureSessionRejectionReasonInputに含める必要があります。
CaptureSessionRejectionReasonInput.code
は、標準化されたエラーコードの列挙であるCaptureSessionStatusReasonRejectionCode
です。
CaptureSessionRejectionReasonInput.merchantMessage
引数は、キャプチャが拒否された理由を説明する、マーチャントに提示されるローカライズされたエラーメッセージです。
JSON Response
{
"data": {
"captureSessionReject": {
"captureSession": {
"id": "gid://shopify/CaptureSession/GbPYHMeBk3VALoEU8l095cbh"
},
"userErrors": []
}
},
...
}
}
}
再試行ポリシー | Retry policy
もし Shopify のサービスに障害が発生した場合(または 5xx のステータスコードが返された場合)、リクエストは再試行されなければなりません。リトライポリシーのセクションにあるガイドラインに従うことをお勧めします。
追加情報 | Additional information
Shopify アプリのご紹介
Shopify アプリである、「商品ページ発売予告アプリ | リテリア Coming Soon」は、商品ページを買えない状態のまま、発売日時の予告をすることができるアプリです。Shopify で Coming Soon 機能を実現することができます。
Shopify アプリである、「らくらく日本語フォント設定|リテリア Font Picker」は、ノーコードで日本語フォントを使用できるアプリです。日本語フォントを導入することでブランドを演出することができます。
Discussion