Stripeが面倒なのでAutumnを活用してSaaSの決済を実装してみた

Stripeはクレジットカード決済サービスとしては最も有名でもはやスタンダードとなっています。

しかし、Stripeは機能が多いぶん、仕様やドキュメントがかなり複雑で見づらく、慣れるまではなかなか難しいです。

ただ単にサブスク決済を実装したいという場合には、Stripeのドキュメントを読むのはかなり面倒です。

そこで、今回はStripe決済の実装をラクにしてくれるAutumnを活用して決済を実装してみました。

Autumnとは

Autumnは、Stripe決済の実装をラクにしてくれるサービスです。とくにSaaSのサブスクリプション決済に特化しています。

https://useautumn.com/

たとえば、いくつかのプランを用意して、それぞれのプランの利用量が決まっている場合、プランごとにかんたんに制限をかけられる機能があります。

Stripeでの登録は必須ですが、StripeのシークレットキーをAutumnに設定するだけで、あとはAutumnのドキュメントに従って実装するだけです。

裏側のStripeの決済はAutumnが管理してくれます。

Autumnの特徴

  • シンプル
  • 簡単
  • SaaS向けの機能だけがそろっていて便利
  • 基本的にはCheckout, Check, Track, Billing Portalの4つの関数でSaaS向けの決済を実装できる
  • StripeのWebhook管理が不要

実装方法

1. 環境変数の設定

Autumnのシークレットキーを環境変数に設定します。

AUTUMN_SECRET_KEY=am_sk_live_example

am_sk_live_exampleは、あなたが取得したAutumnのシークレットキーに置き換えてください。

2. プランの設定

Stripeを使う場合でも同じことをしますが、Autumnのほうがだいぶラクです。

Autumnは autumn.config.ts にプランを設定します。

(configファイルを作らなくても、AutumnのWeb管理画面でも設定できます。個人的にはそのほうがラクでした。)

configファイルは以下のステップで作成します。

  1. CLI
npx atmn init

これで autumn.config.ts が作成されます。

  1. configファイルを編集する

私はクレジット制にしたかったので以下のように書きました。

import { feature, featureItem, pricedFeatureItem, priceItem, product } from "atmn";
 
// Features
export const credits = feature({
  id: "credits",
  name: "Credits",
  type: "single_use",
});
 
// Products
export const free = product({
  id: "free",
  name: "Free Plan",
  items: [
    featureItem({
      feature_id: aiCredits.id,
      included_usage: 3,
      interval: "day",
    }),
  ],
});
 
export const lite = product({
  id: "lite",
  name: "Lite Plan",
  items: [
    priceItem({
      price: 550,
      interval: "month",
    }),
 
    featureItem({
      feature_id: aiCredits.id,
      included_usage: 100,
      interval: "day",
    }),
  ],
});
  1. configファイルをデプロイする
npx atmn push

これでプランがデプロイされます。

なお、既にAutumnのWeb管理画面でプランを作成している場合は、npx atmn pull を実行すると、Web管理画面のプランをローカルのconfigファイルに反映させることができます。

3. 決済をおこなう

Autumnは autumn.checkout で決済URLを取得して返すことができます。

import { Autumn } from "autumn-js";
 
const autumn = new Autumn({ secretKey: "am_sk_..." });
 
const { data } = await autumn.checkout({
  customer_id: "user_id_or_workspace_id",
  product_id: "lite",
});

あとはクライアントでそのURLにリダイレクトさせるだけです。

4. 利用可能かどうかをチェックする

autumn.check で利用可能かどうかをチェックできます。

import { Autumn as autumn } from "autumn-js";
 
// check feature access
const { data } = await autumn.check({
  customer_id: "user_id_or_workspace_id",
  feature_id: "credits",
});
if (!data.allowed) {
  console.log("No more credits!");
  return;
}

5. 利用量を計測する

autumn.track で利用量を記録できます。

AI相談.comでは、AI生成が成功した場合に autumn.track を呼び出して利用量を計測しています。

import { Autumn as autumn } from "autumn-js";
 
await autumn.track({
  customer_id: "user_id_or_workspace_id",
  feature_id: "credits",
  value: 1,
});

6. 請求管理ページ(カスタマーポータル)を表示する

autumn.customers.billingPortal で請求管理ページ(カスタマーポータル)のURLを取得して返すことができます。

import { Autumn as autumn } from 'autumn-js';
 
const { data } = await autumn.customers.billingPortal('user_id_or_workspace_id', {
  return_url: 'https://example.com/account'
});
 
const billingPortalUrl = data.url;

あとはクライアントでそのURLにリダイレクトさせるだけです。

Read more

リアルタイム投票アプリ5選【ライブ配信やイベントで】

リアルタイム投票アプリ5選【ライブ配信やイベントで】

