[ Stripe ] Stripe Cli を Docker で試してみた

[ Stripe ] Stripe Cli を Docker で試してみた

はじめに

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 に 「入金がありました」なんて音声アナウンスなんての面白そうですね笑

現場からは以上です。

参考文献