Stripe CheckOut
CheckOutとは
Stripe Checkout用のStripe管理ページで処理する決済サービス
Stripeが提供する支払いページにリダイレクトして決済を行う
実装
JavaScript
<script src=”https://checkout.stripe.com/checkout.js”></script>
<script>
$(function(){
// 支払金額
var amount = $(‘#amount’).val();
var handler = StripeCheckout.configure({
// APIキー
key: “Stripe Privateキー”,
image: ‘https://stripe.com/img/documentation/checkout/marketplace.png’,
locale: ‘auto’,
token: function(token) {
window.onbeforeunload = function() {
return “”;
};
// サーバ情報
var form = document.createElement(“form”);
form.setAttribute(‘method’, “POST”);
form.setAttribute(‘action’, “php等サーバのメソッドパス”);
// トークン(自動生成)
var inputToken = document.createElement(“input”);
inputToken.setAttribute(‘type’, “hidden”);
inputToken.setAttribute(‘name’, “stripeToken”);
inputToken.setAttribute(‘value’, token.id);
form.appendChild(inputToken);
// 支払い者メールアドレス(クレジット情報入力子画面で入力)
var inputEmail = document.createElement(“input”);
inputEmail.setAttribute(‘type’, “hidden”);
inputEmail.setAttribute(‘name’, “stripeEmail”);
inputEmail.setAttribute(‘value’, token.email);
form.appendChild(inputEmail);
// 支払い金額
var inputAmount = document.createElement(“input”);
inputAmount.setAttribute(‘type’, “hidden”);
inputAmount.setAttribute(‘name’, “amount”);
inputAmount.setAttribute(‘value’, amount);
form.appendChild(inputAmount);
document.body.appendChild(form);
setTimeout(function() {
window.onbeforeunload = null;
form.submit();
}, 1000);
}
});
$(‘#purchase’).on(‘click’, function (e) {
// Open Checkout with further options:
handler.open({
name: “クレジット情報入力子画面タイトル”,
description: “クレジット情報入力子画面説明文”,
currency: “jpy”,
// 固定の場合は↓を指定。都度入力の場合は不要
email: ~,
// ユーザ情報を記録する機能を使用。デフォルト:true
allowRememberMe: “true”,
// 支払い金額(本例の場合は冒頭でhtmlから取得)
amount: amount
});
e.preventDefault();
});
window.addEventListener(‘popstate’, function() {
handler.close();
});
});
</script>
PHP
use Stripe\Charge;
use Stripe\Stripe;
use Stripe\Error\Card;
$post = $this->request->getData();
try {
Stripe::setApiKey(STRIPE_SK);
$token = $post[‘stripeToken’];
$amount = $post[‘amount’];
$charge = Charge::create([
’amount’ => $amount,
’currency’ => ‘jpy’,
’description’ => ‘支払い情報’,
’source’ => $token,
]);
}catch(Card $e){
$this->Flash->error(‘失敗しました。’);
$this->log($e);
$this->redirect(~);
return;
}
return;