支付系统接口文档

供第三方商户对接使用 — 版本 3.0

接入准备

商户接入前需获取以下信息(请联系管理员开通):

参数说明
商户号 (mchId)平台分配的唯一商户编号
商户密钥 (key)用于签名校验,可在商户后台查看或修改

签名规则

所有接口均采用统一的签名算法,规则如下:

协议规范

传输方式HTTP(生产环境建议 HTTPS)
请求方式POST/JSON,请求头:Content-Type: application/json
字符编码UTF-8
签名算法MD5(32位,不区分大小写)
金额单位人民币,参数值不能带小数

签名生成步骤

第一步:将所有非空参数值的参数(不含 sign)按参数名 ASCII 码从小到大排序(字典序),使用 URL 键值对格式拼接成字符串。

第二步:在拼接字符串末尾追加 &key=商户密钥,对该字符串进行 MD5 运算,得到 32 位签名值(不区分大小写)。

重要规则:
◆ 参数名 ASCII 码从小到大排序(字典序)
◆ 参数值为空或空字符串时不参与签名
◆ 参数名区分大小写
sign 参数不参与签名
◆ 接口可能增加字段,验证签名时必须支持扩展字段
◆ 所有非空值的参数都参与签名

签名示例

假设请求参数如下:

{
  "mchId": "10001",
  "productId": "8001",
  "outTradeNo": "SH20260308001",
  "amount": 10000,
  "reqTime": 1772956800000,
  "notifyUrl": "https://www.example.com/notify",
  "returnUrl": "https://www.example.com/return"
}

待签名字符串(参数名字典序排列):

amount=10000&mchId=10001&notifyUrl=https://www.example.com/notify&outTradeNo=SH20260308001&productId=8001&reqTime=1772956800000&returnUrl=https://www.example.com/return&key=YOUR_SECRET_KEY

对上述字符串执行 md5() 得到 32 位密文,即为 sign 的值。

产品ID列表

产品ID即我方通道类型(通道编码),商户在创建订单时需传入对应的 productId 参数。具体可用产品ID以接口返回或客服提供为准,联系客服获取即可

产品ID = 通道类型,联系客服获取最新可用列表。

查询可用产品接口

https://www.lubankeji.fyi/payment/api/product_list

HTTP GET,无需签名,返回当前启用的通道类型列表(product_id 即通道类型编码,product_name 为名称,remark 为备注):

{
  "code": 0,
  "data": [
    { "product_id": "defaultpay", "product_name": "默认支付", "remark": "" },
    { "product_id": "kuaijie", "product_name": "快捷支付", "remark": "" }
  ]
}

统一下单

接口说明

商户业务系统通过统一下单接口发起支付收款订单,支付网关会根据商户传入的产品ID选择对应的支付方式完成支付下单,并返回对应的支付参数。

本接口支持两种返回形态:链接形态(返回 payUrl,引导用户访问链接完成支付)与 payData 形态(部分通道如银行卡转账会返回 payDatapayDataType,内容可能为银行卡信息等 JSON 字符串,商户解析后展示给用户)。

请求URL

https://www.lubankeji.fyi/payment/api/pay/v2/unifiedOrder

请求方式

POST/JSON   Content-Type: application/json   字符编码:UTF-8

请求参数

参数字段名必填类型示例值描述
mchId商户号 string10001商户号
productId产品ID string8001产品ID,见产品ID列表
outTradeNo商户订单号 stringSH20260308001商户生成的订单号,仅限字母和数字,长度 16~33 位
amount支付金额 (单位: 分) int10000支付金额 (单位: 分),例如 10000 即为 100.00 元
reqTime请求时间 long1772956800000请求接口时间,13位时间戳
notifyUrl异步通知地址 stringhttps://test.com/notify支付结果异步回调URL,只有传了该值才会发起回调
returnUrl跳转通知地址 stringhttps://test.com/return支付结果同步跳转通知URL
userId商户用户ID stringUSER_001商户用户ID,最大32个字符
userName商户用户姓名 string小明商户侧用户姓名(如付款人姓名),可选;有值时参与签名
userIp商户用户IP string1.1.1.1商户用户IP,支持IPV6
sign签名 stringf52ab92457b1a97c...签名值,不参与签名

返回参数

参数字段名必填类型示例值描述
code返回状态码int0网关返回码:0=成功,其他失败
message返回信息stringsuccess具体错误原因
以下是 data 数据说明,其非空值的参数都参与签名
mchId商户号string10001商户号
tradeNo支付订单号stringPAY20260308...返回支付系统订单号
outTradeNo商户订单号stringSH20260308001返回商户传入的订单号
amount订单金额 (单位: 分)int10000订单金额 (单位: 分)
payUrl支付地址见说明stringhttps://... 或 ""payDataType 时为支付跳转 URL;有 payDataType 时为空字符串
payData支付数据string见下方示例payDataType 配套,内容格式由 payDataType 决定
payDataType支付数据类型stringbankCard枚举值见下方说明。存在时使用 payData;不存在时使用 payUrl
sign签名stringf52ab924...对 data 内非空数据签名(含 payData、payDataType 时一并参与)

成功响应示例(链接形态)

