LoginSignup
1
5

More than 3 years have passed since last update.

stripe決裁機能の実装

Last updated at Posted at 2020-10-22

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

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5