跳转到主要内容
本快速入门将带你从一个全新的 Fluz 账户完成一次预生产购买。你将注册一个应用、铸造带作用域的访问令牌,然后充值、浏览商户目录、购买礼品卡并揭示其兑换详情——全部在沙盒环境中进行,无真实资金流动。
先决条件
  • 一个 Fluz 账户——你将在下方步骤 1–2 中创建预生产 API 凭证并铸造访问令牌。
  • 请求将发送到 沙盒 GraphQL 端点。这里不会对真实卡片扣款——参见 预生产 vs. 线上环境
  • 每个 mutation 都需要唯一的 idempotencyKey(客户端生成的 UUID),以确保请求只被处理一次——参见 幂等性

开始之前

除铸造令牌(步骤 2)外,其他每次调用都是到同一个 GraphQL 端点的 POST 请求,并使用 Bearer 令牌进行认证:
你的沙盒账户自带一张预置的测试银行卡,可立即跑通整个流程。可在 Sandbox Accounts 页面 按照 测试银行卡 列表添加更多测试卡或银行账户。

完整流程

注册并创建应用

前往 fluz.app 创建 Fluz 账户,然后打开 开发者控制台 并创建一个新的 Staging 应用。凭证出现后,复制你的 clientIdclientSecret——密钥只显示一次。详细教程:准备你的账户

用凭证换取访问令牌

使用应用凭证铸造一个短期有效、带作用域的用户访问令牌。此调用请求 OAuth 服务;后续所有调用都使用返回的令牌作为 Bearer 凭证。
保存返回的 accessToken,并在下方每个请求中以 Authorization: Bearer <accessToken> 发送。令牌短期有效(expiresIn 单位为秒)——请在服务端铸造并在过期前刷新。详情参见:API 凭证
作用域控制令牌的权限——仅包含你的流程所需的范围:MANAGE_PAYMENT 用于添加资金来源与充值,LIST_OFFERS 用于浏览目录,PURCHASE_GIFTCARD / REVEAL_GIFTCARD 用于购买与揭示。
切勿在浏览器或移动端暴露 clientSecret。请在服务端铸造令牌,仅转发令牌。

向你的 Fluz 余额充值

预先充值 Fluz 余额通常能加快礼品卡购买速度,并可绕过某些频控检查。你可以通过两种方式充值:
  • 手动,通过 沙盒 Fluz 网站
  • 编程方式,通过 depositCashBalance mutation(如下)。
要通过 API 充值,你需要一个资金来源的 ID(例如 bankCardId)。运行 getWallet 并保存要使用的 ID。
从响应中获取 bankCardIdbankAccountId。通过 API 管理资金来源需要 MANAGE_PAYMENT 作用域。更多详情:查看资金来源

发起充值

使用 depositCashBalance mutation。它接收一个 DepositCashBalanceInput 对象。

输入字段

idempotencyKey
string
必填
客户端生成的唯一 UUID,保证充值只被处理一次。
amount
Float
必填
充值金额。
depositType
CashBalanceDepositType
目标余额。可为 CASH_BALANCEGIFT_CARD_BALANCERESERVE_BALANCE
Funding source
UUID
资金来源——提供 一个 bankAccountIdbankCardIdpaypalVaultId
merchantCategoryCode
Int
仅用于 GIFT_CARD_BALANCE。四位数 MCC 分类码。使用 getMccList 获取有效值。
userCashBalanceId
UUID
当选择 CASH_BALANCE 时,指定要充值的具体消费账户。
充值可能即时到账,也可能因资金来源与结算类型不同而在 2–5 个工作日内完成。响应中的 balances 对象反映你当前的可用余额。随时重查请参见 检查账户余额

浏览商户并选择一个优惠

余额准备就绪后,使用 getMerchants 获取可用商户及其返现优惠的目录。
目录默认按返现百分比排序,最高的优惠会排在最前面。

常用参数

