鸿途Pay开放接口文档

鸿途Pay 开放接口文档

接口基础地址以商户后台实际网关地址为准,下文以 https://你的商户域名/ 表示

欢迎接入鸿途Pay。本文档面向已开通商户的技术对接人员,涵盖签名规则、页面跳转支付、统一下单、订单查询、支付结果通知、关闭订单、支付方式列表等支付相关接口的说明。

签名规则

签名步骤

对本平台接口发起的请求,需要进行签名。

1、获取请求报文所有非空请求参数,不包括数组、字节类型参数,如文件、字节流,剔除 signsign_type 字段,并按照第一个字符的键值 ASCII 码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值 ASCII 码递增排序,以此类推。

2、将排序后的参数和对应值,组合成“参数=参数值”的格式,并且把这些参数用 & 字符连接起来,此时生成的字符串为待签名字符串。

3、使用商户私钥,对待签名字符串计算 RSA 签名(SHA256WithRSA),得到签名 sign。

验签步骤

针对接口返回的数据,以及异步通知回调的数据,需进行验签。

1、先根据签名步骤里面的 1~2,获取到待签名字符串。

2、使用平台公钥,根据签名字符串 sign,对待签名字符串进行 RSA 验签(SHA256WithRSA)。

注意事项

1、商户私钥(private key)需填写到代码中供签名时使用。生成的私钥需妥善保管,避免遗失,不要泄露。

2、平台公钥(public key)用于接口返回数据、异步通知回调数据的验签。

3、具体发起支付相关流程的示例代码可下载 SDK 查看。

MD5 兼容签名(旧商户)

未升级 RSA 密钥的商户,可继续使用 MD5 签名方式。

1、按签名步骤 1~2 生成待签名字符串(剔除 sign、sign_type 及空值参数,按键名 ASCII 升序,以 & 连接成 a=1&b=2 形式,末尾不带 &)。

2、将商户密钥(商户后台 API 信息中的商户密钥)直接拼接在待签名字符串末尾,做 MD5 计算并转小写:

sign = md5(待签名字符串 + 商户密钥)

3、请求时 sign_typeMD5(或不传)。建议新对接商户统一使用 RSA 签名。

页面跳转支付

此接口可用于用户前台直接发起支付,使用 form 表单跳转或拼接成 url 跳转。

请求地址:

https://你的商户域名/api/pay/submit

请求方式:

POST 或 GET(推荐 POST,不容易被劫持)

请求参数说明:

字段名变量名必填类型示例值描述
商户IDpidInt1001
支付方式typeStringalipay支付方式列表
商户订单号out_trade_noString20160806151343349
异步通知地址notify_urlStringhttp://www.pay.com/notify_url.php服务器异步通知地址
跳转通知地址return_urlStringhttp://www.pay.com/return_url.php页面跳转通知地址
商品名称nameStringVIP会员如超过127个字节会自动截取
商品金额moneyString1.00单位:元,最大2位小数
业务扩展参数paramString没有请留空支付后原样返回
自定义进件商户IDmerchant_idInt对应进件商户列表的ID,未进件请勿传
自定义通道IDchannel_idInt对应自定义子通道的ID
买家身份证号cert_noString可限制指定买家,仅支持支付宝官方接口
买家真实姓名cert_nameString可限制指定买家,仅支持支付宝官方接口
买家最小年龄min_ageInt可限制买家年龄,仅支持支付宝官方接口
手续费承担方fee_modeInt0:商家承担,1:买家承担不传以商户后台配置为准
当前时间戳timestampString172120607210位整数,单位秒
签名字符串signString参考签名规则
签名类型sign_typeStringRSA默认为RSA

其他说明:

  • 支付方式(type)不传会跳转到收银台支付。

统一下单接口

此接口可用于服务器后端发起支付请求,会返回支付二维码链接、支付跳转url等。

请求地址:

https://你的商户域名/api/pay/create

请求方式:

POST

请求参数说明:

