Amazon Pay キャンペーンポップアップ 設置手順ガイド

🤖 AIエージェント / LLM の方へ: このページには機械可読な Markdown 版があります。解析・参照には以下をご利用ください。
walletRewardSetupGuide.md

本資料は、従来のAmazon Payフローを活用しながらキャンペーン応募ポップアップを表示し、シームレスにエントリーを促す仕組みの設置手順です。サンプルコードや事業者様側でご対応いただく作業(TODO)を記載しています。

▶ デモページ(カート・支払方法選択画面のサンプル)を開く

1. 概要

2. ファイル構成

ファイル役割
amazonpayWalletReward.jsポップアップ生成スクリプト(本体)

3. 設置手順

本ガイドの「作業対象」は次の2つです。
amazonpayWalletReward.js:ダウンロードして配置するポップアップ生成スクリプト本体
② 設置対象ページ:事業者様のポップアップ設置対象ページ(カート画面/支払方法選択画面)のフロント側

ステップ 1:ポップアップ生成スクリプトの配置(作業箇所:設置対象ページ)

▼ ポップアップ生成スクリプト(amazonpayWalletReward.js)をダウンロード

上記の「ダウンロード」ボタンから amazonpayWalletReward.js を取得し、ポップアップ設置対象ページのフロントエンドに配置してください。

ステップ 2:ポップアップ表示制御スクリプトの組み込み(作業箇所:設置対象ページ)

発動条件(パターンA / パターンB)に応じて、以下のいずれかのスクリプトを組み込んでください。

<!-- ① ポップアップ生成スクリプト(amazonpayAssist を定義)と Amazon Pay 公式スクリプトを読み込む -->
<script type="text/javascript" src="amazonpayWalletReward.js"></script> <!-- [TODO(事業者様): 配置先パスに合わせる] -->
<script src="https://static-fe.payments-amazon.com/checkout.js" type="text/javascript" charset="utf-8"></script> <!-- amazon.Pay を提供 -->
<script type="text/javascript" charset="utf-8">
    document.addEventListener("DOMContentLoaded", function () {
        // 発動トリガーとなる「Amazon Payで購入」ラジオボタン
        const targetRadio = document.querySelector('[id="amazon-pay"]'); // [TODO(事業者様): 自社のラジオボタンidに合わせる]

        // ポップアップ内 Amazon Pay ボタンの活性/非活性を切り替える(エントリー前は押せないようにする)
        function toggleAmazonPayButton(elem, enable) {
            elem.inert = !enable;
            elem.style.opacity = enable ? '1' : '0.5';
            elem.style.pointerEvents = enable ? 'auto' : 'none'; // Safari対策
        }

        // 「Amazon Payで購入」選択時にポップアップを表示し、Amazon Pay ボタンを描画する
        function showAmazonPayPopup() {
            if (!targetRadio || !targetRadio.checked) return; // 選択時のみ発動

            // amazonpayAssist() は amazonpayWalletReward.js で定義。引数はポップアップ内に生成するボタンコンテナのid。
            // fadeIn(秒) で指定秒後にポップアップを表示(内部で setTimeout → 表示)。
            amazonpayAssist('AmazonPayButtonOnPopup').fadeIn(0.2); // [TODO(事業者様): 表示タイミング(秒)を調整]
            renderApayButton();
        }

        // ポップアップ内に生成された #AmazonPayButtonOnPopup へ Amazon Pay ボタンを描画
        function renderApayButton() {
            // ボタンパラメータ・payload・署名生成処理は既存の Amazon Pay 実装をそのまま流用可能。
            // 本キャンペーンで変更するのは placement と merchantMetadata.customInformation の2点のみ(トラッキング用)。
            amazon.Pay.renderButton('#AmazonPayButtonOnPopup', {
                merchantId: 'XXXXXXXXXX',   // [TODO] セラーセントラルの Merchant ID
                ledgerCurrency: 'JPY',
                sandbox: true,              // [TODO] 本番は false
                checkoutLanguage: 'ja_JP',
                productType: 'PayOnly',     // 支払方法選択型のポップアップは PayOnly
                placement: 'Home',          // [TODO] 通常導線と別値にしてトラッキング(payload外なので署名再生成は不要)
                buttonColor: 'Gold',
                createCheckoutSessionConfig: {
                    payloadJSON: '<?php echo $payloadJSON ;?>', // 既存payload + merchantMetadata.customInformation(キャンペーンコード)
                    signature:   '<?php echo $signature ;?>',   // [TODO] customInformation追加後のpayloadで署名を再生成
                    publicKeyId: '<?php echo $publicKeyId ;?>'
                }
            });
            // 描画直後にエントリー状態(termsAgreed)を反映し、ボタンの活性/非活性を初期化
            setTimeout(function () {
                const apayButtonElem = document.getElementById('AmazonPayButtonOnPopup');
                const currentCheckbox = document.querySelector('input[name="termsAgreed"]');
                if (apayButtonElem && currentCheckbox) {
                    toggleAmazonPayButton(apayButtonElem, currentCheckbox.checked);
                }
            }, 200);
        }

        // 【JS側と連動】ポップアップ内の「エントリーする」ボタン押下時、amazonpayWalletReward.js が
        // name="termsAgreed" の隠しチェックボックスを切り替えて change を発火する。これを受けて活性/非活性を制御。
        document.addEventListener('change', function (e) {
            if (e.target && e.target.name === 'termsAgreed') {
                const apayButtonElem = document.getElementById('AmazonPayButtonOnPopup');
                if (apayButtonElem) toggleAmazonPayButton(apayButtonElem, e.target.checked);
            }
        });

        // 初期表示時の選択状態を確認し、以降の選択変更も監視
        if (targetRadio) {
            showAmazonPayPopup();
            targetRadio.addEventListener('change', showAmazonPayPopup);
        }
    });
