快速开始

欢迎使用 Jeepay 支付网关 API。本文档描述了代收(支付)、代付(转账)和退款相关的 API 接口,供第三方平台对接使用。

接入流程

注册商户

联系管理员获取 mchNo(商户号)和 appId(应用ID)

获取密钥

在商户后台获取 appSecret(商户密钥),用于签名计算

对接开发

根据本文档实现 API 调用,注意正确实现签名算法

联调测试

使用本页面的在线测试工具进行接口调试

通用请求参数

所有 API 请求均需包含以下公共参数:

参数名类型必填说明
mchNoString必填商户号
appIdString必填商户应用ID
versionString必填接口版本号,固定值:1.0
signTypeString必填签名类型,固定值:MD5
signString必填签名值,参见签名算法
reqTimeString必填请求时间,13位毫秒时间戳

通用响应格式

JSON 响应结构
{
  "code": 0,        // 0=成功,其他=失败
  "msg": "SUCCESS",  // 状态描述
  "sign": "D6B...",  // 响应签名
  "data": { ... }    // 业务数据
}
💡 请求方式 所有接口均使用 POST 方式请求,参数通过 application/x-www-form-urlencoded 格式提交。

签名算法

所有 API 请求和响应均需要进行签名验证,以确保数据安全。

筛选参数

将所有非空参数(排除 sign 本身),按参数名 ASCII 字典序(不区分大小写)排序

拼接字符串

将排序后的参数拼接为 key1=value1&key2=value2&...&key=商户密钥 格式

计算 MD5

对拼接后的字符串做 MD5 运算,将结果转为大写,即为签名值

签名示例

假设商户密钥为 abc123,请求参数如下:

原始参数
mchNo=M1234567890
appId=app_001
mchOrderNo=ORDER_001
amount=10000
currency=PHP
wayCode=ALI_QR
subject=测试商品
body=商品描述
version=1.0
signType=MD5
reqTime=1708416000000
第1步:排序 + 拼接
amount=10000&appId=app_001&body=商品描述¤cy=PHP&mchNo=M1234567890&mchOrderNo=ORDER_001&reqTime=1708416000000&signType=MD5&subject=测试商品&version=1.0&wayCode=ALI_QR&key=abc123
第2步:MD5 → 大写
sign = MD5(拼接字符串).toUpperCase()
     = "A1B2C3D4E5F6..."
⚠️ 注意事项
  • 参数值为空的字段不参与签名
  • sign 字段本身不参与签名
  • 排序不区分大小写(case-insensitive)
  • 最终拼接 key=商户密钥,注意没有尾部 &

币种列表

当前支持的币种如下。请在请求中使用三位 ISO-4217 币种代码。

PHP
菲律宾比索
¥
CNY
人民币
$
USD
美元
Rp
IDR
印尼盾
VND
越南盾
฿
THB
泰铢
RM
MYR
马来西亚林吉特
INR
印度卢比

统一下单

商户通过该接口创建支付订单,获取支付链接或支付参数。

POST /api/pay/unifiedOrder

请求参数

参数名类型必填说明
mchOrderNoString必填商户订单号,需唯一
wayCodeString必填支付方式代码,如 ALI_QRWX_JSAPI
amountLong必填支付金额,单位:分
currencyString必填货币代码,如 PHPCNY
subjectString必填商品标题
bodyString必填商品描述信息
clientIpString选填客户端IP地址
notifyUrlString选填异步通知地址(支付成功后回调)
returnUrlString选填页面跳转通知地址
expiredTimeInteger选填订单失效时间,单位:秒
channelExtraString选填渠道额外参数(JSON格式)
extParamString选填商户扩展参数,原样返回
divisionModeByte选填分账模式:0-不分账 1-自动分账 2-手动分账

响应参数

参数名类型说明
payOrderIdString支付系统订单号
mchOrderNoString商户订单号
orderStateInteger订单状态:0-生成 1-支付中 2-成功 3-失败 4-已撤销 5-已退款 6-已关闭
payDataTypeString支付数据类型:payUrl/form/wxapp/codeUrl/codeImgUrl/none
payDataString支付数据(跳转URL/二维码/表单等)
errCodeString渠道错误码
errMsgString渠道错误描述

