🍙
Stripe Connectで全商品の全料金を取得する処理(Node)
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