鸿途Pay 开放接口文档
接口基础地址以商户后台实际网关地址为准,下文以 https://你的商户域名/ 表示
欢迎接入鸿途Pay。本文档面向已开通商户的技术对接人员,涵盖签名规则、页面跳转支付、统一下单、订单查询、支付结果通知、关闭订单、支付方式列表等支付相关接口的说明。
接口基础地址以商户后台实际网关地址为准,下文以 https://你的商户域名/ 表示
欢迎接入鸿途Pay。本文档面向已开通商户的技术对接人员,涵盖签名规则、页面跳转支付、统一下单、订单查询、支付结果通知、关闭订单、支付方式列表等支付相关接口的说明。
对本平台接口发起的请求,需要进行签名。
1、获取请求报文所有非空请求参数,不包括数组、字节类型参数,如文件、字节流,剔除 sign、sign_type 字段,并按照第一个字符的键值 ASCII 码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值 ASCII 码递增排序,以此类推。
2、将排序后的参数和对应值,组合成“参数=参数值”的格式,并且把这些参数用 & 字符连接起来,此时生成的字符串为待签名字符串。
3、使用商户私钥,对待签名字符串计算 RSA 签名(SHA256WithRSA),得到签名 sign。
针对接口返回的数据,以及异步通知回调的数据,需进行验签。
1、先根据签名步骤里面的 1~2,获取到待签名字符串。
2、使用平台公钥,根据签名字符串 sign,对待签名字符串进行 RSA 验签(SHA256WithRSA)。
1、商户私钥(private key)需填写到代码中供签名时使用。生成的私钥需妥善保管,避免遗失,不要泄露。
2、平台公钥(public key)用于接口返回数据、异步通知回调数据的验签。
3、具体发起支付相关流程的示例代码可下载 SDK 查看。
未升级 RSA 密钥的商户,可继续使用 MD5 签名方式。
1、按签名步骤 1~2 生成待签名字符串(剔除 sign、sign_type 及空值参数,按键名 ASCII 升序,以 & 连接成 a=1&b=2 形式,末尾不带 &)。
2、将商户密钥(商户后台 API 信息中的商户密钥)直接拼接在待签名字符串末尾,做 MD5 计算并转小写:
sign = md5(待签名字符串 + 商户密钥)
3、请求时 sign_type 传 MD5(或不传)。建议新对接商户统一使用 RSA 签名。
此接口可用于用户前台直接发起支付,使用 form 表单跳转或拼接成 url 跳转。
https://你的商户域名/api/pay/submit
POST 或 GET(推荐 POST,不容易被劫持)
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1001 | |
| 支付方式 | type | 是 | String | alipay | 支付方式列表 |
| 商户订单号 | out_trade_no | 是 | String | 20160806151343349 | |
| 异步通知地址 | notify_url | 是 | String | http://www.pay.com/notify_url.php | 服务器异步通知地址 |
| 跳转通知地址 | return_url | 是 | String | http://www.pay.com/return_url.php | 页面跳转通知地址 |
| 商品名称 | name | 是 | String | VIP会员 | 如超过127个字节会自动截取 |
| 商品金额 | money | 是 | String | 1.00 | 单位:元,最大2位小数 |
| 业务扩展参数 | param | 否 | String | 没有请留空 | 支付后原样返回 |
| 自定义进件商户ID | merchant_id | 否 | Int | 对应进件商户列表的ID,未进件请勿传 | |
| 自定义通道ID | channel_id | 否 | Int | 对应自定义子通道的ID | |
| 买家身份证号 | cert_no | 否 | String | 可限制指定买家,仅支持支付宝官方接口 | |
| 买家真实姓名 | cert_name | 否 | String | 可限制指定买家,仅支持支付宝官方接口 | |
| 买家最小年龄 | min_age | 否 | Int | 可限制买家年龄,仅支持支付宝官方接口 | |
| 手续费承担方 | fee_mode | 否 | Int | 0:商家承担,1:买家承担 | 不传以商户后台配置为准 |
| 当前时间戳 | timestamp | 是 | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | 是 | String | 参考签名规则 | |
| 签名类型 | sign_type | 是 | String | RSA | 默认为RSA |
此接口可用于服务器后端发起支付请求,会返回支付二维码链接、支付跳转url等。
https://你的商户域名/api/pay/create
POST
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1001 | |
| 接口类型 | method | 是 | String | web | 接口类型列表 |
| 设备类型 | device | 否 | String | pc | 仅通用网页支付需要传,设备类型列表 |
| 支付方式 | type | 是 | String | alipay | 支付方式列表 |
| 商户订单号 | out_trade_no | 是 | String | 20160806151343349 | |
| 异步通知地址 | notify_url | 是 | String | http://www.pay.com/notify_url.php | 服务器异步通知地址 |
| 跳转通知地址 | return_url | 否 | String | http://www.pay.com/return_url.php | 页面跳转通知地址 |
| 商品名称 | name | 是 | String | VIP会员 | 如超过127个字节会自动截取 |
| 商品金额 | money | 是 | String | 1.00 | 单位:元,最大2位小数 |
| 用户IP地址 | clientip | 是 | String | 192.168.1.100 | 用户发起支付的IP地址 |
| 业务扩展参数 | param | 否 | String | 没有请留空 | 支付后原样返回 |
| 被扫支付授权码 | auth_code | 否 | String | 仅被扫支付需要传 | |
| 用户Openid | sub_openid | 否 | String | 仅JSAPI支付需要传 | |
| 应用AppId | sub_appid | 否 | String | 仅JSAPI支付(微信)需要传 | |
| 是否小程序 | is_applet | 否 | Int | 仅JSAPI支付需要传,1:是小程序 | |
| 自定义进件商户ID | merchant_id | 否 | Int | 对应进件商户列表的ID,未进件请勿传 | |
| 自定义通道ID | channel_id | 否 | Int | 对应自定义子通道的ID | |
| 买家身份证号 | cert_no | 否 | String | 可限制指定买家,仅支持支付宝官方接口 | |
| 买家真实姓名 | cert_name | 否 | String | 可限制指定买家,仅支持支付宝官方接口 | |
| 买家最小年龄 | min_age | 否 | Int | 可限制买家年龄,仅支持支付宝官方接口 | |
| 手续费承担方 | fee_mode | 否 | Int | 0:商家承担,1:买家承担 | 不传以商户后台配置为准 |
| 当前时间戳 | timestamp | 是 | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | 是 | String | 参考签名规则 | |
| 签名类型 | sign_type | 是 | String | RSA | 默认为RSA |
| 字段名 | 变量名 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|
| 返回状态码 | code | Int | 0 | 0为成功,其它值为失败 |
| 错误信息 | msg | String | 失败时返回原因 | |
| 平台订单号 | trade_no | String | 20160806151343349 | 平台内部的订单号 |
| 发起支付类型 | pay_type | String | jump | 参考发起支付类型说明 |
| 发起支付参数 | pay_info | String | weixin://wxpay/bizpayurl?pr=04IPMKM | 根据不同的发起支付类型,返回内容也不一样 |
| 当前时间戳 | timestamp | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | String | 参考签名规则 | |
| 签名类型 | sign_type | String | RSA | 默认为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) |
jsapi | JSAPI支付(小程序内支付使用,仅返回JSAPI参数,需传入 sub_openid 和 sub_appid 参数) |
app | APP支付(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内拉起微信小程序支付 |
https://你的商户域名/api/pay/query
POST
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1001 | |
| 平台订单号 | trade_no | 特殊 | String | 20160806151343349 | 与商户订单号必传其一 |
| 商户订单号 | out_trade_no | 特殊 | String | 20160806151343351 | 与平台订单号必传其一 |
| 当前时间戳 | timestamp | 是 | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | 是 | String | 参考签名规则 | |
| 签名类型 | sign_type | 是 | String | RSA | 默认为RSA |
| 字段名 | 变量名 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|
| 返回状态码 | code | Int | 0 | 0为成功,其它值为失败 |
| 错误信息 | msg | String | 失败时返回原因 | |
| 平台订单号 | trade_no | String | 20160806151343349 | |
| 商户订单号 | out_trade_no | String | 20160806151343351 | |
| 接口订单号 | api_trade_no | String | 40001249985198893 | 微信支付宝返回的单号 |
| 支付方式 | type | String | alipay | 支付方式列表 |
| 支付状态 | status | Int | 1 | 支付状态列表 |
| 商户ID | pid | Int | 1001 | |
| 订单创建时间 | addtime | String | 2024-07-01 16:47:32 | |
| 订单完成时间 | endtime | String | 2024-07-01 16:49:24 | 仅完成才返回 |
| 商品名称 | name | String | ||
| 商品金额 | money | String | 1.00 | |
| 已退款金额 | refundmoney | String | 仅部分退款情况才返回 | |
| 业务扩展参数 | param | String | ||
| 支付用户标识 | buyer | String | 一般为openid | |
| 支付用户IP | clientip | String | ||
| 当前时间戳 | timestamp | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | String | 参考签名规则 | |
| 签名类型 | sign_type | String | RSA | 默认为RSA |
| 状态值 | 描述 |
|---|---|
| 0 | 未支付 |
| 1 | 已支付 |
| 2 | 已退款 |
| 3 | 已冻结 |
| 4 | 预授权 |
服务器异步通知(notify_url)、页面跳转通知(return_url)
GET
| 字段名 | 变量名 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | Int | 1001 | |
| 平台订单号 | trade_no | String | 20160806151343349 | |
| 商户订单号 | out_trade_no | String | 20160806151343351 | |
| 接口订单号 | api_trade_no | String | 40001249985198893 | 微信支付宝返回的单号 |
| 支付方式 | type | String | alipay | 支付方式列表 |
| 交易状态 | trade_status | String | TRADE_SUCCESS | 固定为 TRADE_SUCCESS |
| 订单创建时间 | addtime | String | 2024-07-01 16:47:32 | |
| 订单完成时间 | endtime | String | 2024-07-01 16:49:24 | 仅完成才返回 |
| 商品名称 | name | String | ||
| 商品金额 | money | String | 1.00 | |
| 业务扩展参数 | param | String | ||
| 支付用户标识 | buyer | String | 一般为openid | |
| 当前时间戳 | timestamp | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | String | 参考签名规则 | |
| 签名类型 | sign_type | String | RSA | 默认为RSA |
收到异步通知后,需返回 success 以表示服务器接收到了订单通知。
https://你的商户域名/api/pay/close
POST
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1001 | |
| 平台订单号 | trade_no | 特殊 | String | 20160806151343349 | 与商户订单号必传其一 |
| 商户订单号 | out_trade_no | 特殊 | String | 20160806151343351 | 与平台订单号必传其一 |
| 当前时间戳 | timestamp | 是 | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | 是 | String | 参考签名规则 | |
| 签名类型 | sign_type | 是 | String | RSA | 默认为RSA |
| 字段名 | 变量名 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|
| 返回状态码 | code | Int | 0 | 0为成功,其它值为失败 |
| 返回信息 | msg | String | 失败或成功时返回提示 | |
| 当前时间戳 | timestamp | String | 1721206072 | 10位整数,单位秒 |
| 签名字符串 | sign | String | 参考签名规则 | |
| 签名类型 | sign_type | String | RSA | 默认为RSA |
下单接口中 type 字段的调用值,由平台按商户已开通的支付通道动态提供,实际可用取值以商户后台展示为准。
| 调用值 | 描述 |
|---|---|
alipay | 支付宝 |
wxpay | 微信支付 |
qqpay | QQ钱包 |
注:上表为文档示例中出现的常用取值;平台内置更多支付通道,具体可传值以商户后台「支付方式 / 对接信息」页面为准。