</script>
<!-- ① ポップアップ生成スクリプト(amazonpayAssist を定義)と Amazon Pay 公式スクリプトを読み込む -->
<script type="text/javascript" src="amazonpayWalletReward.js"></script> <!-- [TODO(事業者様): 配置先パスに合わせる] -->
<script src="https://static-fe.payments-amazon.com/checkout.js" type="text/javascript" charset="utf-8"></script> <!-- amazon.Pay を提供 -->
<script type="text/javascript" charset="utf-8">
    document.addEventListener("DOMContentLoaded", function () {
        // 【カート表示型】条件を設けず、カート画面の表示時点で必ずポップアップを表示する

        // ポップアップ内 Amazon Pay ボタンの活性/非活性を切り替える(エントリー前は押せないようにする)
        function toggleAmazonPayButton(elem, enable) {
            elem.inert = !enable;
            elem.style.opacity = enable ? '1' : '0.5';
            elem.style.pointerEvents = enable ? 'auto' : 'none'; // Safari対策
        }

        // amazonpayAssist() は amazonpayWalletReward.js で定義。引数はポップアップ内に生成するボタンコンテナのid。
        // fadeIn(秒) で指定秒後にポップアップを表示(ページ表示時点で即発動)。
        amazonpayAssist('AmazonPayButtonOnPopup').fadeIn(0.2); // [TODO(事業者様): 表示タイミング(秒)を調整]

        // ポップアップ内に生成された #AmazonPayButtonOnPopup へ Amazon Pay ボタンを描画
        // ボタンパラメータ・payload・署名生成処理は既存の Amazon Pay 実装をそのまま流用可能。
        // 本キャンペーンで変更するのは placement と merchantMetadata.customInformation の2点のみ(トラッキング用)。
        amazon.Pay.renderButton('#AmazonPayButtonOnPopup', {
            merchantId: 'XXXXXXXXXX',   // [TODO] セラーセントラルの Merchant ID
            ledgerCurrency: 'JPY',
            sandbox: true,              // [TODO] 本番は false
            checkoutLanguage: 'ja_JP',
            productType: 'PayAndShip',  // カート表示型は配送あり(PayAndShip)
            placement: 'Home',          // [TODO] 通常導線と別値にしてトラッキング(payload外なので署名再生成は不要)
            buttonColor: 'Gold',
            createCheckoutSessionConfig: {
                payloadJSON: '<?php echo $payloadJSON ;?>', // 既存payload + merchantMetadata.customInformation(キャンペーンコード)
                signature:   '<?php echo $signature ;?>',   // [TODO] customInformation追加後のpayloadで署名を再生成
                publicKeyId: '<?php echo $publicKeyId ;?>'
            }
        });

        // 描画直後にエントリー状態(termsAgreed)を反映
        setTimeout(function () {
            const apayButtonElem = document.getElementById('AmazonPayButtonOnPopup');
            const currentCheckbox = document.querySelector('input[name="termsAgreed"]');
            if (apayButtonElem && currentCheckbox) toggleAmazonPayButton(apayButtonElem, currentCheckbox.checked);
        }, 200);

        // 【JS側と連動】ポップアップ内の「エントリーする」ボタン押下時、amazonpayWalletReward.js が
        // name="termsAgreed" の隠しチェックボックスを切り替えて change を発火する。これを受けて活性/非活性を制御。
        document.addEventListener('change', function (e) {
            if (e.target && e.target.name === 'termsAgreed') {
                const apayButtonElem = document.getElementById('AmazonPayButtonOnPopup');
                if (apayButtonElem) toggleAmazonPayButton(apayButtonElem, e.target.checked);
            }
        });
    });
