Stripeの銀行振込で、顧客の振込先口座情報や口座の残高を取得する方法

Stripeの銀行振込では、顧客ごとに振込先の口座情報が発行されます。

この情報は、請求書やサブスクリプションでは顧客にメールで送付され、1回きりの注文 （Payment Intents）では、レスポンスの`.next_actions`から取得できます。

https://qiita.com/hideokamoto/items/2e5619f73cd829f48a24#%E9%8A%80%E8%A1%8C%E6%8C%AF%E8%BE%BC%E3%81%A7%E3%81%AFpaymentintent%E3%82%92%E5%BE%8C%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B

今回の記事では、SaaSやメンバーシップサービス・予約販売などで、「任意のタイミングで、口座情報を取得・表示する方法」を紹介します。

## 方法1: Dashboardから直接確認する

顧客サポートなど、コードやコマンドを実行せずに口座情報を調べたいケースでは、Stripe Dashboardを利用します。

該当の顧客詳細ページを開き、[支払い方法]の[現金残高]をクリックしましょう。

![スクリーンショット 2022-05-16 15.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/2434faf1-c409-4393-e5ca-6f5ec5c2e75f.png)

入金済みの残高と通貨情報が表示されます。

![スクリーンショット 2022-05-16 15.43.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/b65e7e05-cae4-0c7f-7bbd-74e59aba3203.png)


ここで[残高の詳細を表示]リンクをクリックすると、その顧客が振り込みに利用する口座情報が表示されます。

![スクリーンショット 2022-05-16 15.45.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/70d270d2-9eff-6d88-4c58-ed70076d6ad4.png)

入金・返金の履歴や、どの支払いに割り当てられたかの履歴も確認できます。

## 方法2: 顧客データ作成時など、任意のタイミングで取得する

もうひとつの方法は、APIを呼び出して明示的に取得する方法です。

以下のように、資金供給のためのAPIを呼び出しましょう。

```js
      const result = await stripe.customers.createFundingInstructions('cus_xxxx', {
        currency: 'jpy',
        funding_type: 'bank_transfer',
        bank_transfer: {
          type: 'jp_bank_transfer'
        }
      })
```

`result`には、その顧客に割り当てられた銀行口座情報が含まれます。

```js
    {
      "object": "funding_instructions",
      "bank_transfer": {
        "country": "JP",
        "financial_addresses": [
          {
            "supported_networks": [
              "zengin"
            ],
            "type": "zengin",
            "zengin": {
              "account_holder_name": "ストライプジャパン（カ　シュウノウダイコウ",
              "account_number": "1234567",
              "account_type": "futsu",
              "bank_code": "1234",
              "bank_name": "いろは銀行",
              "branch_code": "001",
              "branch_name": "中央支店"
            }
          }
        ],
        "type": "jp_bank_transfer"
      },
      "currency": "jpy",
      "funding_type": "bank_transfer",
      "livemode": false
    }
```

`createFundingInstructions`を複数回実行しても、`customer_id`が同一であれば、口座番号などは同じものが取得できます。

## 「入金済み・未決済」の残高を取得する

SaaSなどのサブスクリプションや予約販売などでは、顧客が入金してから決済されるまでに少し時間が空くことがあります。

その場合、「すでに十分な額が入金できているか」をUIで表示することで、顧客が不安になってサポートに問い合わせするなどのケースを減らせます。

StripeではCustomer APIを利用して、銀行振込で入金済みの金額を取得できます。

```js
const { cash_balance: cashBalance } = await stripe.customers.retrieve('cus_xxxx', {
 expand: ['cash_balance']
})
```

入金済みの金額がある場合、以下のように金額や消し込みモードの設定などが取得できます。

```js
    {
      "object": "cash_balance",
      "available": {
        "jpy": 2500
      },
      "customer": "cus_xxxx",
      "livemode": false,
      "settings": {
        "reconciliation_mode": "automatic"
      }
    }
```


# [PR] Stripe開発者向け情報をQiitaにて配信中！

- [Stripe Updates]：開発者向けStripeアップデート紹介・解説
- ユースケース別のStripe製品や実装サンプルの紹介
- Stripeと外部サービス・OSSとの連携方法やTipsの紹介
- 初心者向けのチュートリアル(予定)

など、Stripeを利用してオンラインビジネスを始める方法について週に２〜３本ペースで更新中です。

-> [Stripe Organizationsをフォローして最新情報をQiitaで受け取る](https://qiita.com/organizations/stripe)