请求示例

JSON 请求体
{
  "mchNo": "M1234567890",
  "appId": "app_001",
  "mchOrderNo": "ORDER_20260220_001",
  "wayCode": "ALI_QR",
  "amount": 10000,
  "currency": "PHP",
  "subject": "充值100元",
  "body": "账户充值",
  "notifyUrl": "https://your-site.com/notify",
  "version": "1.0",
  "signType": "MD5",
  "reqTime": "1708416000000",
  "sign": "A1B2C3D4E5F6..."
}

响应示例

成功响应
{
  "code": 0,
  "msg": "SUCCESS",
  "sign": "D6B7C8A9...",
  "data": {
    "payOrderId": "P1234567890",
    "mchOrderNo": "ORDER_20260220_001",
    "orderState": 1,
    "payDataType": "payUrl",
    "payData": "https://pay.example.com/cashier/xxx"
  }
}
🧪 在线测试 - 统一下单

查询订单

查询支付订单状态,支持通过商户订单号或系统订单号查询。

POST /api/pay/query

请求参数

参数名类型必填说明
payOrderIdString二选一支付系统订单号
mchOrderNoString二选一商户订单号
💡 提示 payOrderIdmchOrderNo 不能同时为空,至少传一个。

响应参数

参数名类型说明
payOrderIdString支付系统订单号
mchOrderNoString商户订单号
stateInteger订单状态:0-生成 1-支付中 2-成功 3-失败 4-已撤销 5-已退款 6-已关闭
ifCodeString支付接口代码
wayCodeString支付方式代码
amountLong支付金额(分)
currencyString货币代码
successTimeLong支付成功时间(时间戳)
🧪 在线测试 - 查询订单

关闭订单

关闭未支付的订单,仅支持订单状态为"生成"或"支付中"的订单。

POST /api/pay/close

请求参数

参数名类型必填说明
payOrderIdString二选一支付系统订单号
mchOrderNoString二选一商户订单号
🧪 在线测试 - 关闭订单

支付回调通知

当支付成功后,系统将向商户配置的 notifyUrl 发送异步通知。

💡 回调机制
  • 通知方式:POST 请求 + application/x-www-form-urlencoded
  • 通知频率:支付成功后立即通知,失败后间隔 30s、1min、5min、30min 重试
  • 成功标识:商户响应 HTTP 200 且内容为 success 即视为通知成功
  • 签名验证:通知参数中包含 sign,商户需验证签名

通知参数

参数名类型说明
payOrderIdString支付系统订单号
mchNoString商户号
appIdString应用ID
mchOrderNoString商户订单号
ifCodeString支付接口代码
wayCodeString支付方式代码
amountLong支付金额(分)
currencyString货币代码
stateInteger订单状态:2=成功
successTimeLong支付成功时间
signString签名值
⚠️ 重要 收到通知后必须验证签名,并响应字符串 success(注意小写),否则系统将持续重发。

发起转账

商户通过该接口发起代付(转账)请求,将资金转入指定账户。

POST /api/transferOrder

请求参数

参数名类型必填说明
mchOrderNoString必填商户订单号
ifCodeString必填支付接口代码
entryTypeString必填入账方式:WX_CASH-微信零钱 ALIPAY_CASH-支付宝账户 BANK_CARD-银行卡
amountLong必填转账金额,单位:分
currencyString必填货币代码
accountNoString必填收款账号
accountNameString选填收款人姓名
bankNameString选填收款人开户行名称
clientIpString选填客户端IP地址
transferDescString必填转账备注信息
notifyUrlString选填异步通知地址
channelExtraString选填渠道额外参数(JSON格式)
extParamString选填商户扩展参数

响应参数

参数名类型说明
transferIdString转账系统订单号
mchOrderNoString商户订单号
stateInteger状态:0-生成 1-处理中 2-成功 3-失败
channelOrderNoString渠道订单号
errCodeString错误码
errMsgString错误描述
🧪 在线测试 - 发起转账

