POST
保存支付方式结果通知
该回调通知用于接收
txnType=BIND_CARD 保存支付方式交易的服务端最终结果;仅在 status=S 时保存并使用通知中的 tokenId。验签范围
请求签名指南除以下字段外,全部回调报文字段均参与验签:
回调报文字段
notifyType通知类型,标识本次 Webhook 的业务大类。
约束
- 取值
- 保存支付方式结果通知固定返回
TXN。
transactionIdOnerway 为本次绑定交易生成的交易号,用于跟踪、查询和幂等处理。
约束
- 规则
- 该值为大整数样式字符串;JavaScript 系统中应按字符串保存和比对,避免精度丢失。
- 一致性
- 纯绑卡:该值等于生成卡 token 接口同步响应中的
transactionId,可用于匹配同步响应与本条最终结果。卡订阅(bindCard=true)和本地支付方式订阅:该值与订阅扣款通知的transactionId不同,不能用于匹配两条通知。每条通知请按各自的transactionId做幂等处理。
paymentId绑定交易的支付意图 ID。
约束
- 一致性
- 卡订阅(
bindCard=true):与订阅扣款通知的paymentId不同。本地支付方式订阅:与订阅扣款通知的paymentId相同。请勿把任一关系套用到其他支付方式;请按tokenId中说明的 token 关系匹配两条通知。
txnType交易操作类型,表示本次通知对应的交易动作。
可选值
BIND_CARD- 保存支付方式(绑卡 / 绑定)交易。
约束
- 取值
- 固定为
BIND_CARD。订阅扣款结果由订阅扣款通知单独返回。卡订阅(bindCard=true):Onerway 先生成订阅扣款通知,支付成功后再发送本通知。本地支付方式订阅:Onerway 先发送本通知完成订阅授权,再生成首次扣款的订阅扣款通知。两条通知到达商户服务器的先后顺序不保证。
merchantNoOnerway 分配的商户号,标识接收该通知的商户账户。
merchantTxnId绑定交易的商户交易号。
约束
- 规则
- 纯绑卡:该值由 Onerway 生成,不是商户请求中的交易号。卡订阅(
bindCard=true):与订阅扣款通知的merchantTxnId不同,不要用它匹配两条通知。本地支付方式订阅:与订阅扣款通知的merchantTxnId相同。
responseTimeOnerway 生成本次通知结果的时间,格式为
yyyy-MM-dd HH:mm:ss。txnTime绑定交易发生或状态形成的时间,格式为
yyyy-MM-dd HH:mm:ss。txnTimeZonetxnTime 使用的时区偏移,格式为 ±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 两位字母代码。
reason{ respCode, respMsg }绑定结果原因对象,通知中按 JSON string 承载。
sign兼容保留的签名字符串:仅使用第一个启用的密钥计算,密钥轮换期间可能与商户配置的密钥不一致;请改用
X-Rh-Signature header 验签。约束
- 规则
- 验签时不要把
sign自身作为待签名字段。
paymentMethod本次保存的支付方式或卡品牌。除卡以外,本通知也用于本地支付方式订阅的订阅授权结果。
示例:
VISAwalletTypeName钱包类型名称。
channelRequestId支付渠道侧的请求标识,可用于渠道侧对账或排查。
约束
- 一致性
- 卡订阅(
bindCard=true)和本地支付方式订阅:该值与订阅扣款通知的channelRequestId不同,不能用于匹配两条通知。
paymentStatus绑定交易的支付意图状态。
contractId订阅合约 ID。
约束
- 规则
- 该值为大整数样式字符串;JavaScript 系统中应按字符串保存和比对,避免精度丢失。
- 一致性
- 本地支付方式订阅:与订阅扣款通知的
contractId相同。卡订阅(bindCard=true)在本通知中不返回该字段,因此不能作为匹配两条通知的通用键。
subscriptionStatus关联订阅合约的状态。
示例:
canceleddataStatus关联订阅合约记录的数据状态。
可选值
0- 待启用。
1- 启用。
2- 停用。
products{ name, price, ... }订阅请求中
txnOrderMsg.products 提交的商品列表,通知中按 JSON string 返回。paymentMethodDetails{ card }支付方式详情对象;卡绑定的明细位于
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