whalet
  1. Embedded Payment
whalet
  • 接入指南
  • 附录
  • 认证授权(Authorize)
    • 获取令牌
      POST
    • 文件上传
      POST
  • 连通性验证(Connectivity)
    • 通知(Webhook)
      • 连通性验证通知(connectivityNotify)
    • 连通性验证(connectivity)
      POST
  • 用户入网(UserOnboarding)
    • 入网申请(Onboarding)
      • 用户入网申请(User Onboarding Apply)
    • 补充资料(EDD)
      • EDD补充资料查询(Edd Replenish Query)
      • EDD补充资料提交(Edd Replenish Submit)
    • 通知(Webhook)
      • 入网结果通知(User Onboarding Result Notification)
      • EDD补充资料通知(Edd Replenish Notify)
      • EDD补充资料结果通知(Edd Replenish Result Notify)
  • 收款(Payee)
    • 持有人(Card Holder)
      • 持有人申请(Card Holder Apply)
      • 持有人查询(Card Holder Query)
      • 持有人银行账户申请(Card Holder Beneficary Apply)
      • 持有人银行账户查询(Card Holder Beneficary Query)
    • 开卡(Virtual Account)
      • 外贸收款(B2B)
        • 申请收款卡(Virtual Account Apply for B2B)
        • 获取外贸收款渠道(Channel Banks Query for B2B)
      • 电商收款(B2C)
        • 申请收款卡(Virtual Account Apply for B2C)
        • 获取收款卡平台配置(Platform Query for B2C)
        • 获取开通收款卡持有人(Card Holder Query for B2C)
        • 查询开卡数(Card number Query for B2C)
        • 绑定/添加店铺(Bind/Unbind Shop for B2C)
        • 注销收款卡((Card Cancel for B2C))
        • 查询收款卡详情(Card Detail Query for B2C)
        • 查询店铺(Shop Query for B2C)
        • 查询收款卡(Card Query for B2C)
        • 申请银行证明信(Bank Letter Apply For B2C)
    • 订单(Order)
      • 外贸收款(Trade Order)
        • 订单申请(Trade Order Apply for B2B)
        • 订单详情(Trade Order Query Detail for B2B)
        • 分页查询(Trade Order Query List for B2B)
        • 关联外贸订单(Trade Order Bind Apply for B2B)
      • 电商收款(Shop Order)
        • 上传订单(Shop Order Upload for B2C)
    • 通知(Webhook)
      • 模拟入账通知Mock(mockPayeeNotify)
      • 持有人结果通知(Card Holder Result Notification)
      • 持有人银行账户结果通知(Card Holder Beneficary Result Notify)
      • 申请收款卡结果通知(Virtual Account Notify for B2C)
      • 收款到账通知(Payee Received Notify)
      • 关联外贸订单结果通知(Trade Order Bind Notify for B2B)
      • 绑定/添加店铺结果通知(Shop Bind/Unbind/Add Result Notify for B2C)
      • 注销收款卡结果通知(Card Cancel Result Notify for B2C)
  • 收单(Acquiring)
    • 接入方式
    • 支付方式
    • 测试数据
    • 店铺(Shop)
    • Hosted Payment Page
      • 创建支付链接
      • 查询交易信息
    • Embedded Payment
      • 接入方式
      • 创建支付会话
        POST
      • 创建支付
        POST
    • Direct Payments
      • 获取卡详情
      • 创建付款
      • 获取银行列表
    • 退款(Refund)
      • 退款申请
    • 拒付(Chargeback)
      • 拒付详情
      • 查询拒付原因
      • 拒付申诉
      • 拒付接受
    • 通知(Webhook)
      • 添加店铺结果通知
      • 申请店铺支付方式结果通知
      • 支付结果通知
      • 退款结果通知
      • 拒付产生通知
      • 拒付结果通知
    • 插件(Plugin)
      • WordPress/Woocommerce插件安装说明
      • Shoplazza安装说明
  • 鲸卡(VCC)
    • 鲸卡钱包(Account/Wallet)
      • 开通鲸卡钱包
      • 鲸卡钱包查询
      • 鲸卡钱包充值
      • 钱包交易查询
    • 鲸卡管理(Card)
      • 可用卡bin查询
      • 创建鲸卡
      • 查询鲸卡信息
      • 注销鲸卡
      • 锁定鲸卡
      • 解锁鲸卡
      • 鲸卡充值
      • 鲸卡提现
      • 鲸卡交易查询
    • 通知(Webhook)
      • 创建鲸卡通知
      • 注销鲸卡通知
      • 锁定鲸卡通知
      • 解锁鲸卡通知
      • 鲸卡交易通知
      • 鲸卡钱包交易通知
  • 购买(Buy)
    • 通知(Webhook)
      • 申请支付结果通知(Pay Result Notify)
    • 申请支付(Pay Apply)
    • 确认支付(Pay Confirm)
  • 出金(Payout)
    • 通知(Webhook)
      • 申请提现/付款结果通知(Payout Result Notify)
      • 绑定受益人银行账户结果通知(Benificiary Account Result Notify)
    • 申请提现/付款(Payout Apply)
    • 确认提现/付款(Payout Confirm)
    • 查询汇率(Rate Inquiry)
    • 查询受益人银行账户字段信息(Beneficiary Account Fields Query)
    • 绑定受益人银行账户(Benificiary Account Apply)
    • 删除受益人银行账户(Benificiary Account Delete)
    • 查询支持的受益人银行账户国家/地区(Beneficiary Account Country Query)
  • 交易(Trade)
    • 交易查询(Trade Query)
      • 收款记录(Payee Query)
      • 提现记录(Withdraw Query)
      • 付款记录(Payment Query)
      • 支付记录(Pay Query)
    • 补充资料(ReMaterials)
      • 通知(Webhook)
        • 交易补充资料通知(Trade Replenish Notify)
        • 交易补充资料结果通知(Trade Replenish Result Notify)
      • 交易补充资料提交(Trade Replenish Submit)
  • 钱包(Wallet)
    • 币种余额(Currency Balance)
    • 平台余额(Platform Balance)
  • Mock
    • 入账通知Mock(mockPayeeNotify)
  • 数据模型
    • Schemas
      • StorageFile
      • WhaletCardId
      • IndustryCode
      • Address
      • WhaletCardAddress
      • AcquiringShopStatus
      • WhaletCardInfo
      • AcquiringShopInfo
      • EddItem
      • WhaletCardTransactionInfo
      • AcquiringShopMethodInfo
      • PayFac
      • WhaletCardBin
      • ActualBeneficiary
      • WhaletCardBinVerification
      • AcquiringShopMethodStatus
      • EddItem1
      • WhaletCardBinCardLimit
      • Edd
      • WhaletCardIdTrans
      • TradeAcquiringChargebackStatus
      • Shop
      • WhaletCardAccountTransactionInfo
      • TradeAcquiringChargebackHandleType
      • TradePayeeOrder
      • WhaletCardAccountInfo
      • TradeAcquiringHandleStatus
      • Bank
      • WhaletCardTransactionType
      • CardSupplier
      • TradeAcquiringChargebackDetail
      • WhaletCardAccountTransactionType
      • AcquiringProductStatus
      • Card
      • WhaletCardTransactionStatus
      • FeeDetail
      • UserHolder
      • UserHolderBankAccount
      • ResultNotify
      • PlatformType
      • VirtualAccountBank
      • Balance
      • ListObject
      • AcquiringChargebackDefenseDocument
      • YesOrNo
      • TradeAcquiringChargebackReasonInfo
      • TradeAcquiringChargebackReason
      • FeeRuleDetail
      • SupplierType
      • FeeRule
      • PayeeCardStatus
      • BankCode
      • ShopStatus
      • BeneficiaryBankAccountField
      • BeneficiaryAccountType
      • BeneficiaryBankAccount
      • SellGoodsType
      • CertificateType
      • FundSource
      • ConnectivityGuideRequestBody
      • ServiceTradeType
      • AcquiringGoods
      • AcquiringPaymentMethod
      • TradeAcquiringLinkStatus
      • TradeAcquiringLinkInfo
      • TradeAcquiringLinkCustomerInfo
      • TradeAcquiringLinkGoodsInfo
      • TradeAcquiringOrderInfo
      • TradeAcquiringInfo
      • TradeAcquiringRefundInfo
      • Currency
      • RemittancePurpose
      • RelationshipSender
      • ConnectivityGuideResponseBody
      • BeneficiaryAccountCategory
    • AcquiringPayByBankDetail
    • AcquiringDigitalWalletDetail
    • AcquiringPixDetail
    • AcquiringCaptureType
    • AcquiringActionType
    • AcquiringRedirectData
    • AcquiringCardBrand
    • AcquiringBoletoDetail
    • AcquiringPicpayBrazilDetail
    • AcquiringPaypalBrazilDetail
    • AcquiringPaymentDetailBase
    • AcquiringGooglePayDetail
    • AcquiringApplePayDetail
    • AcquiringBcmcDetail
    • AcquiringIdealDteail
    • AcquiringUserAgent
    • AcquiringSubmitDetail
    • AcquiringBrowserInfo
    • AcquiringProduct
    • AcquiringAddress
    • CountryCode
    • AcquiringCustomer
    • AcquiringOrder
    • AcquiringDeviceData
    • AcquiringChannel
    • AcquiringCardDetail
    • AcquiringMethodType
    • AcquiringAction
    • Currency
    • AcquiringQrCodeData
    • AcquiringMethodDetail
    • AcquiringCustomData
  1. Embedded Payment

