トランザクショントークン – イシュアトークン(3-Dセキュア) – GET
3-Dセキュアのイシュアトークンオブジェクト
支払い方法がクレジットカードのリカーリングトークンを作成した後に、3-Dセキュアのイシュアトークンを取得するにはこの方法を使用します。
※このリクエストが必要なのは、トランザクショントークンをAPIで作成できる、PCI DSSに準拠している加盟店さまのみです。
オブジェクトに対するイシュアトークンのGETリクエストには以下が必要です。(括弧内は入力箇所)
- 店舗ID(URLの
{storeId}
部分) - トランザクショントークンID(URLの
{tokenId}
部分) - シークレット(Headerの
{secret}
部分) - アプリトークン(Headerの
{jwt}
部分)
トークンの3-Dセキュアの発動条件
トークンの3-Dセキュアは、加盟店さまに必要な設定がある場合のみトリガーされます。
加盟店さまのアカウントに3-Dセキュアが設定されているかどうか不明な場合は、
APIで加盟店:GETのリクエストを取得し、card_configuration.three_ds_required
から確認してください。
確認が難しい場合はサポートデスクまでお問い合わせください。
また、トークンの3-Dセキュアは token type
が recurring
の場合のみ対象です。one_time
または subscription
の場合は、課金作成時に3-Dセキュアが求められ、トークン作成時はトリガーされません。
イシュアトークンを取得する流れ
- トランザクショントークンの作成レスポンスにおいて、
data.three_ds.enabled
がtrue
で、data.three_ds.status
がpending
data.three_ds.status
がawaiting
になるまで、1秒ごとを目安に指数関数的にトランザクショントークンオブジェクトをポーリングする- 3-Dセキュアのイシュアトークンオブジェクトを取得する
データ取得後、issuer_token
のURLに対し、payload
のデータcontent_type
のフォーマット、call_method
で指定された HTTP メソッドで、クライアントのブラウザから送信する実装を行ってください。
※payload
内の内容は接続先カード会社によって異なる可能性があります。
上記方法でクライアントをリダイレクトするか、iframeを展開してください。
※独自の決済フォーム内でiframeを展開して認証を実行しようとすると、コンテンツセキュリティポリシー (CSP)の制限が設定されている場合にブロックされてしまう可能性があります。
その場合別ページにリダイレクトして実行させるなど、ブロックを回避する構築を推奨しています。
iframe を開く場合の流れ
status
がsuccessful
、failed
、error
のいずれかになるまで、3秒ごとを目安にトランザクショントークンオブジェクトをバックグラウンドでポーリングし続けます- 条件が満たされると iframe は閉じられます
- 認証の成功を確認してから課金を実行してください
認証実行後、クライアントをリダイレクトする場合の流れ
- リダイレクトエンドポイント(
data.three_ds.redirect_endpoint
)が登録されていることを確認してください - レスポンスを受信したら、
data.three_ds.redirect_id
が入力されていることを確認し、リダイレクトが登録されていることを確認してください - 認証実行後、クライアントがリダイレクトされて戻ってきたときに、アプリケーション上で処理されている正しいトランザクションを識別するメカニズムが存在することを確認してください
- リダイレクト先のURLへ
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}/tokens/{tokenId}/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"
}