POST
创建直连交易
该接口用于创建服务端到服务端的直连交易,支持卡、钱包、已保存 token、订阅、分期和本地支付方式。
请求
billingInformation{ email, country, ... }条件:除订阅后续扣款 / 更新(
交易账单信息,包含客户账单地址和联系信息。subscription.requestType=1 或 2)外必填。cardInfo{ holderName, cardNumber, ... }条件:
卡支付信息。商户自行采集卡信息(含卡 token 支付时的 - 商户自行采集卡信息支付时必填。
- Apple Pay / Google Pay 商户自解密模式时必填。
- 卡 token 支付(
subProductType=TOKEN)时必填;与tokenInfo一起提交cardInfo.cvv。 - Google Pay Onerway 代解密模式下,商户自行采集
PAN_ONLY支付的 CVC 时必填;此时cardInfo只包含cvv,并与tokenInfo一起提交。
cardInfo.cvv)需具备 PCI DSS 合规资质。钱包支付可选择通过 cardInfo 传商户自解密结果,或通过 tokenInfo 交由 Onerway 代解密;只有 Google Pay PAN_ONLY token 需补 CVC 时两者同时提交,此时 cardInfo 只含 cvv。约束
- 规则
- Google Pay 商户自解密模式同样需按 Onerway 要求配置
allowedAuthMethods,详见 tokenInfo 的约束说明。
merchantCustId条件:卡 token 支付(
客户在商户系统中的唯一标识。订阅交易中应以 subProductType=TOKEN)和订阅场景必填。subscription.merchantCustId 作为订阅客户标识;外层 merchantCustId 可不传,若同传则必须与 subscription.merchantCustId 保持一致。示例:
customer_12345merchantTxnId商户系统生成的每笔支付唯一交易标识,用于交易跟踪、对账和防重复处理。
merchantTxnTime商户发起交易的时间戳,格式为
yyyy-MM-dd HH:mm:ss;未传时 Onerway 默认使用 UTC+8 时区记录交易时间。merchantTxnTimeZone商户交易时间的时区偏移量;未传时 Onerway 默认使用 UTC+8 时区记录交易时间。
示例:
+08:00metaData本次交易的商户自定义数据,必须是包含合法 JSON 的字符串;交易查询和异步通知会原样返回,未传入时其中的
metaData 为空。mpiInfo{ version, eci, ... }条件:当
外部 3DS / MPI 认证结果。直连接入可使用自有或外部 MPI / 3DS Server 完成 3DS 认证,并将认证结果原样回传。risk3dsStrategy=EXTERNAL 时必填。lpmsInfo{ lpmsType, bankName, ... }条件:当
本地支付方式信息,包含所选本地支付方式的配置参数。productType=LPMS 时必填。osType条件:当
移动端和应用交易的操作系统类型。paymentMode 不是 WEB 时必填。示例:
IOS可选值
IOS- iOS 设备。
ANDROID- Android 设备。
paymentMode交易平台或环境的支付模式;默认
WEB。示例:
WEB可选值
WEB- 桌面浏览器支付。
APP- 原生移动 App 支付。
WAP- 移动浏览器支付。
paymentMethodOptions{ card, share }支付方式配置选项;直连交易支持
card 与 share 对象。productType支付方式范围。直连接口必须明确选择
CARD 或 LPMS;ALL 属于收银台聚合展示概念,本接口不支持。示例:
CARD可选值
CARD- 卡支付范围,包含商户自行采集卡信息的卡支付以及 Apple Pay / Google Pay 钱包支付。
LPMS- 本地支付方式范围;使用该取值时需同时传入
lpmsInfo。
retailers{ retailerId, retailerName, ... }marketplace 交易的零售商信息;订单包含的每个零售商各传入一个对象。
自 2026-08-10marketplace 零售商信息的新增字段。
约束
- 规则
- 适用于 marketplace / 平台模式下商品由第三方零售商销售的场景;仅销售自有商品的商户无需传入。
- 一致性
- 传入该字段后,
txnOrderMsg.products中的每个商品都需要传入retailerId,且取值需命中此处列出的某个零售商。
risk3dsStrategy3DS 风控策略;直连接入支持
DEFAULT、INNER、NONE、EXTERNAL。选择 EXTERNAL 时必须同时传入 mpiInfo 回传外部 3DS 认证结果;如需指定非默认策略,需提前联系 Onerway 确认配置。示例:
DEFAULT可选值
DEFAULT- 默认策略,由 Onerway 根据交易、商户配置和风控判断是否发起 3DS 验证。
INNER- 强制使用 Onerway 托管的 3DS 验证流程。
NONE- 不走 3DS 验证;是否可用需结合商户配置和风控要求确认。
shippingInformation{ email, country, ... }条件:除订阅后续扣款 / 更新(
交易配送信息,包含客户配送地址和联系信息。subscription.requestType=1 或 2)外必填。sign请求签名字符串;生成方式详见请求签名。
subProductType所选支付方式范围下的交易处理模式,需要与
productType 和 txnType 配合定义交易模型。示例:
DIRECT可选值
DIRECT- 普通直连支付,按
productType与txnType执行一次性扣款、钱包支付、本地支付或预授权。 TOKEN- 卡 token 支付,使用已保存的卡 token 扣款;需配合客户标识,并必须提交
cardInfo.cvv。 SUBSCRIBE- 订阅交易;通过
subscription.requestType支持初始订阅、商户自主管理后续扣款与托管订阅计划更新。
subscription{ requestType, merchantCustId, ... }条件:当
订阅信息。本直连接口支持初始订阅(subProductType=SUBSCRIBE 时必填。requestType=0)、后续扣款(requestType=1,自主管理订阅的本期扣款)和订阅更新(requestType=2,托管订阅计划升级 / 降级)。tokenInfo{ tokenId, provider }条件:
以 token 凭据发起支付。钱包场景传钱包 SDK 返回的加密 token,由 Onerway 代解密。卡 token 支付传生成卡 token 或保存支付方式返回的卡 token;订阅 token 通过 - Apple Pay / Google Pay Onerway 代解密模式时必填。
- 卡 token 支付(
subProductType=TOKEN)时必填。
subscription.tokenId 传入,不在此处。约束
- 规则
- Onerway 要求 Google Pay
CARD支付方式参数中的allowedAuthMethods同时包含PAN_ONLY和CRYPTOGRAM_3DS。该要求适用于 Onerway 代解密和商户自解密两种模式;商户自解密时通过 cardInfo 提交解密后的支付数据。 - 规则
- Google Pay 由 Onerway 代解密时对应
PAYMENT_GATEWAYtokenization:Google Pay 前端的gateway与gatewayMerchantId参数分别取查询可用支付方式返回的gatewayName与gatewayMerchantId。该 token 以 Onerway 密钥加密,商户无法自行解密。 - 规则
- Google Pay Onerway 代解密模式下,创建交易前可选择调用检查 Google Pay PAN_ONLY token。提交
PAN_ONLYtoken 时,若未传cardInfo.cvv,无论是否已调用检查接口,交易响应均返回data.status=R和data.redirectUrl。商户需引导用户跳转至data.redirectUrl,在 Onerway 托管页面输入 CVC;若自行采集 CVC,则通过 cardInfo.cvv 与tokenInfo一起提交。
txnOrderMsg{ products, returnUrl, ... }条件:除订阅后续扣款 / 更新(
交易业务信息,包含 subscription.requestType=1 或 2)外必填。returnUrl、notifyUrl、appId、商品信息以及由商户采集的浏览器、设备和持卡人 IP 信息。txnType要执行的支付操作类型;该字段与
productType、subProductType 共同定义交易模型。REFUND 与 BIND_CARD 不在本下单接口范围。示例:
SALE可选值
SALE- 扣款型交易。与
subProductType=DIRECT/TOKEN/SUBSCRIBE/INSTALLMENT组合时,分别用于普通支付、token 支付、订阅或分期交易。 AUTH- 预授权交易,先冻结持卡人卡上金额、暂不扣款;适用于商户自行采集卡信息支付和卡 token 支付,不适用于 LPMS、订阅或分期。
curl -X POST 'https://sandbox-acq.onerway.com/v1/txn/doTransaction' \
-H 'Content-Type: application/json' \
--data-raw '{
"billingInformation": "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"phone\":\"4848980027\",\"phoneCountryCode\":\"1\",\"email\":\"customer@example.com\",\"postalCode\":\"94016\",\"address\":\"100 Market Street\",\"country\":\"US\",\"province\":\"CA\",\"city\":\"San Francisco\",\"street\":\"Market Street\",\"number\":\"100\"}",
"cardInfo": "{\"holderName\":\"John Smith\",\"cardNumber\":\"{{CARD-NUMBER}}\",\"month\":\"12\",\"year\":\"2030\",\"cvv\":\"{{CVV}}\"}",
"merchantNo": "{{MERCHANT-NO}}",
"merchantTxnId": "txn_demo_direct_202606140001",
"merchantTxnTime": "2026-06-14 10:30:00",
"merchantTxnTimeZone": "+08:00",
"metaData": "{\"orderSource\":\"direct-api-demo\"}",
"orderAmount": "99.99",
"orderCurrency": "USD",
"paymentMethodOptions": "{\"card\":{\"avsEnabled\":true}}",
"paymentMode": "WEB",
"productType": "CARD",
"risk3dsStrategy": "DEFAULT",
"shippingInformation": "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"phone\":\"4848980027\",\"phoneCountryCode\":\"1\",\"email\":\"customer@example.com\",\"postalCode\":\"94016\",\"address\":\"100 Market Street\",\"country\":\"US\",\"province\":\"CA\",\"city\":\"San Francisco\",\"street\":\"Market Street\",\"number\":\"100\"}",
"sign": "{{SIGN}}",
"subProductType": "DIRECT",
"txnOrderMsg": "{\"returnUrl\":\"{{RETURN-URL}}\",\"products\":\"[{\\\"name\\\":\\\"Demo product\\\",\\\"price\\\":\\\"99.99\\\",\\\"num\\\":\\\"1\\\",\\\"currency\\\":\\\"USD\\\"}]\",\"transactionIp\":\"203.0.113.10\",\"appId\":\"{{APPID}}\",\"javaEnabled\":false,\"colorDepth\":\"24\",\"screenHeight\":\"1080\",\"screenWidth\":\"1920\",\"timeZoneOffset\":\"-480\",\"accept\":\"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\",\"userAgent\":\"Mozilla/5.0 (Demo Browser)\",\"contentLength\":\"0\",\"language\":\"en-US\",\"notifyUrl\":\"{{WEBHOOK-ENDPOINT}}\"}",
"txnType": "SALE"
}'响应
respCode响应码;
20000 表示请求处理成功,其余为错误码。完整码表见响应码。respMsg响应码对应的可读说明。
data{ transactionId, paymentId, ... }直连交易响应的业务数据对象。同步响应即可返回终态,也可能要求商户跳转或展示后续动作。
{
"respCode": "20000",
"respMsg": "Success",
"data": {
"transactionId": "2064485863093829632",
"paymentId": "2064485863068663808",
"responseTime": "2026-06-14 10:30:02",
"txnTime": null,
"txnTimeZone": null,
"orderAmount": "99.99",
"orderCurrency": "USD",
"txnAmount": "",
"txnCurrency": null,
"status": "R",
"paymentStatus": "R",
"redirectUrl": "https://developers.onerway.com/example-direct-redirect",
"contractId": null,
"tokenId": null,
"eci": null,
"periodValue": null,
"codeForm": null,
"presentContext": null,
"actionType": "RedirectURL",
"subscriptionManageUrl": null,
"rrn": null,
"authorizationCode": null,
"cardInfo": null,
"sign": "{{SIGN}}"
}
}该接口暂未记录错误响应。