概要
ZAFA PAYの決済ページをiframeで埋め込むことで、ユーザーをリダイレクトせずに自社サイト内で決済を完結させることができます。結果通知方式
決済結果の通知方式は2種類あります。利用する方式は加盟店ごとに事前に設定されます。変更が必要な場合はサポートにお問い合わせください。
実装手順
1. 決済リクエストを作成
通常通りPOST /v1/paymentsで決済リクエストを作成します。レスポンスのpayment_urlを取得します。
2. iframeに埋め込む
payment_urlに?mode=embeddedパラメータを追加してiframeに設定します。
postMessage方式
postMessage方式が設定されている場合、決済の結果はJavaScriptのpostMessageで親ウィンドウに通知されます。イベントを受信
イベントタイプ
payment_success
決済が正常に完了した場合に送信されます。payment_failed
決済が失敗した場合に送信されます。payment_cancel
ユーザーが「キャンセルしてサイトに戻る」をクリックした場合に送信されます。redirect_required
3Dセキュア認証などでリダイレクトが必要な場合に送信されます。このイベントは特定の決済方法でのみ発生します。決済方法によっては、認証処理が自動的に行われるため、このイベントが発生しない場合があります。
リダイレクトが必要な場合、新しいタブ/ウィンドウで開くか、親ウィンドウでナビゲートしてください。iframe内でのリダイレクトはセキュリティ上の制限により機能しない場合があります。
完全な実装例
セキュリティ考慮事項
1
オリジン検証
postMessageを受信する際は、必ず
event.originを検証してください。2
HTTPS必須
iframe埋め込みはHTTPSサイトでのみ動作します。
3
Webhookとの併用
決済結果の確定にはpostMessageだけでなく、必ずサーバーサイドでWebhookを受信して検証してください。
リダイレクト方式
リダイレクト方式が設定されている場合、決済結果は親ウィンドウへのリダイレクトで通知されます。リダイレクト先URL
決済作成時に指定したsuccess_redirect_url、failure_redirect_url、cancel_redirect_urlにリダイレクトされます。
URLパラメータ
- キャンセル時は決済実行前のため
transaction_idは含まれません。 cancel_redirect_urlが設定されていない場合、キャンセル時はfailure_redirect_urlにリダイレクトされます。
パラメータ詳細
実装例
テスト
Sandbox環境でテストする場合は、以下のテストカードを使用できます。
有効期限は将来の日付、CVCは任意の3桁を使用してください。