簡単決済「stripe」を導入してみる。

 

どうも、
先週、#JP_Stripes in 宮崎 キックオフに行ってきました!

Stripe自体は聞いたことはありましたが、
使い方やできることは全く知らなかったので、
事例など交え、とてもいい話を聞くことができました。

もくじ

stirpeのいいところ

– 初期費用不要
– 申請は契約書いらず、ペーパレス。申請〜導入までが速い!
– Apple Pay / Google Pay / 他通貨決済も導入可
– cloud (AWS) →Saasだから保守が楽
APIリファレンスがある!PHP,Ruby,Node,Go,Python対応
– クレジットカード情報「非保持化」及び「PCI DSS(準拠)」してる
↑リンク型みたいな感じの認識です。

申請は、ほぼどんなものでも通るものの、
途中で止められることもあるとのこと。
物として実在するか形に残るもののほうがいいらしいです。

stripeのいろんな機能

– sigma …sqlでデータの検索ができる
– rader …機械学習を使って怪しい人を見つけてくれる。自分でカスタムパターンもいれることができる。
– billing…定期購入に対応。

stripeの導入をやってみる!

参考:
Stripe API Reference

<導入環境>
– PHP 5.6.30
– Laravel 5.2

PHP5.6.4以上だったら、Laravel5.4いけたんですが、、、
ローカルを更新するの諦めました^^;

localは非sslでもおkです!
テスト環境のアカウントは申請直後にできました。

Githubにソース置いてます。
[ kin29/stripe_practice_laravel ]
↑ここには、ほぼcomposer installだけでできるもの置いてます。

以下では、
どうやって最初作ったか、忘れないように、
Laravel/stripeの構築の仕方memoっときます。

 

1.プロジェクト作成

$ composer create-project laravel/laravel stripe_practice_laravel --prefer-dist "5.2.*"

–prefer-distなので、指定なしのデフォルトのgit clone でなく
zipで取ってくる(git clone より高速です)

 

2.stripe/stripe-phpの導入

// $composer require [package name]:[version]
$ composer require stripe/stripe-php:^6.17

 

3.フロント系いらんので消しました。

(package.json/gulpfile.jsとか)

 

4.envの調整
DBとか使わないので、stripeのAPIキーを環境変数として追記のみ

.env

STRIPE_PUBLIC_KEY=test
STRIPE_SECRET_KEY=test

 

5.カード情報入力フォームをつくる。
resources/views/welcome.blade.phpにthanksへのformを追記
参考:Card Payments Quickstart

 

6.バックエンドをつくる
app/Http/route.phpに以下を追記

Route::post('/thanks', function () {

    \Stripe\Stripe::setApiKey(getenv('STRIPE_SECRET_KEY'));

    try {
        $charge = \Stripe\Charge::create(array(
            "amount" => 100,
            "currency" => "jpy",
            "source" => $_POST['stripeToken'],
            "description" => "100yen pay"
        ));
    } catch(\Stripe\Error\Card $e) {

    }

    return view('thanks');
});

 

7.動かしてみる。→エラー調整

この時点でだいたい動きましたが、POSTすると以下のエラーが出てきました。

 

TokenMismatchException in VerifyCsrfToken.php line 67:

app/Http/Middleware/VerifyCsrfToken.php

に以下を追記することで、
CSRF保護の対象外にすることができます。
ただし、クロス・サイト・リクエスト・フォージェリ(CSRF)保護の対象外となりますので、吟味することも大事だと思います!

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'thanks' //追記
    ];

 

クロス・サイト・リクエスト・フォージェリ(CSRF)
… 脆弱性を利用して、悪意のある攻撃をすることだそうで、
信頼できるユーザーになり代わり、認められていないコマンドを実行するとのこと。

Laravelでは、セッションごとにCSRF「トークン」を自動的に生成していて、
リクエスト時に、このトークンを送信して、認証済みのユーザーかを確認するために利用しているとのこと。

なので、HTMLフォームを定義する場合はいつでも、隠しCSRFトークンフィールドをフォームに埋め込んで、
CSRF保護でのチェックできるようにしなければならないとのこと。

 

 

8.動かしてみる。(完成)
カード決済できたー!

Stripeの管理画面にも、疎通確認できました!

 

stripeとっても簡単!

ログもあるし、デバックしやすかったです!