接入方式

背景#

为了方便客户快速接入各种支付方式,解决一些页面的交互逻辑(例如3DS授权),可通过该接入方式。

流程#

1.
客户进入支付页面调用创建会话接口生成一个会话url作为iframe加载
2.
客户输入支付信息发起支付,Merchant Server调用发起支付接口生成tradeUniId返回给前端
3.
[可选] 表单校验,客户端通过 postMessage 发起表单校验请求,并接受校验结果
4.
客户端调用postMessage提交支付
5.
客户端接收postMessage支付结果
6.
支付网关通知Merchant Server支付结果
本文档提供角色划分、消息格式、各会话的流程与数据结构、Mermaid 时序图,以及快速集成示例代码。

核心概念#

统一前缀:prefix = "whalet-checkout"
消息封装:所有消息均为统一结构 { prefix, type, payload }
角色定义:
父页面(Parent):嵌入 iframe 的宿主页面,监听并回应子页面消息;可主动发起会话。
子页面(Child):Whalet Checkout Iframe 页面,主动请求数据或回传结果;接收父页面的指令。
targetOrigin:生产环境强制使用精确的目标源,不应使用 '*'。

消息结构#

基础封装#

interface BaseMessage<T extends string, P> {
  prefix: 'whalet-checkout'
  type: T
  payload: P
}

