# 单笔订单交易接口
最新更新时间:2023.06.13
发起单笔订单交易。# 接口说明
请求URL: https://{domain}/os-base/trade/v2/open
请求方式: POST
公共请求参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
access_id | 是 | string | 开发者唯一标识 |
sign_type | 是 | string | 固定传RSA2 |
time_stamp | 是 | long | 请求时间,Linux时间戳,单位毫秒 |
sign | 是 | string | 签名结果 |
data | 是 | string | 将业务参数转为JSON字符串,然后使用BASE64编码的数据 |
详细签名方法请阅读接口加密方案
业务请求参数
名称 | 必填 | 类型 | 说明 |
---|---|---|---|
osMerchantCode | 是 | string | 开放平台为商户生成的唯一编号 |
osStoreCode | 是 | string | 开放平台为门店(停车场)生成的唯一编号 |
ownerTradeNo | 是 | string | 商户交易订单号,要求唯一 |
payChannel | 条件必传 | string | 支付渠道 ALI_PAY:支付宝; WX_PAY:微信; CMB:招行一网通; |
payProduct | 是 | string | 支付产品类型 APP:手机App客户端; MINI_APP:小程序; M_WEB:手机网页支付; PC_WEB:电脑网页支付; USER_QR:用户扫描商家二维码支付; MCH_QR:商家扫描用户付款码支付; FACE:刷脸付 |
payBusiness | 否 | string | 支付业务,该参数传值必须提前在开放平台登记过,否则会导致交易失败,传入此值校验是否在平台开通,未指定时,不传 |
title | 是 | string | 单标题 最长256 |
remark | 否 | string | 给支付平台的附加信息,支付平台会原封回调给对用方 |
orderFee | 是 | int | 订单总金额 单位分 范围 1 ~ 1000000000 |
notifyUrl | 否 | string | 通知地址 通知URL必须为直接可访问的URL,不允许携带查询串,要求必须为https地址。 |
timeExpire | 是 | long | 绝对超时时间,时间戳,标准北京时间,超时失效 |
quitUrl | 条件必传 | string | 支付宝手机网页支付必传,用户付款中途退出返回商户网站的地址 |
ownerBusinessNo | 否 | string | 商户维护:商户创建的订单业务号,商户自传,支付回调原封返回 |
ownerPayTerminal | 否 | string | 商户支付终端,商户自传,支付回调原封返回 |
ownerAppId | 否 | string | 商户独立应用的appId, 若没有可不传 |
ownerAppBuyerId | 条件必传 | string | 支付宝或微信应用的买家id,小程序必传 (若商户有独立的小程序应用,则传商户小程序的用户id) |
公共响应参数
名称 | 必传 | 类型 | 说明 |
---|---|---|---|
code | 是 | int | 请求结果code,详细请参考错误码说明) |
msg | 是 | string | 请求结果描述,失败时会返回错误原因 |
data | 否 | Object | 请求结果返回的业务响应参数,若无业务参数则返回空 |
业务响应参数
名称 | 必传 | 类型 | 说明 |
---|---|---|---|
osTradeNo | 是 | string | 开放平台交易记录唯一订单号 |
ownerTradeNo | 是 | string | 第三方商户创建的唯一订单号 |
orderFee | 是 | int | 该笔订单的资金总金额 单位为分 |
timestamp | 是 | long | 时间戳,标准北京时间 |
sign | 是 | string | 调起支付的签名信息 用户扫码支付:统一返回url链接 支付宝:返回的String可直接调用支付宝sdk拉起支付 微信支付:返回Json字符串 |
SDK方法
// 创建上传数据client
TyhPaymentClient client = TyhPaymentClient.create(TyhOptions.builder()
.accessId(ACCESS_ID)
.secretKey(SECRET_KEY)
.allowUpload(Boolean.TRUE)
.build());
// 构造单笔交易参数
TradeCmd tradeCmd = TradeCmd.builder()
.osMerchantCode('2163737276721967L')
.osStoreCode('3163757684139653L')
.ownerTradeNo("owner_trade_118888806")
.payChannel(PayConstant.PayChannel.ALI_PAY)
.payProduct(PayConstant.PayProduct.USER_QR)
.title("支付标题")
.remark("给支付平台的附加信息,支付平台会原封回调给对用方")
.orderFee(1) //订单金额,最小单位分
.timeExpire(System.currentTimeMillis() + 1000 * 60 * 10)
.notifyUrl("https开头的回调地址")
.build();
// 发起交易请求,result.ifSuccess()表示请求成功
try {
Results<TradePayDto> results = client.trade(tradeCmd);
//获取支付结果
TradePayDto dto = results != null && results.ifSuccess() ? results.getData() : null;
} catch (Exception e) {
e.printStackTrace();
}
入参格式
{
"osMerchantCode" : "2293839381",
"osStoreCode" : "39819018",
"ownerTradeNo" : "owner_trade_32192182",
"payChannel": "ALI_PAY",
"payProduct": "MINI_APP",
"payBusiness": "Parking",
"title": "测试支付停车费",
"remark" : "这是remark",
"orderFee" :1,
"timeExpire" : 1637914727314,
"notifyUrl" : "https://www.hfcsbc.com/callback"
}
出参格式:
{
"code": 8888,
"msg": "处理成功",
"data": {
"osTradeNo": "trade_25409336886366208",
"ownerTradeNo": "owner_trade_32192182",
"orderFee": 1,
"timestamp": 1637914727200,
"sign": "https://qr.alipay.com/bax06361xdt8egkw3lh73203"
}
}
code 为 8888 表示操作成功,其它值则为失败,具体内容参见错误码说明)。