ウェビナーやセミナー、社内研修を実施する際、「参加者が受け身になってしまう」「質問がなかなか出てこない」といった課題を感じたことはないでしょうか。 オンラインでの情報発信が当たり前になった今、一方的な配信だけでは参加者の満足度を高めることが難しくなっています。そこで注目されているのが、リアルタイムで参加者の意見を集約し、その場で結果を共有できる投票・質問ツールです。 本記事では、ライブ配信やイベント、研修などで活用できるリアルタイム投票アプリを5つ厳選してご紹介します。 リアルタイム投票でつながる参加者とイベント リアルタイム投票やQ&A機能を使うと、視聴者や参加者の意見を即座に集計・表示できます。講義や会議の進行を妨げず、参加者全員が自分の意見を簡単に表明できる仕組みです。 従来の挙手による質疑応答では、発言しづらいと感じる参加者も少なくありません。特にオンラインイベントでは、カメラがオンになっていることへの抵抗感や、大人数の前で質問することへのハードルが存在します。 しかし、スマートフォンから匿名で投票やコメントができる仕組みがあれば、参加者は気軽に自分の意見を伝えら

By 阿部 隼也
質問受付ツールの選び方とおすすめ5選を紹介

質問受付ツールの選び方とおすすめ5選を紹介

セミナーや講演会、社内研修などで「質問はありませんか?」と投げかけても、なかなか手が挙がらない経験はないでしょうか。参加者に有益な情報を提供しても、疑問や意見が共有されないまま終わってしまうのは、主催者にとっても参加者にとっても大きな機会損失です。 こうした課題を解決するために注目されているのが「質問受付ツール」です。参加者がスマートフォンから匿名で質問を投稿できるため、発言への抵抗感が下がり、活発なコミュニケーションが生まれます。 本記事では、質問受付ツールの基本機能から、実際に役立つおすすめツール5選、そして選定時に押さえておきたいポイントまで、実務に活かせる情報をまとめて解説します。 質問受付の現場課題 イベントやセミナーの運営で最も頭を悩ませる問題の一つが、参加者からの質問をいかに引き出すかという点です。質問タイムを設けても、会場がシーンと静まり返ってしまい、仕方なく「それでは時間になりましたので」と締めくくる光景は珍しくありません。 この背景には、日本特有の文化的要因も関係しています。大勢の前で発言することへの恥ずかしさ、自分の質問が的外れではないかという不安、他

By 阿部 隼也
オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

近年、オンラインセミナーの活用が急速に広がっています。会場のコストや移動時間を気にすることなく、全国・世界中から参加者を集められる点は大きな魅力です。 しかし、せっかく開催しても 「参加者が途中で離脱してしまう」 「ただ見ているだけで反応が薄い」 といった課題を抱えている企業も少なくありません。 本記事では、参加者のエンゲージメントを高め、成果につながるオンラインセミナーアプリの選び方と、実務に役立つ具体的なポイントを解説します。 参加者とのつながりを生むオンライン環境の設計 オンラインセミナーにおける最大の課題は、画面越しの距離感です。会場で直接顔を合わせる機会がないからこそ、参加者が「ただ見ているだけ」にならないような仕組みが求められます。適切なツールと機能選びが、参加者のエンゲージメントを左右します。 従来のオフラインセミナーでは、会場の雰囲気や参加者同士の反応が自然と生まれましたが、オンラインではそうした「空気感」が伝わりにくくなります。だからこそ、双方向のコミュニケーション機能や、参加者の行動データを活用した設計が重要になるのです。 エンゲージメントを高

By 阿部 隼也
参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

オンラインでのセミナーやイベントが日常化する中で、Zoomウェビナーを活用している企業が増えています。しかし、ウェビナーの開催で意外と頭を悩ませるのが「参加者からの質問をどう管理するか」という点ではないでしょうか。 セミナーが盛り上がり、次々と質問が寄せられるのは嬉しいことです。一方で、質問が多すぎて整理しきれない、どの質問に優先的に答えるべきか判断に迷う、といった課題も生じます。こうした問題を解決するために役立つのが、ZoomウェビナーのQ&A機能です。 本記事では、ZoomウェビナーのQ&A機能の基本的な使い方から、参加者の質問を効率的に管理する実践的なテクニックまで、詳しく解説していきます。 ZoomウェビナーのQ&A機能とは ZoomウェビナーのQ&A機能は、ウェビナー開催中に参加者が質問を投稿し、主催者側が回答を行うための専用機能です。この機能を使うことで、質問と回答がスレッド形式で整理され、効率的なコミュニケーションが可能になります。 チャット機能との違い Zoomには「チャット機能」もあるため、「Q&A機能とチャット機能の違いは何か」と疑問に思う方も多いで

By 阿部 隼也