🍙

Stripe Connectで全商品の全料金を取得する処理(Node)

2021/10/04に公開

Stripeを使っていると、全商品の全料金を取得するなんてことはないかもですが、先日実装してみたので記事として残しておきます。

実際に実装

expressを使用してAPIを作成。

import * as cors from 'cors'
import * as express from 'express'
import Stripe from 'stripe'

const apiKey: string = '親アカウントのシークレットキー'

let status: number = 200
const stripe = (apiKey: string): Stripe =>
  new Stripe(apiKey, { apiVersion: '2020-08-27' })
  
const app = express()

app.use(cors({ origin: true }))

app.post('/stripe/get_product_and_price', (req, res) => {
  type ProductAndPrice = {
    id: string
    name: string
    description: string | null
    unit_amount: number | null
    created: number
  }
  
  const result: { product_and_price: ProductAndPrice[] } = {
    product_and_price: [],
  }

  try {
    const { accountId } = req.body

    const products = await stripe(apiKey).products.list(
      {},
      { stripeAccount: accountId }
    )
    for (const product of products.data) {
      const prices = await stripe(apiKey).prices.list(
        { product: product.id },
        { stripeAccount: accountId }
      )
      for (const price of prices.data) {
        const productAndPrice: ProductAndPrice = {
          id: price.id,
          name: product.name,
          description: product.description,
          unit_amount: price.unit_amount,
          created: price.created,
        }
        result.product_and_price.push(ProductAndPrice)
      }
    }
  } catch (error) {
    console.log(error)
    status = 405
  }

  res.status(status).json(result)
})

req.bodyで取得しているパラメータの詳細:

  • accountId: ConnectアカウントID

処理の詳細

products.list()を何も条件をつけずに実行し、特定のproductのidのデータを使ってprices.list()を実行することで、全商品の全料金を取得することができます。

また、今回はConnectアカウントのデータを取得しますので、親アカウントのシークレットキーとConnectアカウントのアカウントIDはstripe APIを実行するときに必須となります。

ProductAndPrice typeのキーを増やすことで、要件に応じたデータを返却することができるかと👍

Discussion