Stripe Checkoutでの請求書発行やCustomer Portalから1回切りの注文の領収書もDLできるようにする方法

Stripeには、７行程度のコードでリダイレクト型の決済フォームへのリンクを作る機能（Stripe Checkout）があります。

**コード**
```js
    const session = await stripe.checkout.sessions.create({
      mode: 'payment',
      line_items: [{
        price: 'price_xxxx',
        quantity: 1
      }],
      success_url: 'https://example.com',
      cancel_url: 'https://example.com'
    })

    // ExpressやNext.jsでリダイレクトさせる場合
    return res.redirect(session.url)

　　　　　　　　// API レスポンスとして返す場合
    return res.status(200).json({
      url: session.url
    })
```

**リダイレクト先のフォーム**

![スクリーンショット 2023-01-23 10.26.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/48b2701e-4fea-cdc7-d9b4-abaf2874eefe.png)

## Checkoutでの注文履歴を、Customer Portalから確認する方法

通常の組み込みでは、Stripe Checkoutを利用した**1回きりの注文履歴**は、Customer Portalから見ることができません。

これは、**2023/01時点**のCustomer Portalが、「請求書（Invoice）の履歴」を表示する機能のためです。

もし1回きりの注文についても、Customer Portalから確認できるようにさせたい場合には、有料オプションの「請求書発行機能」を利用します。

```diff_javascript

    const session = await stripe.checkout.sessions.create({
      mode: 'payment',
      line_items: [{
        price: 'price_xxxx',
        quantity: 1
      }],
+      invoice_creation: {
+        enabled: true,
+      },
      success_url: 'https://example.com',
      cancel_url: 'https://example.com'
    })
```

この３行を追加すると、Checkoutでの注文時に、裏側で請求書（Invoice）が作成されます。

![スクリーンショット 2023-01-23 10.37.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/774ba969-b17f-3d4a-74b3-561dc1aa2a0c.png)

請求書が発行されることで、Customer Portalの請求履歴にも注文内容が表示されます。

![スクリーンショット 2023-01-23 10.38.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/e3387ac4-1482-a1fd-2c4f-f66dbbe1e1ed.png)

## 一回切りの注文での、領収書の違い

通常のCheckoutセッションで発行される領収書は、**メールにて送付**されます。

![スクリーンショット 2023-01-23 10.40.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/7829f5ae-bd5d-6ae3-082c-cbcb92a6129b.png)

### 請求書を発行した場合の領収書

請求書を発行した場合、PDFで領収書をDLできます。

![スクリーンショット 2023-01-23 10.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/1ec9c3eb-eb37-d504-968d-b39fb3640a17.png)

PDFのURLは、**APIから取得する**か**Customer Portalからのリンク**で取得できます。

## 請求書・領収書の内容をカスタマイズする

請求書を発行する方法を選んだ場合、領収書や請求書に追加の情報を載せることができます。

```diff_javascript
    const session = await stripe.checkout.sessions.create({
      mode: 'payment',
      line_items: [{
        price: 'price_xxxx',
        quantity: 1
      }],
      invoice_creation: {
        enabled: true,
+        invoice_data: {
+          description: 'Invoice for Product X',
+          metadata: {order: 'order-xyz'},
+          custom_fields: [{name: 'Purchase Order', value: 'PO-XYZ'}],
+          rendering_options: {amount_tax_display: 'include_inclusive_tax'},
+          footer: 'B2B Inc.',
+        },
      },
      success_url: 'https://example.com',
      cancel_url: 'https://example.com'
    })
```

![スクリーンショット 2023-01-23 10.48.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/dd50f632-8f74-feef-472f-041764377b96.png)


### 請求書・領収書カスタマイズの例

- `custom_fields`を利用した「注文ID」や「問い合わせ番号」などの独自情報の付与
- `metadata`に社内システムと請求書・領収書を紐づける情報を設定
- `footer`や`description`で注文に対する説明や追加情報を追加

カスタマイズできるパラメータについては、以下のドキュメントをご確認ください。

https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session-invoice_creation-invoice_data

## Checkoutで請求書を発行する際は、手数料に注意

1回限りの決済にて請求書を発行する場合、**決済ごとに最大2ドル相当（取引合計額の0.4%）の手数料**が発生します。

https://support.stripe.com/questions/pricing-for-post-payment-invoices-for-one-time-purchases-via-checkout-and-payment-links

サブスクリプションについては、Stripe Billingの料金プランをご確認ください。

https://stripe.com/jp/billing/pricing

## [PR] StripeのAPIや製品アップデートを確認する方法

### APIやSDKの更新情報を確認する
APIの変更ログを、以下のURLまたはRSSフィードから確認できます。

https://stripe.com/docs/changelog

Feed: https://stripe.com/docs/changelog/api/feed.xml

### QiitaやTwitterで情報を確認する

日本語でのアップデート情報は、QiitaまたはTwitterアカウントから確認できます。

https://qiita.com/organizations/stripe

https://twitter.com/stripejapan

### Stripeコミュニティ（JP_Stripe）のイベントやライブを見る

日本のStripeユーザーが運営するコミュニティ、JP_Stripesで情報を得ることもできます。

YouTubeでのアップデート情報紹介配信（JP_Stripes What's New）や、コミュニティイベントにぜひご参加ください。

https://www.youtube.com/@jp_stripesstripe5761

https://jpstripes.connpass.com/

### メーリングリスト（英語）を購読する
また、毎月のアップデートをまとめて紹介するメーリングリスト「Stripe Developer Digest（英語）」の購読もぜひご検討ください。

https://go.stripe.global/dev-digest