課金 – イシュアトークン(3-Dセキュア) – GET
3-Dセキュアのイシュアトークンオブジェクト
支払い方法がクレジットカードのトランザクショントークンを使用して課金を作成した後に、3-Dセキュアのイシュアトークンを取得するにはこの方法を使用します。
オブジェクトに対するイシュアトークンのGETリクエストには以下が必要です。(括弧内は入力箇所)
- 店舗ID(URLの
{storeId}
部分) - 課金ID(URLの
{chargeId}
部分) - シークレット(Headerの
{secret}
部分) - アプリトークン(Headerの
{jwt}
部分)
課金の3-Dセキュアの発動条件
3-Dセキュアは、加盟店さまに必要な設定がある場合にのみトリガーされます。
加盟店さまのアカウントに3-Dセキュアが設定されているかどうか不明な場合は、
APIで加盟店:GETのリクエストを取得し、card_configuration.three_ds_required
から確認してください。
確認が難しい場合はサポートデスクまでお問い合わせください。
イシュアトークンを取得する流れ
- トランザクショントークンの
payment_type
がcard
charge create
レスポンスのthree_ds.mode
はnormal
かforce
のどちらか- ステータスが
awaitng
になるまで、1秒ごとを目安に指数関数的に課金オブジェクトをポーリングする - 3D-セキュアのイシュアトークンオブジェクトを取得する
データ取得後、issuer_token
のURLに対し、payload
のデータcontent_type
のフォーマット、call_method
で指定された HTTP メソッドで、クライアントのブラウザから送信する実装を行ってください。
※payload
内の内容は接続先カード会社によって異なる可能性があります。
上記方法でクライアントをリダイレクトするか、iframeを展開してください。
※独自の決済フォーム内でiframeを展開して認証を実行しようとすると、コンテンツセキュリティポリシー (CSP)の制限が設定されている場合にブロックされてしまう可能性があります。
その場合別ページにリダイレクトして実行させるなど、ブロックを回避する構築を推奨しています。
iframe を開く場合の流れ
status
がsuccessful
、failed
、error
のいずれかの状態になるまで、3秒ごとを目安に課金オブジェクトをバックグラウンドでポーリングし続けます- 条件が満たされると iframe は閉じられ、その後の支払いフローが実行されます
認証実行後、クライアントをリダイレクトする場合の流れ
- 課金作成リクエスト(
redirect_three_ds.endpoint
)に該当するリダイレクトエンドポイントが登録されていることを確認する - レスポンスを受信したら、
data.three_ds.redirect_id
/redirect_three_ds.redirect_id
が入力されていることを確認し、リダイレクトが登録されていることを確認してください - クライアントがリダイレクトされて戻ってきたときに、アプリケーション上で処理されている正しいトランザクションを識別するメカニズムが存在することを確認してください
- リダイレクト先のURLへ
univapayChargeId
,univapayTokenId
に加えて、すべてのメタデータが自動的にクエリパラメータの一部として送信されます
イシュアトークンオブジェクトのデータ構造(3-Dセキュア)
レスポンスで返却されるイシュアトークンオブジェクトのデータは以下です。
フィールド名 | データ型 | 備考 |
---|---|---|
payment_type | string | cardのみ対応 |
issuer_token | string | クライアントが実行する3-Dセキュア認証URL |
payload | object | POSTリクエストのボディに送信すべきデータを含む、UTF-8でエンコードされたJSONオブジェクトを返却 JSON オブジェクトを、3D-セキュアが発行するエンドポイントに対応するコンテンツタイプおよび文字コードに変換してください |
content_type | string | カード発行会社のエンドポイントが想定しているペイロードのコンテンツタイプ 例:payloadが付与された場合 {"foo": "bar", "space": "cats"} コンテンツタイプが application/x-www-form-urlencoded だと以下形式foo=bar&space=cats |
call_method | string | クライアントによる実行方法 ※現在は http_post のみ対応 |
リクエスト
CommandとHeader
curl --request GET \
--url https://api.univapay.com/stores/{storeId}/charges/{chargeId}/three_ds/issuer_token \
--header 'Authorization: Bearer {secret}.{jwt}' \
--header 'content-type: application/json' \
レスポンス
CodeとHeader
- Code:
200
- Header:
Content-Type: application/json
Body
{
"issuer_token": "http://test.com/action",
"call_method": "http_post",
"payload": {
"test_parameter": "test_value"
}
"payment_type": "card",
"content_type": "application/x-www-form-urlencoded; charset=UTF-8"
}