查询转账

查询转账订单状态。

POST /api/transfer/query

请求参数

参数名类型必填说明
transferIdString二选一转账系统订单号
mchOrderNoString二选一商户订单号
🧪 在线测试 - 查询转账

转账回调通知

转账完成后,系统将向商户配置的 notifyUrl 地址发送异步通知。

通知参数

参数名类型说明
transferIdString转账系统订单号
mchNoString商户号
appIdString应用ID
mchOrderNoString商户订单号
amountLong转账金额(分)
currencyString货币代码
stateInteger转账状态:2=成功 3=失败
signString签名值
💡 响应规范 商户收到通知后,验证签名成功请响应 success 字符串。

发起退款

商户通过该接口对已支付的订单发起退款。

POST /api/refund/refundOrder

请求参数

参数名类型必填说明
mchOrderNoString二选一原商户订单号
payOrderIdString二选一原支付系统订单号
mchRefundNoString必填商户退款单号
refundAmountLong必填退款金额,单位:分
currencyString必填货币代码
refundReasonString必填退款原因
clientIpString选填客户端IP地址
notifyUrlString选填异步通知地址
channelExtraString选填渠道额外参数
extParamString选填商户扩展参数

响应参数

参数名类型说明
refundOrderIdString退款系统订单号
payOrderIdString原支付订单号
mchRefundNoString商户退款单号
stateInteger退款状态:0-生成 1-处理中 2-成功 3-失败
refundAmountLong退款金额(分)
errCodeString错误码
errMsgString错误描述
🧪 在线测试 - 发起退款

查询退款

查询退款订单状态。

POST /api/refund/query

请求参数

参数名类型必填说明
refundOrderIdString二选一退款系统订单号
mchRefundNoString二选一商户退款单号
🧪 在线测试 - 查询退款

退款回调通知

退款完成后,系统将向商户配置的 notifyUrl 地址发送异步通知。

通知参数

参数名类型说明
refundOrderIdString退款系统订单号
payOrderIdString原支付订单号
mchNoString商户号
appIdString应用ID
mchRefundNoString商户退款单号
refundAmountLong退款金额(分)
currencyString货币代码
stateInteger退款状态:2=成功 3=失败
signString签名值

PayPH 兼容 API — 说明

💡 兼容模式 本平台额外提供一套兼容 PayPH 格式的 API 接口。如果您之前对接的是 PayPH 平台,只需将 网关地址 改为 http://api.olyester.com,并将 parter 设为本平台分配的 AppIDkey 设为对应的 AppSecret,即可无缝迁移,无需修改其他代码。

兼容端点与原有 Jeepay API 并行运行,互不影响。下方为各端点说明。

端点方法说明
/payment/createPOST发起代收(下单)
/pay/queryPOST代收订单查询
/pay/transferPOST发起代付(转账)
/pay/transfer/queryPOST代付查询 V1
/pay/transfer/query/detailPOST代付查询 V2(详情)
/payment/query/balancePOST商户余额查询
/pay/transfer/receiptPOST获取代付凭证

PayPH 兼容 — 签名规则

签名算法与 PayPH 完全一致:

  1. 将所有非空参数(不含 sign不含 clientip不含 attach)按参数名 ASCII 升序排列
  2. 拼接为 key1=value1&key2=value2&...&key=YOUR_SECRET
  3. 对拼接字符串计算 MD5,结果转为 小写
⚠️ 与 Jeepay 原生签名的区别
PayPH 兼容接口的 MD5 结果为 小写(Jeepay 原生为大写)。

签名示例(PHP)

$params = [
    'parter'    => '699ac3a959be3e4c538a2034',
    'value'     => '100.00',
    'type'      => 'GcashWap',
    'orderid'   => 'T20260222001',
    'notifyurl' => 'https://your-site.com/callback',
];
ksort($params, SORT_FLAG_CASE | SORT_STRING);
$str = '';
foreach ($params as $k => $v) {
    if ($v !== '') $str .= "$k=$v&";
}
$str .= 'key=' . $secret;
$sign = md5($str); // 小写

