> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fluz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# 一次性发行 100 张卡片

> 创建批量虚拟卡订单、轮询至完成，并处理部分失败——可扩展的程序化发行模式。

本快速上手通过一次请求发行 100 张虚拟卡。你将创建一个异步批量订单，在制卡过程中轮询其状态，并获取完整卡片详情——无论你发行 10 张还是 10,000 张，流程都相同。

<Info>
  **前提条件**

  * 一个**带有预发布应用的 Fluz 账户**——任一快速上手的步骤 1–2，或参见[准备你的账户](/get-started/prepare-accounts)和 [API 凭证](/get-started/api-credentials)。
  * 具备 **`CREATE_VIRTUALCARD`** scope 的令牌。
  * 有足够可用余额覆盖订单——100 张卡 × 你设置的消费限额。每个变更请求都需要唯一的 `idempotencyKey`——参见[幂等性](/concepts/idempotency)。
</Info>

## 完整流程

<Steps>
  <Step title="下批量订单" icon="layers">
    一次 `createVirtualCardBulkOrder` 调用即可创建全部 100 张卡。`orderItems` 中的每个条目都是带有 `quantity` 的卡片配置——此处为 100 张相同的单次使用拨付卡：

    <CodeGroup>
      ```graphql Mutation theme={null}
          mutation createVirtualCardBulkOrder($input: CreateVirtualCardBulkOrderInput!) {
            createVirtualCardBulkOrder(input: $input) {
              orderId
              orderStatus
            }
          }
      ```

      ```json Variables theme={null}
          {
            "input": {
              "idempotencyKey": "9f2a1c30-7b8d-4e1f-a6c2-5d3e8f901b2c",
              "offerId": "592c394e-26cc-44ac-a145-a5f81301fe77",
              "orderItems": [
                {
                  "quantity": 100,
                  "spendLimit": 25.00,
                  "lockCardNextUse": true,
                  "cardNickname": "July payout batch",
                  "primaryFundingSource": "FLUZ_BALANCE"
                }
              ]
            }
          }
      ```

      ```json Response theme={null}
          {
            "data": {
              "createVirtualCardBulkOrder": {
                "orderId": "ZTBhYTg2YmQt...",
                "orderStatus": "PENDING"
              }
            }
          }
      ```
    </CodeGroup>

    `offerId` 适用于订单中的**每一张**卡；如需混合配置，可添加更多 `orderItems` 条目（例如，80 张 × $25 的单次使用外加 20 张 × $100 的月度卡）。`lockCardNextUse: true` 使每张卡在首次扣款后自毁——这是标准的拨付模式。

    <Note>
      批量订单是**异步**的——响应是 `orderId` 和 `PENDING`，而不是卡片。请保存 `orderId`；后续所有操作都以它为引用。
    </Note>
  </Step>

  <Step title="轮询直至完成" icon="list-checks">
    使用 `getVirtualCardBulkOrderStatus` 跟踪进度。订单处于 `PENDING` 时，卡片会逐步生成：

    <CodeGroup>
      ```graphql Query theme={null}
          query getVirtualCardBulkOrderStatus($input: GetVirtualCardBulkOrderStatusInput!) {
            getVirtualCardBulkOrderStatus(input: $input) {
              orderId
              orderStatus
              successfulCardCreations
              failedCardCreations
              totalCards
              virtualCards {
                virtualCardId
                cardNumber
                expiryMMYY
                cvv
                cardHolderName
              }
            }
          }
      ```

      ```json Variables theme={null}
          { "input": { "orderId": "<ORDER_ID_FROM_STEP_1>" } }
      ```
    </CodeGroup>

    采用退避策略轮询，直到 `orderStatus` 为 `COMPLETED`（或 `FAILED`）——在等待期间，`successfulCardCreations` 会向 `totalCards` 递增，`virtualCards` 逐步填充。

    <Warning>
      响应包含**明文的完整卡号（PAN）、CVV 和到期日期**。将其视为敏感持卡人数据：仅使用 TLS、切勿记录日志、仅向授权用户展示。
    </Warning>
  </Step>

  <Step title="处理部分失败" icon="triangle-alert">
    批量订单可能部分成功：已完成订单上 `successfulCardCreations: 98, failedCardCreations: 2` 表示 98 张真实可用的卡，另有 2 张需要重试。先对比这些计数与 `totalCards` 进行对账，然后仅重新发行短缺部分——使用**新的** `idempotencyKey`，因为这是新订单：

    ```json theme={null}
        {
          "input": {
            "idempotencyKey": "<NEW_UUID>",
            "offerId": "592c394e-26cc-44ac-a145-a5f81301fe77",
            "orderItems": [{ "quantity": 2, "spendLimit": 25.00, "lockCardNextUse": true }]
          }
        }
    ```

    持续失败通常与项目限额或资金有关——请检查[虚拟卡错误代码](/features/virtual-card-error-codes)以及你的可用余额。
  </Step>
</Steps>

## 完成啦 🎉

一次请求配置并获取一百张卡，配套的轮询循环可直接用于生产。下一步：

<CardGroup cols={2}>
  <Card title="获取虚拟卡交易" icon="receipt" href="/features/get-virtual-card-transactions">
    监控整批卡的支出——每次查询最多 10 张，或按日期查询整个账户。
  </Card>

  <Card title="将卡片发送给收件人" icon="send" href="/quickstart/send-a-card">
    要分发给组织外的人员？托管领取链接可为你处理引导上手流程。
  </Card>
</CardGroup>

<Note>
  **想了解更多？** 请联系 [support@fluz.app](mailto:support@fluz.app) 与我们的专家交流或申请演示。
</Note>
