Help us understand the problem. What is going on with this article?

stripe決裁機能の実装

stripeの決済機能(checkout)を実装したやり方を紹介します。
調べた結果のメモです。

ファイル構成
- index.php
- charge.php
- composer.json
- composer.lock
- .env

composer.jsonとcomposer.lockはライブラリをインストールすると自動で作成されます。

index.php
 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>
charge.php
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

suzukitakeshi19
プログラム勉強中です
https://estacionsuzuki.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away