はじめに
JP_Stripes Advent Calendar 2019 の 7日目を担当します、 齋藤 です。
つい最近 Stirpe Cli なるツールが気になってたので、サクッと試してみました。
Stripe Cli でできること
- サードパーティのトンネリングソフトウェアに依存せずに、Webhookを安全にテスト
- webhookイベントをトリガーした統合テスト
- リアルタイムAPIログを追跡
- APIオブジェクトの 作成 / 取得 / 更新 / 削除
Stripe Cli のインストール
各OSのパッケーマネージャ経由などでインストールできるようですが、 CircleCI などの CI/CD(継続的インテグレーション & デリバリー)にも活用できそうなので、ここはあえて Docker で試してみました。
Docker の環境が利用できる事が前提なので、未インストールの場合は先に Docker のインストールが必要となります。
公式のドキュメントでは、latest(最新版)指定ですが、後々 image のバージョン管理がしやすくする為に、あえてバージョン指定しています。
LEAP-ARROWS-001:stiripe-work kohsaku_saito$ docker pull stripe/stripe-cli:v1.2.2 v1.2.2: Pulling from stripe/stripe-cli 89d9c30c1d48: Already exists 6b280a919132: Pull complete 17cf9886c5e5: Pull complete Digest: sha256:a8677e5066994f0497e0930c1438ae6913885ebce4784432b6397a9c33dad752 Status: Downloaded newer image for stripe/stripe-cli:v1.2.2 docker.io/stripe/stripe-cli:v1.2.2 LEAP-ARROWS-001:stiripe-work kohsaku_saito$ docker run --rm -it stripe/stripe-cli:v1.2.2 -v stripe version 1.2.2
コマンド概要
コマンド | 概要 |
---|---|
listen | webhookイベントをリッスン |
trigger | テストwebhookイベントをトリガー |
logs | Stripe APIのログを参照 |
status | Stripe APIのステータスを確認 |
get | Stripeからリソースを取得 |
charges | 課金に関するリクエスト(キャプチャ、作成、リストなど) |
customers | 顧客に関するリクエスト(作成、削除、リストなど |
payment_intents | 支払い関するリクエスト(キャンセル、キャプチャ、確認など) |
Stripe Cli 試してみた
公式のドキュメントには stripe login にて一度ログインする必要がありますが、Dockerを利用しているので、使い捨てコンテナの性質と、コンテナ内からブラウザを呼び出して認証をパスするには至難の技の為(笑)、api-key を利用します。
Stripe 管理画面の 開発者 -> APIキー のページから、 シークレットキー を取得します。
※ なお、開発者モードに切り替わっているかを確認してください
実際に以下のように実行しました。
Stripe APIのステータスを確認
LEAP-ARROWS-001:stiripe-work kohsaku_saito$ docker run --rm -it stripe/stripe-cli:v1.2.2 --api-key sk_test_***************** status ✔ All services are online. As of: December 07, 2019 @ 01:27AM +00:00
お次にサンプル一覧を表示してみます。
Stripe Samples · GitHub
$ docker run --rm -it stripe/stripe-cli:v1.2.2 --api-key sk_test_***************** samples list A list of available Stripe Samples: accept-a-card-payment Learn how to accept a basic card payment Repo: https://github.com/stripe-samples/accept-a-card-payment adding-sales-tax Learn how to use PaymentIntents to build a simple checkout flow Repo: https://github.com/stripe-samples/adding-sales-tax card-payment-charges-api Learn how to accept a basic card payment with the Charges API Repo: https://github.com/stripe-samples/card-payment-charges-api charging-a-saved-card Learn how to charge a saved card Repo: https://github.com/stripe-samples/charging-a-saved-card checkout-one-time-payments Use Checkout to quickly collect one-time payments Repo: https://github.com/stripe-samples/checkout-one-time-payments checkout-single-subscription Learn how to combine Checkout and Billing for fast subscription pages Repo: https://github.com/stripe-samples/checkout-single-subscription checkout-subscription-and-add-on Uses Stripe Checkout to create a payment page that starts a subscription for a new customer Repo: https://github.com/stripe-samples/checkout-subscription-and-add-on multiple-plan-subscriptions Learn how to create a multi-plan subscription model Repo: https://github.com/stripe-samples/charging-for-multiple-plan-subscriptions payment-form-modal How to implement Stripe Elements within a modal dialog Repo: https://github.com/stripe-samples/payment-form-modal placing-a-hold Learn how to place a hold on a credit card (split auth / capture) Repo: https://github.com/stripe-samples/placing-a-hold react-elements-card-payment Learn how to build a checkout form with React Repo: https://github.com/stripe-samples/react-elements-card-payment saving-card-after-payment Learn how to save a card for later reuse after making a payment Repo: https://github.com/stripe-samples/saving-card-after-payment saving-card-without-payment How to build a form to save a credit card without taking a payment Repo: https://github.com/stripe-samples/saving-card-without-payment set-up-subscription Learn how to create a simple subscription with Stripe Billing Repo: https://github.com/stripe-samples/set-up-subscription web-elements-fpx-payment [Beta] Accept payments with FPX, a popular payment method in Malaysia Repo: https://github.com/stripe-samples/web-elements-fpx-payment web-elements-ideal-payment Build a payment form to collect iDEAL and card payments Repo: https://github.com/stripe-samples/web-elements-ideal-payment web-elements-sepa-debit-payment Accept SEPA Debit payments Repo: https://github.com/stripe-samples/web-elements-sepa-debit-payment
お次に支払い情報をjson ファイルで取得してみます。
LEAP-ARROWS-001:stiripe-work kohsaku_saito$ docker run --rm -it stripe/stripe-cli:v1.2.2 --api-key sk_test_***************** payment_intents list { "object": "list", "data": [ { "id": "pi_******************", "object": "payment_intent", "allowed_source_types": [ "card" ], "amount": 100, "amount_capturable": 0, "amount_received": 0, "application": null, "application_fee_amount": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "charges": { "object": "list", "data": [ ],
おまけ
公式のドキュメントで、yum 版でのインストール手順はありましたが、 CentOS 8 から yum に変わる新しいパッケージマネージャ dnf でもインストールできました!
手元の docker で実行したログを転載しておきます。
LEAP-ARROWS-001:stiripe-work kohsaku_saito$ docker run -it --rm centos:8 /bin/bash # # ここからの操作は CentOS 8 のコンテナ # [root@785e08a7d702 /]# [root@785e08a7d702 /]# dnf update ~~~ 省略 ~~~ Upgraded: bash-4.4.19-8.el8_0.x86_64 bind-export-libs-32:9.11.4-17.P2.el8_0.1.x86_64 dracut-049-10.git20190115.el8_0.1.x86_64 ~~~ 省略 ~~~ Installed: libxkbcommon-0.8.2-1.el8.x86_64 diffutils-3.6-5.el8.x86_64 hardlink-1:1.3-6.el8.x86_64 ~~~ 省略 ~~~ #root ユーザなので sudo 入れる必要はないですが、この後のコマンドで利用する為 [root@785e08a7d702 /]# dnf install sudo wget ~~~ 省略 ~~~ Installed: sudo-1.8.25p1-4.el8.x86_64 wget-1.19.5-7.el8_0.1.x86_64 Complete! [root@785e08a7d702 /]# wget https://bintray.com/stripe/stripe-cli-rpm/rpm \ -O bintray-stripe-stripe-cli-rpm.repo \ && sudo mv bintray-stripe-stripe-cli-rpm.repo /etc/yum.repos.d/ 2019-12-07 00:17:33 (2.24 MB/s) - 'bintray-stripe-stripe-cli-rpm.repo' saved [219] [root@785e08a7d702 /]# dnf update Failed to set locale, defaulting to C bintray--stripe-stripe-cli-rpm 1.5 kB/s | 5.4 kB 00:03 Dependencies resolved. Nothing to do. Complete! [root@785e08a7d702 /]# dnf install stripe Failed to set locale, defaulting to C Last metadata expiration check: 0:00:04 ago on Sat Dec 7 00:19:26 2019. Dependencies resolved. ============================================================================================================================================================================================================ Package Arch Version Repository Size ============================================================================================================================================================================================================ Installing: stripe x86_64 1.2.2-1 bintray--stripe-stripe-cli-rpm 5.8 M Transaction Summary ============================================================================================================================================================================================================ Install 1 Package Total download size: 5.8 M Installed size: 17 M Is this ok [y/N]: y Downloading Packages: stripe_1.2.2_linux_amd64.rpm 1.1 MB/s | 5.8 MB 00:05 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Total 1.1 MB/s | 5.8 MB 00:05 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : stripe-1.2.2-1.x86_64 1/1 warning: user does not exist - using root warning: group does not exist - using root Verifying : stripe-1.2.2-1.x86_64 1/1 Installed: stripe-1.2.2-1.x86_64 Complete! [root@785e08a7d702 /]# stripe -v stripe version 1.2.2
まとめ
サクッと簡単に Stripe CLI ツールを動かすことができました。
CI/CDとの連携や、Slack への通知、Amazon ECHO に 「入金がありました」なんて音声アナウンスなんての面白そうですね笑
現場からは以上です。