发起代收 — POST /payment/create

POST http://api.olyester.com/payment/create

请求参数

参数名必填说明
parter商户 AppID
value金额(元),如 100.00
type支付类型:GcashWapMayaGotyme
orderid商户订单号
notifyurl异步通知地址
callbackurl前端跳转地址
clientip客户端IP(不参与签名)
attach附加参数(不参与签名,回调原样返回)
sign签名值(MD5 小写)

响应示例

{
    "code": 200,
    "info": "success",
    "param": {
        "payment_url": "https://pay.example.com/cashier/xxxx"
    }
}

代收查询 — POST /pay/query

POST http://api.olyester.com/pay/query

请求参数

参数名必填说明
parter商户 AppID
orderid商户订单号

响应示例

{
    "code": "200",
    "state": "200",
    "msg": "支付成功",
    "price": "100.00"
}

state 值:100=处理中,200=支付成功,400=支付失败

发起代付 — POST /pay/transfer

POST http://api.olyester.com/pay/transfer

请求参数

参数名必填说明
parter商户 AppID
order_no商户订单号
type入账方式:PH_GCASHPH_MAYABANK_CARD
name收款人姓名
account_number收款账号
money金额(元),如 100.00
notify_url异步通知地址
sign签名值(MD5 小写)

响应示例

{
    "code": "200",
    "info": "提交成功"
}

代付查询 — POST /pay/transfer/query

POST http://api.olyester.com/pay/transfer/query

V2 详细版:POST /pay/transfer/query/detail

请求参数

参数名必填说明
parter商户 AppID
order_no商户订单号

V1 响应示例

{
    "code": "200",
    "info": "success",
    "param": {
        "status": 3,
        "price": "100.00"
    }
}

status 值:1=未处理,2=处理中,3=已支付,4=支付失败

V2 响应示例(detail)

{
    "code": 200,
    "info": "success",
    "param": {
        "status": 3,
        "price": "100.00",
        "fee": "0.00",
        "uporder": "CH20260222001",
        "completion_time": "2026-02-22 19:00:00"
    }
}

商户余额 — POST /payment/query/balance

POST http://api.olyester.com/payment/query/balance

请求参数

参数名必填说明
parter商户 AppID

响应示例

{
    "code": 200,
    "info": "success",
    "param": {
        "balance": "5000.00"
    }
}

PayPH 兼容 — 回调通知

通过 PayPH 兼容接口创建的订单,回调通知也将采用 PayPH 格式:

代收回调参数

参数名说明
parter商户 AppID
orderid商户订单号
opstate状态:1=成功,0=失败
ovalue金额(元)
sign签名(MD5 小写)

代付回调参数(额外增加 remark 字段)

参数名说明
parter商户 AppID
orderid商户订单号
opstate状态:1=成功,0=失败
ovalue金额(元)
remark备注信息
sign签名(MD5 小写)

回调签名验证

固定字段顺序:opstate={X}&orderid={X}&ovalue={X}&parter={X}&key={SECRET} → MD5 小写

💡 回调响应 收到回调后,商户应返回字符串 opstate=0 表示已成功接收。否则系统将持续重试通知。

错误码

以下为支付网关可能返回的错误码:

错误码说明处理建议
0请求成功正常处理
9999系统异常联系技术支持
10参数校验失败检查请求参数
11参数格式错误检查参数格式(如缺少必填字段)
12签名验证失败检查签名算法及密钥
15数据不存在检查商户号/订单号是否正确
20系统繁忙稍后重试
25订单不存在检查订单号
30商户不存在或已停用联系管理员
35应用不存在或已停用检查 appId
40支付通道不可用更换支付方式或联系管理员
45不支持的支付方式检查 wayCode
50不支持的货币检查 currency
55订单已关闭重新创建订单
60退款金额超限退款金额不能超过原订单金额
💡 错误处理code != 0 时,msg 字段会包含具体的错误描述信息。建议在业务逻辑中同时判断 codemsg

Jeepay 支付网关 API 文档 v1.0 | 如有疑问请联系技术支持