Onerway
POST

保存支付方式结果通知

回调地址
该回调通知用于接收 txnType=BIND_CARD 保存支付方式交易的服务端最终结果;仅在 status=S 时保存并使用通知中的 tokenId。

除以下字段外,全部回调报文字段均参与验签:

回调报文字段

notifyType
通知类型,标识本次 Webhook 的业务大类。
约束
取值
保存支付方式结果通知固定返回 TXN。
transactionId
Onerway 为本次绑定交易生成的交易号,用于跟踪、查询和幂等处理。
约束
规则
该值为大整数样式字符串;JavaScript 系统中应按字符串保存和比对,避免精度丢失。
一致性
纯绑卡:该值等于生成卡 token 接口同步响应中的 transactionId,可用于匹配同步响应与本条最终结果。卡订阅(bindCard=true)和本地支付方式订阅:该值与订阅扣款通知的 transactionId 不同,不能用于匹配两条通知。每条通知请按各自的 transactionId 做幂等处理。
paymentId
绑定交易的支付意图 ID。
约束
一致性
卡订阅(bindCard=true):与订阅扣款通知的 paymentId 不同。本地支付方式订阅:与订阅扣款通知的 paymentId 相同。请勿把任一关系套用到其他支付方式;请按 tokenId 中说明的 token 关系匹配两条通知。
txnType
交易操作类型,表示本次通知对应的交易动作。
可选值
BIND_CARD
保存支付方式(绑卡 / 绑定)交易。
约束
取值
固定为 BIND_CARD。订阅扣款结果由订阅扣款通知单独返回。卡订阅(bindCard=true):Onerway 先生成订阅扣款通知,支付成功后再发送本通知。本地支付方式订阅:Onerway 先发送本通知完成订阅授权,再生成首次扣款的订阅扣款通知。两条通知到达商户服务器的先后顺序不保证。
merchantNo
Onerway 分配的商户号,标识接收该通知的商户账户。
merchantTxnId
绑定交易的商户交易号。
约束
规则
纯绑卡:该值由 Onerway 生成,不是商户请求中的交易号。卡订阅(bindCard=true):与订阅扣款通知的 merchantTxnId 不同,不要用它匹配两条通知。本地支付方式订阅:与订阅扣款通知的 merchantTxnId 相同。
responseTime
Onerway 生成本次通知结果的时间,格式为 yyyy-MM-dd HH:mm:ss。
txnTime
绑定交易发生或状态形成的时间,格式为 yyyy-MM-dd HH:mm:ss。
txnTimeZone
txnTime 使用的时区偏移,格式为 ±HH:mm。
orderAmount
绑定交易金额。
约束
规则
金额以 decimal string 返回,商户系统应避免用二进制浮点数直接计算金额。
取值
绑定交易为零金额,该字段返回 0.00。
orderCurrency
绑定交易币种,随请求 / 交易币种返回,ISO 4217 三位字母货币代码。
status
保存支付方式交易的处理结果。
可选值
S
成功;支付方式已保存。
F
失败;保存支付方式被拒绝或处理失败。
约束
规则
以本字段作为保存支付方式的最终结果:仅当 status 为 S 时保存并使用 tokenId。
规则
本地支付方式订阅授权失败即订阅终止:不会再发送订阅扣款通知,本通知的 subscriptionStatus 为 canceled。
tokenId
本次交易产生的 token,类型取决于所属流程,见约束说明。
约束
规则
仅当 status=S 时保存并使用该 token;失败通知即使返回 tokenId 也不要使用。
一致性
纯绑卡和卡订阅(bindCard=true):该值是保存支付方式 token,用于后续通过创建直连交易发起 subProductType=TOKEN 支付。卡订阅场景下,订阅扣款通知的 cardTokenId 与该值相同,而订阅扣款通知的 tokenId 是另一个订阅 token。
一致性
本地支付方式订阅:该值是订阅 token,与订阅扣款通知的 tokenId 相同;仅用于订阅相关操作,不能用于 subProductType=TOKEN 支付,订阅扣款通知也不返回 cardTokenId。
tokenExpireTime
保存 token 的过期时间,格式为 yyyy-MM-dd HH:mm:ss。
cardBinCountry
卡 BIN 所属国家 / 地区,ISO 3166-1 alpha-2 两位字母代码。
绑定结果原因对象,通知中按 JSON string 承载。
sign
兼容保留的签名字符串:仅使用第一个启用的密钥计算,密钥轮换期间可能与商户配置的密钥不一致;请改用 X-Rh-Signature header 验签。
约束
规则
验签时不要把 sign 自身作为待签名字段。
paymentMethod
本次保存的支付方式或卡品牌。除卡以外,本通知也用于本地支付方式订阅的订阅授权结果。
示例:
walletTypeName
钱包类型名称。
channelRequestId
支付渠道侧的请求标识,可用于渠道侧对账或排查。
约束
一致性
卡订阅(bindCard=true)和本地支付方式订阅:该值与订阅扣款通知的 channelRequestId 不同,不能用于匹配两条通知。
paymentStatus
绑定交易的支付意图状态。
contractId
订阅合约 ID。
约束
规则
该值为大整数样式字符串;JavaScript 系统中应按字符串保存和比对,避免精度丢失。
一致性
本地支付方式订阅:与订阅扣款通知的 contractId 相同。卡订阅(bindCard=true)在本通知中不返回该字段,因此不能作为匹配两条通知的通用键。
subscriptionStatus
关联订阅合约的状态。
示例:
dataStatus
关联订阅合约记录的数据状态。
可选值
0
待启用。
1
启用。
2
停用。
订阅请求中 txnOrderMsg.products 提交的商品列表,通知中按 JSON string 返回。
scenarios
本次订阅授权对应的订阅场景,取值见订阅扣款通知的 scenarios 字段。
示例:
支付方式详情对象;卡绑定的明细位于 card 子对象。

回调示例

{
  "notifyType": "TXN",
  "transactionId": "replace_with_bind_transaction_id",
  "paymentId": "replace_with_bind_payment_id",
  "txnType": "BIND_CARD",
  "merchantNo": "replace_with_merchant_no",
  "merchantTxnId": "replace_with_onerway_generated_bind_reference",
  "responseTime": "2026-09-02 08:19:04",
  "txnTime": "2026-09-02 08:19:02",
  "txnTimeZone": "+08:00",
  "orderAmount": "0.00",
  "orderCurrency": "USD",
  "status": "S",
  "tokenId": "replace_with_saved_payment_method_token",
  "tokenExpireTime": "2099-12-31 23:59:59",
  "cardBinCountry": "US",
  "reason": "{\"respCode\":\"20000\",\"respMsg\":\"Success\"}",
  "sign": "replace_with_sha256_signature",
  "paymentMethod": "VISA",
  "channelRequestId": "replace_with_channel_request_id",
  "paymentMethodDetails": "{\"card\":{\"checks\":null,\"holderName\":\"Example Cardholder\",\"year\":\"2028\",\"month\":\"05\",\"cardType\":null,\"productCategory\":null,\"issuer\":\"Example Issuer\",\"cardBinCountry\":\"US\",\"authorizationCode\":null,\"cardNumber\":\"400000******0002\"}}"
}

应答说明

成功接收并受理保存支付方式结果 webhook 后返回 HTTP 200,并在响应体中原样返回收到的 transactionId。

应答正文示例

replace_with_bind_transaction_id