PAY.JPの決済をphpでやる

pay.jpの決済フォームをphpでやる


php composer.phar

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Pay.jp 3Dセキュア対応決済フォーム</title>
    <script src="https://js.pay.jp/v2/pay.js"></script>
</head>
<body><!--Pay.jpです -->
    <h1>クレジットカード決済フォーム(3Dセキュア対応)</h1>
    <form id="checkout-form" method="post" action="process_payment.php">
        <input type="text" name="name" placeholder="名前" required><br>
                <!-- 支払い金額の入力 -->
                <input type="number" name="amount" placeholder="金額を入力" required><br>

        <div id="card-element">
            <!-- PAY.JPのカード要素 -->
        </div><br>
        <button id="card-button">支払う</button>
    </form>

    <script>
        // PAY.JPの公開鍵をセットします。
        const payjp = Payjp('pk_test_bedfe1946d02f78123d5f427'); 
        const elements = payjp.elements();
        const card = elements.create('card', {
            threeDSecure: true  // 3Dセキュアを有効にするオプション
        });
        card.mount('#card-element');

        const form = document.getElementById('checkout-form');
        const cardButton = document.getElementById('card-button');

        form.addEventListener('submit', async (event) => {
            event.preventDefault();
            cardButton.disabled = true;

            // 3Dセキュアを使用してトークンを生成
            const result = await payjp.createToken(card);

            if (result.error) {
                console.error(result.error.message);
                cardButton.disabled = false;
            } else {
                const token = result.id;
                const hiddenInput = document.createElement('input');
                hiddenInput.setAttribute('type', 'hidden');
                hiddenInput.setAttribute('name', 'payjp-token');
                hiddenInput.setAttribute('value', token);
                form.appendChild(hiddenInput);

                form.submit();
            }
        });
    </script>
</body>
</html>

そして

?php

require 'vendor/autoload.php';

// PAY.JPの秘密鍵を設定
\Payjp\Payjp::setApiKey('::::::::::::::::::::');//自分のね

// POSTリクエストからトークンを取得
$token = $_POST['payjp-token'];
$amount = $_POST['amount'];

try {
    // 決済を作成
    $charge = \Payjp\Charge::create([
        'amount' => $amount,
        'currency' => 'jpy',
        'card' => $token,
        'capture' => true, // 事前にオーソリを取るならfalse(仮決済)、そのまま請求ならtrue
        'description' => '商品購入'
    ]);

    // 決済成功
    echo "決済が成功しました!";
} catch (\Payjp\Error\Card $e) {
    // カードエラーが発生した場合
    echo "決済に失敗しました: " . $e->getMessage();
} catch (Exception $e) {
    // 汎用的なエラー
    echo "エラーが発生しました: " . $e->getMessage();
}
?>

サンプルはhttps://gori-gori.net/contact/pay.phpです

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です