name
String
按名称筛选商户。
paginate
OffsetInput
{ limit, offset }。默认与最大 limit20
offerTypes
OfferTypesInput
返回何种优惠类型的布尔标志,例如 { giftCardOffer: true, cardLinkedOffer: false }
filterBy
FilterByInput
在每个商户内筛选优惠,例如按 deliveryFormatURLCODESPIN_AS_CODEPIN_WITH_URL)筛选。
分页: 响应可能返回少于你请求 limit 的结果。要拉取完整目录,请持续将 offsetlimit 递增,当 API 返回空数组([])时停止。未筛选的目录很大——每天最多抓取一次,并使用 nameofferTypes 进行定向查询。
如果你已知道商户和金额,getOfferQuote 将直接返回当前可用的最佳优惠——包含实时库存信息。
slugdenomination 为必填。paymentMethod 默认为 FLUZPAY(你的 Fluz 余额),也可为 BANK_CARDBANK_ACCOUNTPAYPALAPPLE_PAYGOOGLE_PAY
返现比例会定期变动。购买前务必确认当前比例。

购买礼品卡

使用 purchaseGiftCard mutation。你可以通过两种方式指定要购买的内容:
传入 merchantSlug,Fluz 将自动应用该商户的最佳可用优惠。

输入字段

idempotencyKey
string
必填
客户端生成的唯一 UUID,确保购买只被处理一次。
offerId / merchantSlug
UUID / String
必填
二选一。merchantSlug 会自动选择最佳比例;offerId 指定特定优惠。
amount
Float
必填
购买的礼品卡面额。
Funding source
UUID / Float
支付方式。使用 balanceAmount(Fluz 余额)、bankAccountIdbankCardIdpaypalVaultId。你可以将 Fluz 余额与其他来源组合支付。
defaultToBalance
Boolean
默认值:"true"
当其他支付方式失败时回退到 Fluz 余额。设为 false 可禁用回退。
minRewardRate
Float
使用 merchantSlug 购买时可接受的最低奖励比例。
exclusiveRateId
UUID
强制使用特定的专属比例。在 getMerchants 中可找到类型为 EXCLUSIVE_RATE_OFFER 的优惠对应的值。
userCashBalanceId
UUID
要扣款的消费账户(现金余额)。
memo / transactionCategory / attachmentId
String / String / UUID
可选的费用元数据。memo 最长 255 字符;类别在首次使用时创建。参见 添加费用详情
保存响应中的 giftCardId——下一步你将用它来揭示卡片。如果购买失败,请查看 礼品卡错误代码

揭示礼品卡详情

最后,检索可用于兑换的详情(代码、PIN 和/或 URL)。
如果你在步骤 3 中刚拿到 giftCardId,可跳过本节。否则,先列出你的礼品卡:
你可以使用 statususerCashBalanceId 进行筛选,并使用 paginate 进行分页。

揭示兑换详情

使用 giftCardId 调用 revealGiftCardByGiftCardId
兑换字段因商户而异。有些卡仅返回字母数字 code 而无 pin;另一些仅返回 url。请始终基于 getGiftCards 返回的 deliveryFormat 渲染(而非 getMerchants)——商户的活动优惠在购买后可能变更,而 getGiftCards 反映卡片实际购买时的格式。
详情未立即返回? 使用指数退避轮询 revealGiftCardByGiftCardId:从 300ms 开始,每次翻倍(300 → 600 → 1200 → 2400ms…),最大延迟 180000ms(3 分钟)。一旦返回详情即停止。这样既兼顾响应性,又能降低负载并避免不必要的超时。

大功告成 🎉

你已跑通完整交易——充值余额、浏览优惠、购买礼品卡并揭示其详情。接下来,探索更多 API:

Virtual Cards

开立并管理可被网络受理的虚拟卡。

Wallets & Transfers

开设消费账户并在其间转账。

Transaction Activity

拉取、筛选并标注交易历史。

Embedded Widgets

将 Fluz 的流程直接嵌入到你的自有界面中。
想了解更多? 通过 support@fluz.app 联系我们,与专家交流或申请演示。