字段名变量名必填类型示例值描述
商户IDpidInt1001
接口类型methodStringweb接口类型列表
设备类型deviceStringpc仅通用网页支付需要传,设备类型列表
支付方式typeStringalipay支付方式列表
商户订单号out_trade_noString20160806151343349
异步通知地址notify_urlStringhttp://www.pay.com/notify_url.php服务器异步通知地址
跳转通知地址return_urlStringhttp://www.pay.com/return_url.php页面跳转通知地址
商品名称nameStringVIP会员如超过127个字节会自动截取
商品金额moneyString1.00单位:元,最大2位小数
用户IP地址clientipString192.168.1.100用户发起支付的IP地址
业务扩展参数paramString没有请留空支付后原样返回
被扫支付授权码auth_codeString仅被扫支付需要传
用户Openidsub_openidString仅JSAPI支付需要传
应用AppIdsub_appidString仅JSAPI支付(微信)需要传
是否小程序is_appletInt仅JSAPI支付需要传,1:是小程序
自定义进件商户IDmerchant_idInt对应进件商户列表的ID,未进件请勿传
自定义通道IDchannel_idInt对应自定义子通道的ID
买家身份证号cert_noString可限制指定买家,仅支持支付宝官方接口
买家真实姓名cert_nameString可限制指定买家,仅支持支付宝官方接口
买家最小年龄min_ageInt可限制买家年龄,仅支持支付宝官方接口
手续费承担方fee_modeInt0:商家承担,1:买家承担不传以商户后台配置为准
当前时间戳timestampString172120607210位整数,单位秒
签名字符串signString参考签名规则
签名类型sign_typeStringRSA默认为RSA

返回参数说明:

字段名变量名类型示例值描述
返回状态码codeInt00为成功,其它值为失败
错误信息msgString失败时返回原因
平台订单号trade_noString20160806151343349平台内部的订单号
发起支付类型pay_typeStringjump参考发起支付类型说明
发起支付参数pay_infoStringweixin://wxpay/bizpayurl?pr=04IPMKM根据不同的发起支付类型,返回内容也不一样
当前时间戳timestampString172120607210位整数,单位秒
签名字符串signString参考签名规则
签名类型sign_typeStringRSA默认为RSA

返回示例:

{
    "code": 0,
    "trade_no": "20160806151343349",
    "pay_type": "qrcode",
    "pay_info": "weixin://wxpay/bizpayurl?pr=04IPMKM"
}
{
    "code": 0,
    "trade_no": "20160806151343351",
    "pay_type": "jsapi",
    "pay_info": "{\"appId\":\"wx2421b1c4370ec43b\",\"timeStamp\":\"1395712654\",\"nonceStr\":\"e61463f8efa94090b1f366cccfbbb444\",\"package\":\"prepay_id=up_wx21201855730335ac86f8c43d1889123400\",\"signType\":\"RSA\",\"paySign\":\"oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\"}"
}
{
    "code": 0,
    "trade_no": "2024072320222180092",
    "pay_type": "scan",
    "pay_info": "{\"type\":\"wxpay\",\"trade_no\":\"2024072320222180092\",\"api_trade_no\":\"4200002345202407238253501450\",\"buyer\":\"o9uAcc6VlZxhcujpKIqQuWWoDQc\",\"money\":\"1.00\"}"
}
{
    "code": 0,
    "trade_no": "2024072320222180018",
    "pay_type": "wxplugin",
    "pay_info": "{\"appId\":\"wxc237fd59fbb634ae\",\"supplierId\":\"123456\",\"shopId\":\"123456\",\"orderId\":\"2024072320222180092\"}"
}
{
    "code": 0,
    "trade_no": "2024072320222180018",
    "pay_type": "wxapp",
    "pay_info": "{\"appId\":\"wxbb48bac536053072\",\"miniProgramId\":\"gh_bf9cd8cf50b5\",\"path\":\"pages/fromAppPay/index?orderid=123456\",\"extraData\":\"\"}"
}

接口类型列表

调用值描述
web通用网页支付(会根据 device 判断,自动返回跳转url/二维码/小程序跳转url等)
jump跳转支付(仅会返回跳转url)
jsapiJSAPI支付(小程序内支付使用,仅返回JSAPI参数,需传入 sub_openid 和 sub_appid 参数)
appAPP支付(iOS/安卓APP内支付使用,仅返回APP支付参数,或APP拉起微信小程序参数)
scan付款码支付(需传入 auth_code 参数,支付成功后返回订单信息)
applet小程序支付(微信小程序内使用,返回微信小程序插件参数或跳转小程序参数)

设备类型列表

调用值描述
pc电脑浏览器(默认)
mobile手机浏览器
qq手机QQ内浏览器
wechat微信内浏览器
alipay支付宝客户端
douyin抖音APP

发起支付类型说明

发起支付类型描述
jump返回支付跳转url
html返回html代码,用于支付跳转
qrcode返回支付二维码
urlscheme返回微信/支付宝小程序跳转url scheme
jsapi返回用于发起JSAPI支付的参数
app返回用于发起APP支付的参数
scan付款码支付成功,返回支付订单信息
wxplugin返回要拉起的微信小程序插件参数,用于未开通支付能力的小程序发起支付
wxapp返回要拉起的微信小程序和路径,用于APP内拉起微信小程序支付

