PHPとStripeでクレジットカード決済処理
PHPとStripeの組み合わせでWebサービスにクレジットカード決済処理を導入したかった。以下に導入方法をメモ。
見出し
下準備
Stripeのアカウント作成
Stripe公式サイトでアカウントを作成しておく。テスト環境を用意するだけならメールアドレスのみの登録でOK。
登録するとテスト用の「公開可能キー」「シークレットキー」が発行される。
ライブラリのインストール
サーバにSSH接続し適当なディレクトリに移動後、以下でライブラリをインストールする。
1 2 |
composer require stripe/stripe-php php composer.phar require stripe/stripe-php |
以下はGithubページにバージョンの説明等が掲載されている。尚、今回検証した環境はPHP5.6となる。
https://github.com/stripe/stripe-php
テスト用クレジットカード情報
以下ページでテスト用クレジットカード情報を確認できる。
https://stripe.com/docs/testing
カード番号は記載の通り、CVCは任意の3文字、カード有効期限は未来年月を入力する。
ソース
購入ページ(index.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<!DOCTYPE html> <html lang="ja"> <head> </head> <body> <form action="charge.php" method="POST"> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="公開可能キー" data-amount="10" data-name="サイト名" data-locale="auto" data-allow-remember-me="false" data-label="購入する" data-currency="jpy"> /* data-key:公開可能キー data-amount:ダイアログでユーザに表示される金額(JPY) data-name:会社またはウェブサイト名 data-locale:言語設定 data-allow-remember-me:決済情報を保存するかどうか。trueだとチェックボックスが表示 data-label:ボタンに表示されるテキスト data-currency:金額の通貨 */ </script> </form> </body> </html> |
決済処理ページ(charge.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php require_once('./vendor/autoload.php'); \Stripe\Stripe::setApiKey('APIのシークレットキー'); $chargeId = null; try { // (1) オーソリ(与信枠の確保) $token = $_POST['stripeToken']; $charge = \Stripe\Charge::create(array( 'amount' => 100, 'currency' => 'jpy', 'description' => 'test', 'source' => $token, 'capture' => false, )); $chargeId = $charge['id']; // (2) 注文データベースの更新などStripeとは関係ない処理 // (3) 売上の確定 $charge->capture(); // 購入完了画面にリダイレクト header("Location: complete.php"); exit; } catch(Exception $e) { if ($chargeId !== null) { // 例外が発生すればオーソリを取り消す \Stripe\Refund::create(array( 'charge' => $chargeId, )); } // エラー画面にリダイレクト header("Location: error.php"); exit; } ?> |
決済完了ページとエラーページは適当にHTMLでメッセージを書けば良い。また購入ページに設置するJavaScriptのパラメータは以下ページで詳細を確認できる。
https://stripe.com/docs/legacy-checkout
その他
決済名
今回はテスト用クレカで検証した為確認のしようがないが、本番用クレカで決済した際に明細に表示される決済名がどうなるのか気になった。
調べてみるとカード会社によって異なり「オンライン決済」または「ST* 登録したサービス名」のどちらかで表示される模様。
即時決済しない場合
例えばだけど「入荷待ちの商品で購入手続き後、商品が入荷されてから発送」みたいなケースで即時に決済はしない方がいい場合は売り上げの確定はせずに、商品発送等を行ってからStripeのダッシュボードより確定処理を行う形になる。
所感
クレカ決済システムを導入したことがなく、実装にあたり「工数がかかりそう」「難しそう」等々の印象を持っていたがStripeだと非常に簡単に導入できた。
あとは月額(サブスクリプション)決済についても試しておきたいところ。
参考サイト
関連記事
-
-
PHP7が2015年11月にリリースされるらしい
PHP7で変わること ——言語仕様とエンジンの改善ポイント from Yoshi ...
-
-
PHPのチェック系関数
たまたまis_objectという関数を見かけて、 is_numericとかiss ...
-
-
PHPとajaxでチャットの作成
■ソース ・index.php <? error_reporting(E_ ...
-
-
MySQLiで直近に挿入したオートインクリメントの値と次回挿入する値を取得する方法
phpとmysqliを使っている中で次回挿入するオートインクリメントの値と、前回 ...
-
-
PHPで画像を上下反転させ保存する
やりたかった事は、下記の通り。 ・既にフォルダに保存されている画像を上下反転させ ...
-
-
phpでhtmlをpdf化。あと無理矢理画像をpdf化
画像をphpでpdf化したかった。 検索してみるもサーバー側の設定を必要とするも ...
-
-
PHPでユニークな文字列の作成
PHPでユニークな文字列を作成したかった。MySQLとかのオートインクリメントの ...
-
-
PHPでステータスコードを取得する方法
サーバーの死活監視でUptimeRobotを使っていたけど、どうも正常に監視して ...
-
-
PHPで複数の変数に同じ値を代入する
PHPのソースで $a = $b = $c = 12; みたいな見たことの無い代 ...
-
-
PHPで文字列の操作(検索、置換、切り出し)
しばしば行う文字列の操作をまとめておく。 ----- ■文字列の長さを調べる e ...