stripeの決済機能(checkout)を実装したやり方を紹介します。
調べた結果のメモです。
ファイル構成
- index.php
- charge.php
- composer.json
- composer.lock
- .env
composer.jsonとcomposer.lockはライブラリをインストールすると自動で作成されます。
require '../../vendor/autoload.php'; //サーバー用
// require_once 'vendor/autoload.php'; //ローカル用
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$data_key = getenv('data_key');
?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>PHP Stripe Sample</title>
<body>
<form action="./charge.php" method="post">
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<?php echo $_ENV['data_key'] ?>"
data-amount="100"
data-locale="ja"
data-currency="jpy"
>
</script>
</form>
</body>
</html>
require '../../vendor/autoload.php'; //サーバー動作用
//require 'vendor/autoload.php'; //ローカル動作用
//API keyの読み込み
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$API_KEY = getenv('API_KEY');
\Stripe\Stripe::setApiKey($_ENV['API_KEY'] );
$token = filter_input(INPUT_POST, 'stripeToken');
$email = $_POST['stripeEmail'];
try {
if(!is_string($token)){
throw new Exception('文字列以外のトークンが指定されました');
}
// 顧客情報をstripeダッシュボードへ保存
$customer = \Stripe\Customer::create(array(
'email' => $email,
'description' => "サンプルの課金処理"
));
$charge = \Stripe\Charge::create(array(
"amount" => 100,
"currency" => "jpy",
"source" => $token,
"description" => "サンプルの課金処理"
));
} catch(\Stripe\Error\Card $e) {
echo "ERORR:" . $e->getMessage();
exit;
}
header("Content-type: text/html; charset=utf-8");
echo "決済が完了しました<br>";
echo "ID:" . $charge->id . "<br>";
.envファイル
# index.phpで使用
data_key = "pk_xxxxxxxxxxxxxxxxxxxxxx" //stripeのアカウントで取得して下さい
#charge.phpで使用
API_KEY = "sk_xxxxxxxxxxxxxxx" //stripeのアカウントで取得して下さい
1.サーバー環境でのcomposerのインストール
ターミナル(コマンドプロンプト)を起動してssh接続でサーバーにします。
※私はさくらレンタルサーバーを使用していました
ssh アカウント名@ドメイン名
を入力してログインします。
2.composerをインストール
curl -sS https://getcomposer.org/installer | php
stripeをサーバー上でインストールします。いろいろ試しましたが、下記が正解でした。
php composer.phar require stripe/stripe-php
つづいて.envファイルを読み込むためのライブラリを追加します。
php composer.phar require vlucas/phpdotenv
これで準備は完了です。
ここから解説します。
charge.phpのファイルの以下の部分でstripeライブラリを読み出します。
require '../../vendor/autoload.php';
ローカル環境と違って、サーバー上ではcomposerがインストールされた階層が分かりにくいのでいろいろ試した結果、このようになりました。
.envファイルはAPI keyを保護するためのファイルです。API keyを直接コードに記載するのではなく、外部ファイルに保存して読み込むというやり方を利用します。以下の部分が.envファイルの読み込み動作です。
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$API_KEY = getenv('API_KEY');
ところが、最初はうまく.envファイルのkeyが読み込めませんでした。$_ENV[ ]を利用すれば、読めるようになって次のように記載しています。
\Stripe\Stripe::setApiKey($_ENV['API_KEY'] );
最初に作ったコードで決裁自体は可能でしたが、誰が決済したのかわからないという問題があったので、コードを少し見直しました。それが以下の部分です。
$email = $_POST['stripeEmail'];
$customer = \Stripe\Customer::create(array(
'email' => $email,
'description' => "サンプルの課金処理"
));
これでstripeダッシュボードに決裁者のメールアドレスと購入商品が記載されます。
ちなみに実装したページはコチラです。
https://estacionsuzuki.com/code/code.php