PHPとStripeを使ってサイト内でクレジットカード決済処理の実装方法
2025/06/19
PHPとStripeの組み合わせでWebサービスにクレジットカード決済処理を導入したかった。Stripeライブラリの導入から商品購入ページ~決済処理までの実装方法をメモ。
目次
下準備
Stripeのアカウント作成
Stripe公式サイトでアカウントを作成しておく。テスト環境を用意するだけならメールアドレスのみの登録でOK。
登録するとテスト用の「公開可能キー」「シークレットキー」が発行される。
ライブラリのインストール
サーバにSSH接続し適当なディレクトリに移動後、以下でライブラリをインストールする。
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)
<!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)
<?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のダッシュボードより確定処理を行う形になる。
サブスクリプション決済したい場合(2021/03/19追記)
「PHPとStripeで定額課金(サブスクリプション)実装する方法」をメモしたので追記。
所感
クレカ決済システムを導入したことがなく、実装にあたり「工数がかかりそう」「難しそう」等々の印象を持っていたがStripeだと非常に簡単に導入できた。
あとは月額(サブスクリプション)決済についても試しておきたいところ。
参考サイト
関連記事
-
-
Stripe Checkoutにてクレジットカード決済の際に3Dセキュア対応にする方法
先日Stripe Checkoutを用いたクレジットカード決済機能についてメモし ...
-
-
PHPとPAY.JPを用いてサイト内にクレカ決済及びキャンセル機能を実装する方法
先日PHPとStripeを用いてサイト内にクレカ決済及びキャンセル機能を実装する ...
-
-
PHPにてサイトにPayPay決済システム及び決済キャンセル機能を実装する方法
ここのところクレジットカード決済関連のメモを書いているが、他の決済方法についても ...
-
-
Stripeでキャンセル処理を行う際に「$config must be a string ~」エラーが出る場合の対応方法
Stripeにて先日メモした内容でキャンセル(返金)処理をしようとしたところ1件 ...
-
-
【2025年版】PHPとStripeを用いてサイト内にクレカ決済及びキャンセル機能を実装する方法
5年ほど前にPHPとStripeを用いたクレカ決済機能をテスト実装したが最近試し ...