</script>

ステップ 3:TODO 項目の設定

上記スクリプトおよびamazonpayWalletReward.js[TODO(事業者様): ...] を、自社環境に合わせて設定してください(詳細は「5. 事業者様 対応 TODO 一覧」を参照)。

ステップ 4:動作確認

選択したパターンに応じてポップアップが表示されること、エントリー後に Amazon Pay ボタンが活性化して決済に進めることを確認してください。テスト環境では sandbox: true のままご確認ください。

4. キャンペーン対象者の特定方法

Amazon Pay のセラーセントラルで取得できるトランザクションレポートで、customInformation がセットされている注文を事業者様側で確認できます。Sandbox・本番環境ともに、決済後すぐに確認可能です。

カラム内容
AmazonOrderReferenceIdAmazon のリファレンスID
SellerOrderId販売事業者注文番号(=事業者様の注文番号)
OrderTotalAmazon Pay の注文金額
CustomInformationセットされたキャンペーンコード文字列
OrderReferenceStatus注文のステータス(Open, Closed, Canceled など)

5. 事業者様 対応 TODO 一覧

Amazon Pay ボタンの一般的な設定値(merchantId / publicKeyId / payloadJSON / 署名生成処理 / リターンURL 等)は、既存の Amazon Pay 実装のものをそのまま流用してください。ボタンの動作自体は変わりません。本キャンペーンで変更いただくのは、トラッキング用の 2 パラメーター(placementmerchantMetadata.customInformation)のみです。

5.1 トラッキング用パラメーター(★要対応)

箇所作業対象内容
placement設置対象ページトラッキング用に、通常('Cart' 等)とは別の値(例: 'Home')をセット。
merchantMetadata.customInformation設置対象ページ(payload 生成箇所)payload 内にキャンペーンコードをセット。※ payload を変更すると署名も変わるため、追加後の payload に対し signature の再生成が必要

5.2 ポップアップ設置(カート画面 / 支払方法選択画面)

箇所作業対象内容
スクリプト読み込みパス設置対象ページ配置した amazonpayWalletReward.js のファイルパスを設定
発動条件設置対象ページパターンA(カート表示時点で必ず表示)または パターンB(targetRadio を「Amazon Payで購入」の id に合わせる)を選択
表示タイミング設置対象ページfadeIn(0.2) の秒数を UX 要件に合わせて調整

5.3 ポップアップ生成スクリプト(amazonpayWalletReward.js

箇所作業対象内容
バナー画像amazonpayWalletReward.js事業者様側でバナー画像を作成し、img.src のファイル名/URL を差し替えてください(現状は仮画像 https://d487dy88y87x7.cloudfront.net/walletRewardPlaceholder.png
※サイズの厳密な指定はありませんが、目安として横400 × 縦200〜300px 程度(横長)を推奨します。ポップアップ幅に合わせて自動で表示されます。
細則リンクamazonpayWalletReward.js応募規約・キャンペーン細則ページの URL を設定してください(現状は仮ページ campaignTerms.html
文言・スタイルamazonpayWalletReward.js(既定値)/設置対象ページ(option で上書き)ポップアップ内の文言や配色は option.styles で上書き可能。必要に応じて調整

5.4 細則ページ

応募規約・キャンペーン細則ページは事業者様側でご用意ください。 デモの campaignTerms.html は参考用のプレースホルダーです(配布物ではありません)。ポップアップ内の細則リンク先を、事業者様側でご用意いただいたページの URL に設定してください。

6. Amazon Pay ボタン押下後の挙動について

すでに稼働中の通常 Amazon Pay ボタンと比べ、戻り値・パラメーター・ボタンの動作自体に変更はありません。ポップアップ上のAmazon Payボタンから既存のAmazon Payフローに合流します。

キャンペーン対象者の特定(通常購入者との色分け)のためだけに、以下の 2 パラメーターを変更します。

これらにより、Amazon 側のログ・トランザクションレポートで通常購入者とキャンペーン応募者を色分けできます(確認方法は「4. キャンペーン対象者の特定方法」を参照)。

7. 補足

当サンプルコードの利用規約