[PHP] オンライン決済Stripeの新バージョンBeta版 Checkoutの使い方

2019-04-19PHPstripe

Stripe(ストライプ)には、「Stripe.js and Elements」を使用して自分で支払い画面を作成する方法と、「Checkout」と呼ばれる、Stripeがあらかじめ用意している支払いフォームを利用する方法がある。「Checkout」の方が簡単に導入できる。

「Checkout」の方法は、Beta版という新しいバージョンが出たのでPHPで動かしてみた。
Beta版の「Checkout」では、旧版にはあった決済処理部分の実装がなっくなったようだ。そして2つの方法が用意されている。今回は「Server integration」という方法を用いる。

旧版と新版の違い

  • 旧版は支払いフォームがポップアップだったが、Beta版は1画面表示となっている
  • Beta版では2つの方法がある
  • Beta版のが、コード量が少なく「Client integration」という方法ではサーバーサイドの実装がない
  • 3D Secure決済が行える

Beta版「Checkout」の2つ方法

(正しい名称かは分からないが)「Client integration」と「Server integration」という方法がある

Client integration

Stripeアカウントのダッシュボードに商品を登録すると、クライアント側のコード(Script)が自動生成されコピペするだけでいい
サーバー側は何もしなくていい(コード不要) 公式ガイド:Checkout Beta Migration Guide

Server integration

「Client integration」と異なり、Stripeアカウントのダッシュボードでの操作が不要
(会社とかでダッシュボードにアクセスする権限がないとこれしか使えない)

先にサーバー側でセッションを作成し、このセッションIDをクライアント側に渡すと支払いフォームが生成される

使い方

API Key取得済みであることが前提
本番モードではHTTPSになっていることが必須、テストモードではHTTPでもいい

コード

hoge.phpにアクセスすると、支払い画面が表示され、支払いが完了するとhttps://www.hoge.com/success.htmlに遷移する

hoge.php
<?php
// Stripeライブラリをロード
require_once('stripe-php/init.php');
// Secret API keyをセット
\Stripe\Stripe::setApiKey("sk_test_hoge123");
$s=\Stripe\Checkout\Session::create([
  'success_url' => 'https://www.hoge.com/success.html',
  'cancel_url' => 'https://www.hoge.com/cancel.html',
  'payment_method_types' => ['card'],
  'line_items' => [[
    'amount' => 500,
    'currency' => 'usd',
    'name' => 'sample商品',
    'description' => 'Stripeのお試し',
    'quantity' => 1,
  ]]
]);
$id=$s['id'];
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://js.stripe.com/v3/"></script>
</head>
<body>
	<script>
		// publishable API keyをセット
		var stripe = Stripe('pk_test_hogehoge');
		stripe.redirectToCheckout({
		  // 上記で生成したセッションIDをセット
		  sessionId: '<?=$id?>'
		}).then(function (result) {
		  // エラー処理
		  // `result.error.message`を使うと、ブラウザの言語に合わせたエラーメッセージを表示することができる
		});
	</script>
</body>
</html>

以下コードの説明

Stripe ライブラリをロードする

  1. ComposerでStripeライブラリをインストールした場合
    require_once('/path/to/vendor/autoload.php');
  2. Composer を使わず、手動で Stripe ライブラリをダウンロードしてサーバーに置いた場合 Stripeライブラリ ダウンロード先
    require_once('/path/to/stripe-php/init.php');

Checkout Session の作成

\Stripe\Stripe::setApiKey("secret API key");
$s=\Stripe\Checkout\Session::create([
  'success_url' => 'https://www.hoge.com/success.html',
  'cancel_url' => 'https://www.hoge.com/cancel.html',
  'payment_method_types' => ['card'],
  'line_items' => [[
    'amount' => 500,
    'currency' => 'usd',
    'name' => 'sample商品',
    'description' => 'Stripeのお試し',
    'quantity' => 1,
  ]]
]);

success_url : 支払いが完了(成功)した後、遷移するページ
cancel_url : キャンセルした後、遷移するページ (キャンセルボタンはデフォルトでついてないけど)
あらかじめ、success(とcancel)ページを用意しておく

"customer_email" パラメータをセットすると、支払いフォームのメールアドレスフィールドに自動的に入力される
Session に設定できるのパラメータ一覧

Checkout (支払いフォーム)設置

必ず、 https://js.stripe.com から読み込むこと

<script src="https://js.stripe.com/v3/"></script>

sessionId のとこに PHP で直に値を入れたが、 Ajax とかで取った方がいいのかな。 sessionId の受け渡し部分をどうしたら良いのかいまいち分からない。

stripe.redirectToCheckout({
  sessionId: '<?=$id?>'
}).then(function (result) {
     // エラー処理
     // `result.error.message`を使うと、ブラウザの言語に合わせたエラーメッセージを表示することができる
});

支払いフォーム表示

stripe_beta_checkout
stripe_beta_checkout

テストモードでは、テスト用カード番号を使って動作確認ができる テスト用カード番号一覧


3D Secure用のテストカード番号「4000 0000 0000 3063」を入れると、3D Secure Payment pageが現れる

stripe_3D_secure_payment _page
stripe_3D_secure_payment _page

Posted by Agopeanuts