# Issuing カード

個人に発行されたカードを表示します。

Issuing カードは、連結アカウントに対して発行された個別の [card (カード)](https://docs.stripe.com/api/issuing/cards.md) の詳細を表示します。

Note: The following is a preview/demo component that behaves differently than live mode usage with real connected accounts. The actual component has more functionality than what might appear in this demo component. For example, for connected accounts without Stripe dashboard access (custom accounts), no user authentication is required in production.

このコンポーネントに対するアクセス許可の境界は連結アカウントレベルであり、個々のcardレベルではありません。この UI は、単一のcardにアクセスが制限されているユーザーではなく、すべてのcardsにアクセスできるユーザーに表示する必要があります。

[アカウントセッションを作成する](https://docs.stripe.com/api/account_sessions/create.md)際は、`components` パラメーターの `issuing_card` を指定して、 Issuingカードのコンポーネントを有効にします。

```curl
curl https://api.stripe.com/v1/account_sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "account={{CONNECTEDACCOUNT_ID}}" \
  -d "components[issuing_card][enabled]=true" \
  -d "components[issuing_card][features][card_management]=true" \
  -d "components[issuing_card][features][cardholder_management]=true" \
  -d "components[issuing_card][features][card_spend_dispute_management]=true" \
  -d "components[issuing_card][features][spend_control_management]=true"
```

アカウントセッションを作成して [ConnectJS を初期化](https://docs.stripe.com/connect/get-started-connect-embedded-components.md#account-sessions)すると、フロントエンドに Issuingカードのコンポーネントを表示できます。

#### JavaScript

```js
// Include this element in your HTML
const issuingCard = stripeConnectInstance.create('issuing-card');
issuingCard.setDefaultCard('{{ISSUING_CARD_ID_ID}}');
issuingCard.setShowSpendControls(true);
container.appendChild(issuingCard);
```

この埋め込みコンポーネントは、次の属性に対応します。

#### HTML + JS

| Setter                 | タイプ                  | 説明                                                                                                                                                 |
| ---------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `setDefaultCard`       | `(string) => void`   | 初回の読み込み時に表示する Issuing [Card](https://docs.stripe.com/api/issuing/cards/object.md#issuing_card_object-id) ID を設定します。                                |
| `setCardSwitching`     | `(boolean) => void`  | カードのドロップダウンセレクターを表示するかどうかを設定します。デフォルトは true です。                                                                                                    |
| `setFetchEphemeralKey` | `(function) => void` | カードの一時キーを取得するコールバックを設定します。[機密データの表示](https://docs.stripe.com/connect/supported-embedded-components/issuing-card.md#sensitive-data-display)をご覧ください。 |

#### React

| React プロパティ         | タイプ          | 説明                                                                                                                                           |
| ------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `defaultCard`       | `string`     | 初回の読み込み時に表示する Issuing [Card](https://docs.stripe.com/api/issuing/cards/object.md#issuing_card_object-id) ID。                                 |
| `cardSwitching`     | `boolean`    | カードのドロップダウンセレクターを表示するかどうか。デフォルトは true です。                                                                                                    |
| `fetchEphemeralKey` | `() => void` | カードの一時キーを取得するコールバック。[機密データの表示](https://docs.stripe.com/connect/supported-embedded-components/issuing-card.md#sensitive-data-display)をご覧ください。 |

## 支出管理を設定する

Issuing Connect の埋め込みコンポーネントを使用して Issuing コンポーネントの `showSpendControls` 属性をオンにすることで、カードの[支出管理](https://docs.stripe.com/issuing/controls/spending-controls.md)を表示したり、必要に応じて編集したりすることが可能になります。

#### JavaScript

```js
const issuingCard = stripeConnectInstance.create('issuing-card');
issuingCard.setShowSpendControls(true);
document.body.appendChild(issuingCard);
```

コンポーネントで支出管理の編集を有効にするには、[AccountSession の作成](https://docs.stripe.com/connect/connect-embedded-components/quickstart.md#server-endpoint)時に `spend_control_management: true` を機能として渡します。

```curl
curl https://api.stripe.com/v1/account_sessions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "account={{CONNECTEDACCOUNT_ID}}" \
  -d "components[issuing_card][enabled]=true" \
  -d "components[issuing_card][features][spend_control_management]=true"
```

## 機密データの表示

Issuing Connect の埋め込み型コンポーネントは [Issuing Elements](https://docs.stripe.com/issuing/elements.md) と連携して、管理者がバーチャルカードのカード番号 (PAN) と CVV またはセキュリティコードを PCI に準拠した方法で表示できるようにします。機密データは Stripe 上のオンライン iframe 内にレンダリングされるため、お客様のサーバーと接触することはありません。

コンポーネントでは、シークレットキーを公開することなく、一時キーを使用して Stripe API からカード情報を安全に取得できます。

この機能を有効にするには、以下を行う必要があります。

1. サーバーで一時キー交換を設定します。
1. 非同期コールバックをコンポーネントに渡します。

Stripe は、カードが選択または読み込まれると、Issuing カードまたは Issuing カードのリストコンポーネントの [Card ID](https://docs.stripe.com/api/issuing/cards/object.md#issuing_card_object-id) から `nonce` を生成します。その後、Stripe は、一時キーを返すコールバック関数を呼び出し、一時キーが有効である場合は `Show numbers` ボタンを表示します。

### 一時キー交換

サーバー側のエンドポイントは、[Card ID](https://docs.stripe.com/api/issuing/cards/object.md#issuing_card_object-id) と `nonce` を受け入れる必要があります。その後、Stripe を使用して一時キーを作成できます。

さまざまな言語のウェブアプリケーションフレームワークに一時キー作成エンドポイントを実装する方法を以下に示します。

#### Node.js

```javascript
// This example sets up an endpoint using the Express framework.

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.urlencoded({ extended: true }));

// Don't put any keys in code. See https://docs.stripe.com/keys-best-practices.
const stripe = require('stripe')('<<YOUR_SECRET_KEY>>');

app.post('/ephemeral-keys', async (request, response) => {
  const { card_id, nonce } = request.body;

  const ephemeralKey = await stripe.ephemeralKeys.create({
    nonce: nonce,
    issuing_card: card_id,
  }, {
    apiVersion: '2026-03-25.dahlia',
    stripeAccount: '{{CONNECTED_ACCOUNT_ID}}',
  });

  response.json({
    ephemeralKeySecret: ephemeralKey.secret,
    nonce: nonce,
    issuingCard: card_id,
  });
});
```

### 非同期コールバック

プロパティ `issuingCard` ([Card](https://docs.stripe.com/api/issuing/cards/object.md#issuing_card_object-id) ID) とさらには `nonce` プロパティを持つ、名前付き引数を受け入れる非同期関数を定義する必要があります。この関数は、前のステップで設定したエンドポイントから取得したプロパティ `issuingCard`、`nonce`、`ephemeralKeySecret` を持つ `Object` を返す必要があります。

以下は、このコールバックを実装する方法です。

#### JavaScript

```js
const issuingCard = stripeConnectInstance.create('issuing-card');
const fetchEphemeralKey = async (fetchParams) =>  {
  const { issuingCard, nonce } = fetchParams;

  // This may vary greatly based on your implementation
  const response = await myServer.getEphemeralKey({issuingCard, nonce})

  return {
    issuingCard: response.issuingCard,
    nonce: response.nonce,
    ephemeralKeySecret: response.ephemeralKeySecret
  }
}

issuingCard.setFetchEphemeralKey(fetchEphemeralKey);
document.body.appendChild(issuingCard);
```
