PAY.jpのサブスク決済です
<!--pay2.php-->
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>定期課金フォーム</title>
<script src="https://js.pay.jp/v2/pay.js"></script>
</head>
<body>
<h1>クレジットカード定期課金フォーム</h1>
<form id="checkout-form" method="post" action="process_subscription.php">
<input type="text" name="name" placeholder="名前" required><br>
<select class="custom-select" name="plan_id" id="urlProtocol">
<option value="pln_1be7ecb688ab9a47d66d154de911">A</option>
<option value="pln_3e7c804038bde13e3da6eb32ecd2">B</option>
<option value="pln_e62711b1532b1e4b2d800b7c1d6f">C</option>
</select><br>
<input type="text" name="email" placeholder="メール" required><br>
<div id="card-element">
<!-- PAY.JPのカード要素 -->
</div><br>
<button id="card-button">定期課金を開始する</button>
</form>
<script>
const payjp = Payjp('pk_test_bedfe1946d02f78123d5f427');
const elements = payjp.elements();
const card = elements.create('card');
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;
// トークン生成を試行
console.log("Starting token creation...");
const result = await payjp.createToken(card, {
three_d_secure: true // 3Dセキュアを有効化
});
// エラー発生時
if (result.error) {
console.error("Error creating token: ", result.error.message);
alert("エラーが発生しました: " + result.error.message);
cardButton.disabled = false; // ボタンを再度有効化
} else {
console.log("Token created successfully: ", result);
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>
でprocess_subscription.php
<?php
require 'vendor/autoload.php';
\Payjp\Payjp::setApiKey(':::::::::::::::::::::::::::::'); // PAY.JPの秘密鍵を設定
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$token = $_POST['payjp-token'];
$email = $_POST['email'];
$plan_id= $_POST['plan_id'];
try {
// 1. 顧客を作成
$customer = \Payjp\Customer::create([
'card' => $token, // ユーザーのカードトークン
'email' => $email, // 顧客のメールアドレス(任意)
]);
// 2. 定期課金のサブスクリプションを作成
$subscription = \Payjp\Subscription::create([
'customer' => $customer->id,
'plan' => $plan_id,//'plan' => 'plan_id', // PAY.JP管理画面で作成したプランIDをここに入れる
]);
echo "定期課金が開始されました!";
} catch (\Payjp\Error\Card $e) {
// カードエラーが発生した場合の処理
echo "定期課金に失敗しました: " . $e->getMessage();
} catch (Exception $e) {
echo "エラーが発生しました: " . $e->getMessage();
}
}
?>