本地支付方式是卡与钱包之外、面向特定国家或地区的支付方式,覆盖银行转账与网上银行、虚拟账户、电子钱包、二维码、便利店与现金凭证、预付卡、运营商代扣与先买后付等形态。它们与卡支付共用同一套下单接口,差别在于客户需要离开商户页面、在支付方式自己的界面完成付费,且部分方式并非即时到账。
三种接入方式都可以使用本地支付方式:收银台与 Web SDK 由 Onerway 展示可用方式并承接客户侧动作,API 直连由商户指定方式并自行承接。本地支付方式不支持预授权(txnType=AUTH)。
查询可用支付方式
Onerway 支持的方式清单以字段 lpmsInfo.lpmsType 的取值为准,每个取值都附有方式说明,可作为接入前的方式名称索引;其中 ApplePay 与 GooglePay 属于钱包,接入方式见 Apple Pay 与 Google Pay。
某笔订单实际可用哪些方式,取决于商户开通配置、客户所在国家或地区、币种与金额,以查询可用支付方式的返回为准:不要只按币种判断可用性。返回的每条记录以 data[].paymentMethod 标识支付方式,下单时 lpmsInfo.lpmsType 使用同一个取值。币种与金额的校验规则见币种与金额校验。
由商户自建支付方式列表时(API 直连,或收银台锁定单一方式),必须先查询再展示,不要把方式清单硬编码在前端;结果可缓存,并在商户配置变更时刷新。收银台与 Web SDK 展示全部可用方式时由 Onerway 侧完成筛选,商户无需自行调用。
单笔限额,以及部分方式额外的商户注册或地区要求,请向 Onerway 技术支持确认。
接入方式选择
| 接入方式 | 展示与选择 | 关键参数 |
|---|---|---|
| 收银台 | 收银台展示当前订单可用的方式,由客户自行选择;也可锁定单一方式 | 展示全部可用方式传 productType=ALL;锁定单一方式在此基础上传 lpmsInfo.lpmsType |
| Web SDK | SDK 在商户页面内展示可用方式,二维码与本地支付页等承接界面由 SDK 渲染 | productType=ALL;本地支付方式由商户按钮调用 confirmPayment() 发起 |
| API 直连 | 商户自建支付方式列表并在下单时指定方式,自行承接客户侧动作 | 字段 productType 传 LPMS 与 lpmsInfo;subProductType 一次性扣款传 DIRECT、订阅传 SUBSCRIBE |
收银台与 Web SDK 路径下,客户侧动作与承接界面都由 Onerway 页面或 SDK 处理。本页其余内容说明 API 直连路径的调用方式与三种接入方式共同面对的到账时效;本地支付方式订阅目前只说明 API 直连的建立方式。
API 直连接入
创建交易
客户选定支付方式后,服务端调用创建直连交易,字段 productType 传 LPMS,并传入 subProductType=DIRECT(订阅传 SUBSCRIBE,见本地支付方式订阅)、txnType=SALE 与字段 lpmsInfo:lpmsType 指定支付方式,其余子字段按方式条件必填,见方式专属参数。productType=ALL 属于收银台的聚合展示概念,直连接口不支持。
承接客户侧动作
响应 status=R 表示还需要客户完成一次动作,动作形态由字段 actionType 决定,三种取值都要处理:
actionType | 处理 |
|---|---|
RedirectURL | 把客户重定向到字段 redirectUrl。跳转后的界面由支付方式决定,可能是选行页、银行 App 或网银授权页 |
QrCode | 在商户页面展示字段 codeForm 承载的二维码或条码;该字段带 expireTime 时按其处理失效 |
ShowContext | 在商户页面展示字段 presentContext 承载的上下文信息 |
涉及拉起 App 的方式,需在移动浏览器上验证拉起与回跳。
承接同步回跳
跳转型方式的客户完成或放弃操作后,经 txnOrderMsg.returnUrl 返回商户页面。回跳只用于页面流转,不保证附带交易参数,也不代表支付已完成:建议在 returnUrl 上拼接商户订单号,客户返回时向其展示“处理中”,并由服务端通过查询交易记录核实。
确认最终结果
最终状态以支付结果通知为准,字段 paymentMethod 返回本次实际扣款的支付方式。验签、应答与重试、幂等去重与查询补偿见 Webhook 通知。
方式专属参数
除 lpmsType 外,lpmsInfo 还有五个子字段,都按所选支付方式条件必填:
| 子字段 | 采集内容 |
|---|---|
bankName | 客户选择的银行;EFT 与 Przelewy24 需要,可选银行见下方 lpmsInfo 字段说明中的取值列表 |
walletAccountId | 钱包或本地账户标识符 |
walletAccountName | 钱包或本地账户名称 |
iBan | 以 IBAN 识别银行的地区转账账号 |
prepaidNumber | 日本预付类方式的预付卡或充值卡号 |
各字段的完整必填条件与 bankName 的银行取值见字段 lpmsInfo。
billingInformation 与 shippingInformation 的必填子字段同样随支付方式变化,例如部分本地支付方式要求提供客户的政府身份标识 identityNumber。这些要求由支付方式提供方决定,创建直连交易接口只对个别方式给出了明确条件(例如 lpmsType=MB_WAY 时 phoneCountryCode 必填),其余未逐个列出,请在沙盒环境逐个验证要上线的方式。
延迟到账与等待态
部分本地支付方式并非即时到账:客户拿到支付码、凭证或转账信息后,可能过一段时间才实际完成付费,银行转账、虚拟账户、便利店与现金凭证类方式都属于这种形态。这类订单需要按以下方式处理:
- 一次下单对应一个支付意图:响应中的
paymentId与transactionId一一对应。支付意图未关闭前可继续尝试(通知的paymentStatus为O),关闭后(N)该订单不能再支付。 - 支付结果通知只在交易到达终态时发送,已向客户出示支付码或凭证不代表款项已收到。
- 创建交易后订单可能长时间停在处理中,商户需要为订单设计等待态,并明确超时后如何处理;支付意图超时关闭时,通知的
paymentStatus为N。 - 不要以回跳或同步响应作为到账依据,也不要在客户回跳后立即发货;未收到通知时用查询交易记录补偿,读交易级
status——该接口不返回支付意图级的paymentStatus。
本地支付方式订阅
部分本地支付方式可用于订阅,目前包括 DANA、WeChat、GCash 与 TOUCH_GO_EWALLET;某个方式在当前商户配置下是否支持订阅,可在查询可用支付方式时传 subProductType=SUBSCRIBE 筛选。这些方式只支持自主管理订阅(subscription.selfExecute=2),续费扣款由商户发起;托管订阅与自主管理订阅的区别见订阅支付。
计费频率只能传 frequencyType=D,但这不表示只能按天扣款:字段 subscription.frequencyPoint 按天表示计费周期,例如,月度订阅可传 30,年度订阅可传 365。该值仅用于记录,实际续费扣款时间由商户自行确定。
订阅分两步完成:
- 订阅授权:调用创建直连交易,传入
productType=LPMS、subProductType=SUBSCRIBE、txnType=SALE、lpmsInfo与字段subscription(requestType=0),客户在支付方式提供方的界面完成协议扣款授权,承接方式同样由actionType决定。首期扣款方式由subscription.mode决定:默认2表示客户授权后由 Onerway 立即完成首期扣款;传1表示只建立授权、首期扣款改由商户自行发起。授权结果以保存支付方式结果通知为准(txnType=BIND_CARD、scenarios=SUBSCRIPTION_INITIAL),仅在status=S时持久化其中的contractId与tokenId。请求中的orderAmount填写真实的订阅金额,txnOrderMsg.products各行合计需与之相等;授权通知本身返回orderAmount=0.00。 - 后续扣款:商户按计费周期调用创建直连交易,传入
subscription.requestType=1与已保存的contractId、tokenId和merchantCustId。mode=2下首期扣款已由 Onerway 在授权后完成,商户从第二期开始发起;mode=1下首期也由商户发起。每期扣款的结果都由订阅扣款通知返回(txnType=SALE)。
与卡订阅的差异:
- 授权失败即订阅终止:不会再有订阅扣款通知,保存支付方式结果通知的
subscriptionStatus为canceled。 mode=2下订阅授权与首期扣款是两条通知,transactionId与channelRequestId各不相同,merchantTxnId、contractId与tokenId相同(paymentId有值时同样相同,但首期扣款通知可能不返回该字段,不要用它做唯一匹配键);两条通知到达商户服务器的先后顺序不保证,都要按各自的transactionId幂等处理。- 这里的
tokenId是订阅 token,只能用于订阅相关操作,不能用于subProductType=TOKEN支付;本地支付方式订阅不返回cardTokenId。 - 首期扣款的订阅扣款通知不返回
scenarios,订阅场景由保存支付方式结果通知返回。
部分区域支付方式的额外要求
stc pay、Tamara、Tabby 与 MADA 的取值分别是 stcpay、tamara、tabby 与 cardpay,可在字段 lpmsInfo.lpmsType 的取值列表中按方式名查到。这几个方式的额外要求不在 lpmsInfo 里,而在商品与订单信息上:
- 商品行必须区分类别:字段
txnOrderMsg.products[].type传virtual或physical,字段txnOrderMsg.products[].productAvatarUrl传 HTTPS 商品图片链接,格式为 JPG、PNG 或 WebP。 - 字段
txnOrderMsg.customerPlatform必填:Web 端传网站域名,App 端传应用名称。 - stc pay 的结算依赖物流信息:交易已成功完成且包裹送达客户并签收后,调用上传物流信息提交承运商编码与运单号;虚拟商品交易与分期交易不适用该结算前置条件。
这几个方式的开通范围请向 Onerway 技术支持确认。
上线前检查
- 自建支付方式列表的接入方式已在展示前调用查询可用支付方式,没有把方式清单硬编码在前端。
status=R下actionType的三种取值都已处理,回跳页只承接客户,订单结果由服务端查询或通知确认。- Webhook 端点已按 Webhook 通知完成上线前检查,能接收支付结果通知;使用订阅时还能接收保存支付方式结果通知与订阅扣款通知。
- 已为非即时到账的方式设计等待态与超时处理,未在客户回跳后立即发货。
- 已在沙盒环境逐个验证要上线的支付方式,覆盖客户中途取消与移动端跳转。
- 使用本地支付方式订阅时,
contractId与tokenId仅在授权成功时保存,以字符串存储并与客户关联。