{
  "code": 0,
  "message": "success",
  "data": {
    "mchId": "10001",
    "tradeNo": "PAY20260308123456",
    "outTradeNo": "SH20260308001",
    "amount": 10000,
    "payUrl": "https://pay.example.com/cashier/abc123",
    "sign": "f52ab92457b1a97c1dbbc794de8dea8e"
  }
}

成功响应示例(payData 形态,如银行卡信息)

{
  "code": 0,
  "message": "success",
  "data": {
    "mchId": "10001",
    "tradeNo": "PAY20260308123456",
    "outTradeNo": "SH20260308001",
    "amount": 10000,
    "payUrl": "",
    "payData": "{\"accNo\":\"6222031512008267248\",\"accName\":\"池贤贵\",\"bankName\":\"工商银行\"}",
    "payDataType": "bankCard",
    "sign": "a1b2c3d4..."
  }
}
payDataType 枚举值:
含义payData 格式商户处理方式
bankCard银行卡转账信息JSON 字符串,含 accNo(银行卡号)、accName(户名)、bankName(开户行)解析 JSON 后展示卡号、户名、开户行,引导用户转账
(不存在) — 当响应中无 payDataType 字段时,表示链接形态,商户使用 payUrl 跳转完成支付

失败响应示例

{
  "code": -1,
  "message": "验证签名不正确"
}

支付回调通知

接口说明

当订单支付成功时,支付网关会向商户系统发起回调通知。如果商户系统没有正确返回,支付网关会延迟再次通知。

商户接收到通知后,返回 SUCCESSOK 字符串(不区分大小写),平台将不再通知。
如果没有反馈,平台将在30分钟内通知多次,之后将不再主动发起通知。

注意:商户收到通知需做幂等性处理,判断本地订单状态,防止重复上分。
收到回调通知时要判断 state=1 表示订单支付成功,并判断 payAmount 是否与订单金额一致。

请求方式

POST/JSON   Content-Type: application/json   字符编码:UTF-8

请求URL:该URL是通过【统一下单API】中提交的参数 notifyUrl 设置。

平台发起异步通知的出口 IP 为 93.177.77.4418.162.53.156,商户可在服务器侧做 IP 白名单校验。

通知参数

参数字段名必填类型示例值描述
mchId商户号string10001商户号
productId产品IDstring8001产品ID
tradeNo支付订单号stringPAY20260308...返回支付系统订单号
outTradeNo商户订单号stringSH20260308001返回商户传入的订单号,仅限字母和数字,长度 16~33 位
amount订单金额 (单位: 分)int10000订单金额 (单位: 分)
payAmount实际支付金额 (单位: 分)int10000实际支付金额 (单位: 分),请用这个金额上分
state订单状态int1订单状态:0-待支付,1-成功
createTime订单创建时间string2026/03/08 12:00:00格式:yyyy/MM/dd HH:mm:ss
payTime订单支付时间string2026/03/08 12:00:05格式:yyyy/MM/dd HH:mm:ss
sign签名stringf52ab924...签名值,不参与签名

签名验证

签名方法与请求签名一致:所有非空参数(不含 sign)按参数名字典序排序后拼接,追加 &key=商户密钥,做 MD5。

响应要求

商户收到通知后,请验证签名并处理业务逻辑,然后返回 SUCCESSOK(不区分大小写)。

查询订单

接口说明

商户通过该接口查询订单,支付网关会返回订单最新的数据。

请求URL

https://www.lubankeji.fyi/payment/api/pay/queryOrder

请求方式

POST/JSON   Content-Type: application/json   字符编码:UTF-8

请求参数

参数字段名必填类型示例值描述
mchId商户号string10001商户号
outTradeNo商户订单号stringSH20260308001商户生成的订单号,仅限字母和数字,长度 16~33 位
reqTime请求时间long1772956800000请求接口时间,13位时间戳
sign签名stringf52ab924...签名值,不参与签名

返回参数

参数字段名必填类型示例值描述
code返回状态码int0网关返回码:0=成功,其他失败
message返回信息stringsuccess具体错误原因
以下是 data 数据说明,其非空值的参数都参与签名
mchId商户号string10001商户号
productId产品IDstring8001产品ID
tradeNo支付订单号stringPAY20260308...返回支付系统订单号
outTradeNo商户订单号stringSH20260308001返回商户传入的订单号
amount订单金额 (单位: 分)int10000订单金额 (单位: 分)
payAmount支付订单金额 (单位: 分)int10000订单支付金额 (单位: 分)
createTime下单时间string2026/03/08 12:00:00下单时间,格式:yyyy/MM/dd HH:mm:ss
payTime支付成功时间string2026/03/08 12:00:05支付成功时间,格式:yyyy/MM/dd HH:mm:ss
state订单状态int1订单状态:0=待支付,1=支付成功,2=支付失败
sign签名stringf52ab924...对 data 内数据签名

成功响应示例

{
  "code": 0,
  "message": "success",
  "data": {
    "mchId": "10001",
    "productId": "8001",
    "tradeNo": "PAY20260308123456",
    "outTradeNo": "SH20260308001",
    "amount": 10000,
    "payAmount": 10000,
    "state": 1,
    "createTime": "2026/03/08 12:00:00",
    "payTime": "2026/03/08 12:00:05",
    "sign": "f52ab92457b1a97c1dbbc794de8dea8e"
  }
}

注意事项

← 返回首页