类型与载荷(节选)#

父页面消息类型(Outgoing to child)
REQUEST_FORM_VALIDATION: 发起表单校验
payload: {} 为空对象即可
INITIATE_PAYMENT:发起支付
payload: { tradeUniId: string; name: string; country: string; email?: string; billingAddress?: BillingAddress; ... }
子页面消息类型(Incoming from child)
REPLY_FORM_VALIDATION_RESULT:表单校验结果回传
payload(成功): { valid: true }
payload(失败): { valid: false, errors?: Array<{ name: (string | number)[]; errors: string[] }> }
REPLY_PAYMENT_RESULT:支付结果回传
payload: { tradeUniId: string; status: 'success'|'failed'; paymentMethod?: string; message?: string }
REPLY_ERROR:错误信息回传
payload: { code?: string; message: string; detail?: unknown }
数据结构参考 附加信息 中的 BillingAddress 等。

会话一:请求校验子页面表单(可选)#

父页面请求子页面的表单校验结果
触发方:父页面(Parent)
响应:子页面(Child) 触发内部表单校验,并将校验结果通过 REPLY_FORM_VALIDATION_RESULT 回复给父页面(Parent)

会话二:发起支付指令#

父页面主动通知子页面发起支付;子页面随后在流程完成后通过结果会话回传结果或错误(见会话二)。
触发方:父页面(Parent)
请求:INITIATE_PAYMENT
响应:无立即同步响应。流程完成后通过会话二异步回传结果。(可以封装一个 Promise 方法将 INITIATE_PAYMENT 和 REPLY_PAYMENT_RESULT 作为一整个会话,这样可以在一个异步方法里面处理完整的支付流程)

数据结构#

// Initiate
{
  prefix: 'whalet-checkout',
  type: 'INITIATE_PAYMENT',
  payload: {
    tradeUniId: string,
    name: string,
    country: string,
    email?: string,
    billingAddress?: BillingAddress,
    // 其他必要字段...
  }
}

会话三:支付结果/错误回传#

子页面在支付流程完成后,向父页面回传结果或错误信息。
触发方:子页面(Child)
响应:父页面只需记录并处理,不需要再回发消息。

数据结构#

// Payment Result
{
  prefix: 'whalet-checkout',
  type: 'REPLY_PAYMENT_RESULT',
  payload: {
    tradeUniId: string,
    status: 'success' | 'failed',
    paymentMethod?: string,
    message?: string
  }
}

// Error
{
  prefix: 'whalet-checkout',
  type: 'REPLY_ERROR',
  payload: {
    code?: string,
    message: string,
    detail?: unknown,
  }
}

角色与事件绑定#

父页面(Parent)职责#

在 window 上监听 message 事件,过滤 prefix === 'whalet-checkout'
根据 type 路由到对应处理器
设置安全的 targetOrigin

子页面(Child)职责#

在 window 上监听父页面发送的 INITIATE_PAYMENT, REQUEST_FORM_VALIDATION 等消息
主动发送/回复 REPLY_* 消息

附加信息#

为便于第三方在独立环境快速对接,现附上本协议涉及的关键源码原文:

1) postMessage 类型定义#

2) 数据结构定义#

3) 测试页面(原始代码,可以拷贝下面这段代码测试 postMessage 流程)#

上一页
查询交易信息
下一页
创建支付会话
Built with