Make.comとStripe Webhookを利用して、注文内容をノーコードに取得・連携する方法


この記事では、Stripeを使った商品の決済やサブスクリプションの契約申し込み時のバックエンドのデータ処理について、Make.comを使ってノーコードに実現する方法を紹介します。Stripe Webhookを必要とする業務フローを実現させたい場合に、POCとして実験的にコードを書かずに実現する方法や、開発チームを持たない小規模なプロジェクトで実現させる際のヒントとしてお使いください。

## 決済処理は非同期処理

ECサイトやSaaSのシステムを開発する際、「決済処理部分」については、Webhookなどを利用した非同期なアーキテクチャで設計する必要があります。これは決済手段によって、「その場で決済が完了しないケース」が発生することに対応する目的があります。

例えばコンビニ決済をサポートした場合、ユーザーはサイトでの注文処理を完了した後に、コンビニエンスストアの店舗にて支払い処理を行う必要があります。システム側は、コンビニエンスストアでの支払い処理が完了したことを、ネットワークからイベントとして受け取ることで発送等の処理を開始します。

![スクリーンショット 2024-02-07 17.29.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/dfd12028-b8a8-33d6-e4db-702fb7f30440.png)
https://stripe.com/docs/payments/konbini?locale=ja-JP

銀行振込をサポートする場合も同様です、ユーザーが指定の銀行口座に振り込みを行い、その残高と請求金額の消し込みが成功してから、発送やアカウントの有効化などを行う必要があります。

![スクリーンショット 2024-02-07 17.30.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/18f4a501-893f-8368-39af-8d36559ec09d.png)
https://stripe.com/docs/payments/bank-transfers/accept-a-payment?invoices=without

また、サブスクリプションに目を向けてみると、製品トライアルからの自動解約や有料プランへの切り替えなどの業務フローが非同期に発生します。サブスクリプションの請求管理等についてはStripe内部で完結しますが、Stripeの外にあるリソース、例えばCRMを使った顧客や担当営業への連絡や、業務システム側が持つデータベースとの連携などは、サブスクリプションのステータスが変わったタイミングをトリガーに処理を走らせる必要があります。

![スクリーンショット 2024-10-11 15.44.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/d68d00a1-1209-442d-ad76-37f81b0a375e.png)

