Stripe の Order で送料を設定するパターンは 4 つある。
- Free
- Flat-rate
- Callback
- Provider
Stripe Document
この情報は 2017-11-29 時点の情報であり、正確な情報は Orders API Dynamic Shipping and Tax Calculation を参照してほしい。
Order の種類
Order は sku に対し行うもので、初期状態だと送料を設定できない。
送料を設定するには https://dashboard.stripe.com/account/relay/settings の設定を変更する。
Free
送料無料。デフォルトでこれ。
Flat-rate
一律同じ送料。商品の個数や配達先に関係なく送料が同じになる。
Provider
サードパーティの配達先と連携できる。
海の向こうだとこういうサービスが整っていて、 API 投げたらよしなに送料など計算して配送してくれるようだ。
Callback
一番自由度が高く、しかし実装コストが面倒。コールバック URL を指定する必要がある。
流れとしてはこんな感じになる。
- ユーザが商品を購入する
- Stripe で Order.create する
- Stripe から送料いくらにする? って聞かれる
- 送料が設定され Order.create が完了する
Callback API
コードは雑なんだけど、ざっくりこんな感じで実装する、TypeScript で書いてある。
Stripe から飛んできた Order に対し送料を渡して Update する。
export const orderCallback = functions.https.onRequest(async (request, response) => { if (request.method.toLowerCase() !== 'post') { response.status(405).end() } const stripeOrderID: string = request.body.order.id const itemIDs: string[] = request.body.order.metadata.itemIDs const items: Item[] = itemIDs.map(itemID => { // 送料などの情報を持った Item を取得 } const shippingMethods = items.map(item => { return { id: item.id, amount:item.postage, description: item.shippingMethod, currency: 'jpy' } }) const json = { order_update: { order_id: stripeOrderID, shipping_methods: shippingMethods } } response.status(200).json(json) })
雑実装なので、 Production 入れる前にもっとエラーハンドリングしないとまずいですね。
おわり
Order するときに shipping_methods も渡せればいいのにと思うけど、まあ色々事情があるのだと思う。
ちなみにこの情報は https://stripe.com/docs を眺めていてもどこにもリンクがなく、 Stripe の設定画面を眺めていたら配送設定みたいなのがあって、そこから document にたどり着いた。
重要な情報だし最初からリンク載せておいてくれ〜...