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;

API

前の記事

Stripe
API

次の記事

Stripe Connect