其他说明:

  • 代码中需根据接口返回的 pay_type 值来展示具体的支付页面,例如扫码页面等。如果不懂怎么展示支付页面,可在 method 传入 jump,这样 pay_type 就只会返回 jump,直接跳转支付即可。
  • 付款码支付可不传支付类型 type 字段,会根据 auth_code 的数字自动判断支付类型。
  • 微信小程序插件支付,不同支付平台拉起支付方式不一样,可联系客服获取对接小程序插件的文档。
  • APP拉起微信小程序可参考微信官方文档:Launching a Mini-Program

订单查询

请求地址:

https://你的商户域名/api/pay/query

请求方式:

POST

请求参数说明:

字段名变量名必填类型示例值描述
商户IDpidInt1001
平台订单号trade_no特殊String20160806151343349与商户订单号必传其一
商户订单号out_trade_no特殊String20160806151343351与平台订单号必传其一
当前时间戳timestampString172120607210位整数,单位秒
签名字符串signString参考签名规则
签名类型sign_typeStringRSA默认为RSA

返回参数说明:

字段名变量名类型示例值描述
返回状态码codeInt00为成功,其它值为失败
错误信息msgString失败时返回原因
平台订单号trade_noString20160806151343349
商户订单号out_trade_noString20160806151343351
接口订单号api_trade_noString40001249985198893微信支付宝返回的单号
支付方式typeStringalipay支付方式列表
支付状态statusInt1支付状态列表
商户IDpidInt1001
订单创建时间addtimeString2024-07-01 16:47:32
订单完成时间endtimeString2024-07-01 16:49:24仅完成才返回
商品名称nameString
商品金额moneyString1.00
已退款金额refundmoneyString仅部分退款情况才返回
业务扩展参数paramString
支付用户标识buyerString一般为openid
支付用户IPclientipString
当前时间戳timestampString172120607210位整数,单位秒
签名字符串signString参考签名规则
签名类型sign_typeStringRSA默认为RSA

支付状态列表

状态值描述
0未支付
1已支付
2已退款
3已冻结
4预授权

支付结果通知

通知类型:

服务器异步通知(notify_url)、页面跳转通知(return_url)

请求方式:

GET

请求参数说明:

字段名变量名类型示例值描述
商户IDpidInt1001
平台订单号trade_noString20160806151343349
商户订单号out_trade_noString20160806151343351
接口订单号api_trade_noString40001249985198893微信支付宝返回的单号
支付方式typeStringalipay支付方式列表
交易状态trade_statusStringTRADE_SUCCESS固定为 TRADE_SUCCESS
订单创建时间addtimeString2024-07-01 16:47:32
订单完成时间endtimeString2024-07-01 16:49:24仅完成才返回
商品名称nameString
商品金额moneyString1.00
业务扩展参数paramString
支付用户标识buyerString一般为openid
当前时间戳timestampString172120607210位整数,单位秒
签名字符串signString参考签名规则
签名类型sign_typeStringRSA默认为RSA

返回内容说明:

收到异步通知后,需返回 success 以表示服务器接收到了订单通知。

其他说明:

  • 商户系统代码内务必对返回的签名 sign 进行校验,并且判断 trade_status 的值是否等于 TRADE_SUCCESS。
  • 支付平台可能会增加回调字段,验证签名时必须支持增加的扩展字段。

订单关闭

请求地址:

https://你的商户域名/api/pay/close

请求方式:

POST

请求参数说明:

字段名变量名必填类型示例值描述
商户IDpidInt1001
平台订单号trade_no特殊String20160806151343349与商户订单号必传其一
商户订单号out_trade_no特殊String20160806151343351与平台订单号必传其一
当前时间戳timestampString172120607210位整数,单位秒
签名字符串signString参考签名规则
签名类型sign_typeStringRSA默认为RSA

返回参数说明:

字段名变量名类型示例值描述
返回状态码codeInt00为成功,其它值为失败
返回信息msgString失败或成功时返回提示
当前时间戳timestampString172120607210位整数,单位秒
签名字符串signString参考签名规则
签名类型sign_typeStringRSA默认为RSA

其他说明:

  • 只有部分支付插件支持关闭订单操作。

支付方式列表

下单接口中 type 字段的调用值,由平台按商户已开通的支付通道动态提供,实际可用取值以商户后台展示为准。

调用值描述
alipay支付宝
wxpay微信支付
qqpayQQ钱包

注:上表为文档示例中出现的常用取值;平台内置更多支付通道,具体可传值以商户后台「支付方式 / 对接信息」页面为准。