1

チェックアウト カードの支払いプロバイダーによって 3D セキュア認証が完了した後、リダイレクトページと通信する必要があります。親ウィンドウの場所を変更したくないので、このような設定をしています

/payment.tsx

これは、3DS Auth URL への新しいウィンドウを開くページです

export default function IndexPage() {
    useEffect(() => {
        //redirect will be replaced by 3d secure url
        // which after 3ds completes will redirect to /redirect
        const redirectWindow = window.open('/redirect')

        //I assume message posted by /redirect will be recieved here
        window.addEventListener('message', (event) => {
            //  if (typeof event.data === 'object' && 'key' in event.data) {
            if (typeof event.data === 'object' && 'key' in event.data && event.data.key === 'redirect') {
                console.log(event.data, 'Received From Redirect Window')
                redirectWindow?.close()
            }
        })
    }, [])

    return <div>Waiting for Redirect to send message</div>
}

次のページ/redirectは、成功または失敗後に 3DS が戻る場所です。

import { useEffect } from 'react'

export default () => {
    useEffect(() => {
        window.addEventListener('message', (event) => {
            console.log(event)
            event.source?.postMessage({ key: 'redirect', message: 'Hi' }, '*')
            //}
        })
    }, [])
    return <div>Transaction Successfull I should be closed by my Parent Window</div>
}

これの目的は、Checkout 3DS が完了してアプリケーションに戻ると、/payment にメッセージを送信して /redirect ウィンドウを閉じることです。このセットアップは実行可能なアプローチではない可能性があるため、フィードバックを歓迎します。しかし、現時点では /redirect から送信されたメッセージを取得できないか、ウィンドウを閉じることができません。

サンプルコードはCodeSandboxにあります

4

0 に答える 0