Site icon image World Hacker(ぎょうざブログ)

Think Different, Connect Dots for Line.

【Tips - Stripe】実例でわかるシリーズ

みなさんどうも、こんばんみ~。ぎょうざです。

はい、今更ながら決済機能をWebアプリケーションに実装するのに便利なインフラサービスである

Stripe(ストライプ)を利用する際に、ぎょうざが躓いたところを備忘録として記録しておきます。

同じようなケースあるいは現象で困っている方の参考になれば幸いです。

【目次】

<Useful>

<Error>

▶ [Error] Failed to POST: Post "http://localhost:4242/stripe_webhooks": dial tcp [::1]:4242: connectex: No connection could be made because the target machine actively refused it.
  • 現象:Stripeに関するAPIを呼び出したとき、指定したURL先のエンドポイントが起動されていない、旨のエラーがターミナル上に表示される
  • 原因:stripe listener --forward-to 以下で指定したURLが、各自が実装したAPIのエンドポイントURL(例:”localhost:3000/api/webhook”)になっていない
  • 解決策:ターミナル上でstripe listen --forward-to "各自が実装したAPIのエンドポイントURL" 。公式ドキュメントのstripe listener 文言をそのままコピペしていないか、改めて確認してみましょう!

<Warn>

▶ (請求する側が注意したいこと)Webアプリ上はUSD表記でも、内部的にはセント換算で請求される
  • 現象:ドル換算で請求したい。
  • 原因:Stripeの仕様上、USDの請求額は数値がセント換算なので、ドル表記どおりの請求だと思っていると、実際には表記の0.01倍の請求になってしまう→請求する側に不利益が生じてしまう可能性がある。
  • 解決策:Webアプリ上のドル表記価格の値を、実装するソースコード上では内部的に100倍する
    // USD通貨で、1回きりの請求の場合の実装例
    const line_items: Stripe.Checkout.SessionCreateParams.LineItem[] = [
      {
        quantity: 1,
        price_data: {
          currency: 'USD',
          product_data: {
            name: product.title,
            description: product.description!,
          },
          // 各自で設定したUSD表記の価格に100を掛け算するのを忘れずに!!!
          unit_amount: Math.round(product.price! * 100),
        },
      },
    ];

▶ (請求する側が注意したいこと)決済手段に応じて利用手数料が掛かる (2024/10/13時点)
Image in a image block
  • 現象:決済額が手数料として引かれるタイミング(調べ中)
  • 原因:(調べ中)
  • 解決策:(調べ中)

〆の一言

Stripeは、決済機能をWebアプリケーションなどへ組み込むうえで便利です。
サブスクリプションや買い切り、異なる対応通貨など、決済形式を細かく設定したい方にもおすすめです。

ここまで読んでいただき、ありがとうございました。

以上、ぎょうざでした。