このようなアプリケーションの外からトリガーされる処理を実行する場合、通常[Webhook](https://docs.stripe.com/webhooks)を利用してシステム間の連携を行います。ここからはWebhookを使った連携を、ノーコードツールで実現する方法を紹介します。

## Make.comを利用して、ノーコードにStripeからのイベントを処理するワークフローを構築する

[Make.com](https://make.com/)(以降Make)は、Stripeと連携が可能なノーコードツールの1つです。ワークフローを視覚的に作成・編集することができるなど、サービス間の連携やデータの流れを視覚的に確認しながら作成・運用できます。このツールを使うことで、APIを開発するためのリソースがない場合でも、複数のサービスを連携させたワークフローが構築できます。

![スクリーンショット 2024-01-11 11.53.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/26930dc9-dcd3-04ab-76c0-c33d7b1e1f36.png)

今回はStripe CheckoutやPayment Linksで決済された注文情報を、Make内で取得するフローを構築してみましょう。

### Step1: MakeとStripeを連携する

まずはMakeとStripeを連携する準備から始めます。MakeでStripeを利用するには、APIキーが必要です。Stripeダッシュボード上部にあるメニューで、[開発者]をクリックしましょう。開発者ページのタブに[APIキー]がありますので、これを開きます。

![スクリーンショット 2024-01-15 13.06.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/16047e72-5df5-7ee3-58d6-30156ce0b0cc.png)

APIキーは３種類あります。今回は[シークレットキー]を利用しますので、[テストキーを表示]ボタンをクリックしましょう。

![スクリーンショット 2024-01-15 13.07.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/c39461a3-800c-9e5f-caa5-ffbcbf41be63.png)

`sk_test`から始まるAPIキーが表示されました。このAPIキーをコピーしましょう。

![スクリーンショット 2024-01-15 13.08.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/2ffd0269-180a-9eef-d6ad-b627e70a1a12.png)

:::note
**制限付きAPIキーで、より安全にStripeアカウントを運用する**
シークレットキーは顧客情報や売上データなどにもアクセスできる、非常に強力な権限を持つAPIキーです。そのため、本番環境で利用する場合は、[制限付きキー(Restricted API Key | RAK)]の利用をお勧めします。


![スクリーンショット 2024-01-15 13.10.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/ec5836f3-cc6f-02e9-3211-a4bace75bdf2.png)

今回のワークショップで使用する場合、次の権限を有効化しましょう。

|リソースタイプ|権限|Connectの権限|
|:--|:--|:--|
|Balance|読み取り|なし|
|Events|読み取り|なし|
|Checkout Sessions|書き込み|なし|
|Webhook Endpoints|書き込み||
|（それ以外のリソース）|なし|なし|
:::

#### Stripeモジュールを追加する

StripeのAPIを利用するには、MakeのStripeモジュールを利用します。画面下部の[+]ボタンをクリックして、新しいモジュール追加画面を開きましょう。

![スクリーンショット 2024-01-11 11.10.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/0eb2aac3-84fd-3cb6-5c3e-181d60885d69.png)

検索窓に[Stripe]と入力して、[Enterキー]をクリックすると、Stripeモジュールが表示されます。これをクリックしましょう。

![スクリーンショット 2024-01-11 11.10.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/3fac2b24-bfb6-fc3c-7464-47d2bd58b30c.png)

Stripeモジュールをクリックすると、追加するアクションが選べる画面が開きます。[Make an API Call]と検索窓に入力し、[Make an API Call]アクションをクリックしましょう。

![スクリーンショット 2024-01-11 11.12.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/37d4859a-a491-417f-b59e-8b80b9fb6141.png)

新しいアクションが追加されました。右上に赤いバッジが表示されていますので、クリックしてみましょう。

![スクリーンショット 2024-01-11 11.12.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/df89c807-30a1-8b70-1100-a2f2a189220b.png)

モジュールに関する注意メッセージが表示されました。[The module is not connected to the data flow]は、このモジュールがシナリオ内のデータフローに接続されていないことを伝えています。これについては、後のステップで接続を行いますので、一旦後回しにしましょう。

もう１つのメッセージ[The module is not set up]は、MakeのStripeモジュールがStripeアカウントと接続できていないことを伝えています。接続を行うため、このテキストをクリックしましょう。

![スクリーンショット 2024-01-11 11.16.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/db848cee-d0d3-b99f-7f46-eb41b7290bab.png)

**The module is not set up.**　をクリックすると、次の画面に切り替わります。[Create a connection]をクリックして、接続のためのウィザードを開きましょう。

![スクリーンショット 2024-01-11 11.16.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/540235c3-c753-b724-2e7b-5a09ff7d3304.png)

接続画面では、[Connectionの名前]と、[API Key]の2つを入力します。　**[Connectionの名前]**　はMakeでStripeモジュールを利用する際に、どのStripeアカウントと接続するかを判断するために利用します。ワークショップでテストするだけであれば、デフォルト値の[My Stripe connection]のままで進めましょう。

![スクリーンショット 2024-01-11 11.16.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/5dcff677-c06e-fa89-55a4-3e90e8ac8a9b.png)

前のステップ取得したStripeのシークレットキーを **API Key**にペーストしましょう。この状態で[Save]をクリックすると、接続設定が完了します。

![スクリーンショット 2024-01-11 11.18.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/9cb6bfb9-2722-31d2-34bd-8f1e7c26b3f7.png)

[Connection]に作成した名前のConnectionが表示されました。

![スクリーンショット 2024-01-11 11.20.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/c7a8fe51-a5c3-1413-6143-3398556a2abb.png)


### Step2: MakeからStripe Webhookを接続する

続いてMakeでStripeのWebhookが送信するイベントを受信するための準備を始めましょう。Makeでシナリオ一覧ページに移動し、[Create a new scenario]ボタンをクリックします。

![スクリーンショット 2024-01-11 15.36.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/76dbde99-1052-f3f1-2f0f-81eeb128b143.png)

新しいシナリオ作成画面が開きましたので、[+]ボタンをクリックします。

![スクリーンショット 2024-01-11 15.36.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/1dff6b7d-2d4c-5a5a-940c-a036b4e49ba4.png)

トリガーになるサービスや種類を選べます。検索フォームに[Stripe]と入力し、[Stripe]をクリックしましょう。

![スクリーンショット 2024-01-11 15.37.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/37cf3ecd-ea90-f438-3b05-f53ee085a43b.png)

今回は[Watch Events]を選択します。これでStripe上で発生したイベントをトリガーに、Makeのシナリオを実行できます。

![スクリーンショット 2024-01-11 15.37.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/7ec3e6c2-8330-9a79-0481-2f5e4af576c1.png)

[Watch Events]を使ってStripeのイベントをトリガーにする場合、[Create a webhook]ボタンが表示されます。これをクリックしましょう。

![スクリーンショット 2024-01-11 15.37.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/c500cd1c-ac06-aa47-3e04-309502479e32.png)

[Webhook name]、[Connection]そして[Group]を設定します。[Connection]は、先ほど作成したものを選択しましょう。
![スクリーンショット 2024-01-11 15.37.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/0b7cb3fb-6d67-a394-b725-597d1bb4351e.png)

Groupは、StripeのWebhookイベントを指定します。今回は次の２つを選択しましょう。

![スクリーンショット 2024-01-11 15.37.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/fe68927c-09b5-51a8-1e02-03b02d2f5727.png)

[Save]をクリックすると、Webhookの設定が完了します。

![スクリーンショット 2024-01-11 15.39.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/b23f778d-edd9-fb3c-e3f2-07bb91bdbd47.png)

:::note
Stripeダッシュボードの[開発者 > Webhook]を見ると、`make.com`ドメインのURLが設定されていることがわかります。

![スクリーンショット 2024-01-11 15.39.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/26863964-4d06-f0c0-641f-366afc57118c.png)
:::


### Stripe ワークベンチで、ブラウザからWebhookイベントを呼び出してみる

[Make an API call]と同じく、こちらもMake側でどんなデータが利用できるかを認識させる必要があります。今回はStripeダッシュボードから簡単にWebhookイベントをトリガーする方法を紹介します。

まずはMakeのシナリオ画面で、[Run Once]をクリックしましょう。

![スクリーンショット 2024-01-15 13.45.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/b20ed63a-c00a-d24f-0422-013b80039925.png)


続いてStripeダッシュボードを開きましょう。画面右下に[`>_`]のようなアイコンがありますので、クリックします。

![スクリーンショット 2024-10-11 15.58.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/93343ceb-9efe-3aee-b5da-34bfd39ef58c.png)


するとページ下部にツールバーが表示されます。これがStripeに関するデバッグやログの調査などを簡単に行うためのツール、[ワークベンチ](https://docs.stripe.com/workbench)です。

![スクリーンショット 2024-10-11 16.00.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/30767057-5b45-ce6f-4005-bae121efb646.png)

`^`アイコンをクリックすると、ワークベンチのUIが展開されます。ページ下部にシェルコマンドを入力するエリアがありますので、こレを使ってStripe CLIを利用したテストイベント送信を試してみましょう。

![スクリーンショット 2024-10-11 16.03.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/45f84af7-74cc-5599-2920-d53a988deb6c.png)

`stripe trigger checkout.session.completed`と入力してみましょう。`stripe trigger`はStripe上の任意のWebhookイベントをテストできるCLIコマンドで、今回はStripe Checkoutの決済が完了した際にトリガーされる`checkout.session.completed`をテストしています。

![スクリーンショット 2024-10-11 16.04.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/c53592cf-f002-81d7-e2c3-8a87d45a813e.png)

コマンドを入力したら、[Enterキー]を押して実行しましょう。次のようなテキストが表示されて、[トリガーが成功しました]と表示されれば成功です。

![スクリーンショット 2024-10-11 16.04.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/13793a0b-8917-f778-d982-a07582b83993.png)


Make側に戻って、先ほど作成した[Watch Events]をクリックしてみましょう。`OUTPUT`の中に`checkout.session.completed`で送信されるイベントが表示されるようになりました。


![スクリーンショット 2024-01-11 15.52.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/586c5016-f806-25ca-62c1-3d6bf43f70e7.png)

このようにして、Stripeから送信されるデータを使ったワークフローを、Makeにて構築することができます。

:::note
**`checkout.session.completed`に加えて`checkout.session.async_payment_succeeded`も利用する理由**
コンビニ決済や銀行振込などの「注文後に支払い操作をユーザーが行う決済手段」もStripe Checkoutはサポートします。その場合、`checkout.session.completed`イベントがトリガーされた時点ではまだ支払いが完了していません。
コンビニ決済や銀行振込などの非同期型決済手段での入金・支払い確認を受け付けるには、`checkout.session.completed`だけでなく`checkout.session.async_payment_succeeded`もトリガーに利用しましょう。

この場合、[Watch Events]の次のステップに[Router]モジュールを配置して、`payment_status==='paid'`以外のイベントを処理しないように設定します。

![スクリーンショット 2024-01-15 13.51.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/2f426028-803a-0a06-3971-b2dad53205dd.png)
:::

### 注文内容を取得する

`checkout.session.completed`と`checkout.session.async_payment_succeeded`イベントには、注文した商品の数量などの情報が含まれていません。そのため、[Make an API Call]モジュールを利用して「カートの中身」を取得しましょう。

![スクリーンショット 2024-01-11 15.53.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/ea8c578b-cc81-c59d-69e0-58ebd440d8de.png)

[Watch Event]（もしくは[Router]）のリンク先に新しくモジュールを作成しましょう。こちらも[Make an API Call]を選択します。

![スクリーンショット 2024-01-11 15.53.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/3651f5cb-433a-3c1e-d936-bc27f18f5e1a.png)

今回入力する内容は、次の通りです。

- Connection: [作成したもの]
- URL: v1/checkout/sessions/`[1. Object: id]`/line_items
- Method: GET
- Headers: デフォルトのまま
- Query String: デフォルトのまま
- Body: 空欄


URL内のIDについては、[Watch Events]のOutputからIDを取得しましょう。

![スクリーンショット 2024-01-11 15.50.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/20edfcb5-f860-dd9e-f360-90d61ad9907a.png)

こちらのレスポンス内容もMakeに認識させましょう。もう一度Stripeダッシュボードから`stripe trigger checkout.session.completed`を実行しましょう。

![スクリーンショット 2024-10-11 16.04.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/13793a0b-8917-f778-d982-a07582b83993.png)


これで注文商品の中身が[Make an API Call]モジュールのOutputから取得できるようになりました。

![スクリーンショット 2024-01-11 15.56.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/59ed933f-8323-d6a9-4c60-340416ea44ae.png)

## まとめ

このようにMakeを利用することで、Stripeの決済やサブスクリプション申し込み・請求サイクルに関連するWebhookイベントを処理するワークフローを、ノーコードに構築できます。決済やサブスクリプションを顧客に提供する場合、注文やサブスクリプションの申し込みフローだけでなく、請求書の未払いやトライアルの終了・不正利用アラートなど、さまざまな場面でWebhookを利用した連携が必要になります。運用フェーズに入って、新しくWebhook APIや業務フローを構築・追加することが難しいケースや、実験的にフローを作成してみたいケースなどでは、Makeのようなノーコードで実装できるツールを利用することで、素早く仮説の検証や業務の効率化が行えます。

また、Stripeワークベンチを利用することで、このようなノーコードツールのテストやデバッグについても、1ブラウザで完結することができます。ぜひMakeとStripeワークベンチを活用して、様々な業務フローの自動化・効率化に挑戦してみましょう。

## 参考

https://community.make.com/t/how-to-create-a-stripe-product-on-make-com-using-their-api-docs/18958

https://stripe.com/docs/payment-links/share

https://zenn.dev/tmitsuoka0423/articles/line-stripe-checkout-memo

https://stripe.com/docs/checkout/quickstart