快速开始
欢迎使用 Jeepay 支付网关 API。本文档描述了代收(支付)、代付(转账)和退款相关的 API 接口,供第三方平台对接使用。
接入流程
注册商户
联系管理员获取 mchNo(商户号)和 appId(应用ID)
获取密钥
在商户后台获取 appSecret(商户密钥),用于签名计算
对接开发
根据本文档实现 API 调用,注意正确实现签名算法
联调测试
使用本页面的在线测试工具进行接口调试
通用请求参数
所有 API 请求均需包含以下公共参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mchNo | String | 必填 | 商户号 |
| appId | String | 必填 | 商户应用ID |
| version | String | 必填 | 接口版本号,固定值:1.0 |
| signType | String | 必填 | 签名类型,固定值:MD5 |
| sign | String | 必填 | 签名值,参见签名算法 |
| reqTime | String | 必填 | 请求时间,13位毫秒时间戳 |
通用响应格式
{
"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
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
sign = MD5(拼接字符串).toUpperCase()
= "A1B2C3D4E5F6..."
- 参数值为空的字段不参与签名
sign字段本身不参与签名- 排序不区分大小写(case-insensitive)
- 最终拼接
key=商户密钥,注意没有尾部&
币种列表
当前支持的币种如下。请在请求中使用三位 ISO-4217 币种代码。
统一下单
商户通过该接口创建支付订单,获取支付链接或支付参数。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mchOrderNo | String | 必填 | 商户订单号,需唯一 |
| wayCode | String | 必填 | 支付方式代码,如 ALI_QR、WX_JSAPI 等 |
| amount | Long | 必填 | 支付金额,单位:分 |
| currency | String | 必填 | 货币代码,如 PHP、CNY |
| subject | String | 必填 | 商品标题 |
| body | String | 必填 | 商品描述信息 |
| clientIp | String | 选填 | 客户端IP地址 |
| notifyUrl | String | 选填 | 异步通知地址(支付成功后回调) |
| returnUrl | String | 选填 | 页面跳转通知地址 |
| expiredTime | Integer | 选填 | 订单失效时间,单位:秒 |
| channelExtra | String | 选填 | 渠道额外参数(JSON格式) |
| extParam | String | 选填 | 商户扩展参数,原样返回 |
| divisionMode | Byte | 选填 | 分账模式:0-不分账 1-自动分账 2-手动分账 |
响应参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| payOrderId | String | 支付系统订单号 |
| mchOrderNo | String | 商户订单号 |
| orderState | Integer | 订单状态:0-生成 1-支付中 2-成功 3-失败 4-已撤销 5-已退款 6-已关闭 |
| payDataType | String | 支付数据类型:payUrl/form/wxapp/codeUrl/codeImgUrl/none |
| payData | String | 支付数据(跳转URL/二维码/表单等) |
| errCode | String | 渠道错误码 |
| errMsg | String | 渠道错误描述 |
请求示例
{
"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"
}
}
查询订单
查询支付订单状态,支持通过商户订单号或系统订单号查询。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| payOrderId | String | 二选一 | 支付系统订单号 |
| mchOrderNo | String | 二选一 | 商户订单号 |
payOrderId 和 mchOrderNo 不能同时为空,至少传一个。
响应参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| payOrderId | String | 支付系统订单号 |
| mchOrderNo | String | 商户订单号 |
| state | Integer | 订单状态:0-生成 1-支付中 2-成功 3-失败 4-已撤销 5-已退款 6-已关闭 |
| ifCode | String | 支付接口代码 |
| wayCode | String | 支付方式代码 |
| amount | Long | 支付金额(分) |
| currency | String | 货币代码 |
| successTime | Long | 支付成功时间(时间戳) |
关闭订单
关闭未支付的订单,仅支持订单状态为"生成"或"支付中"的订单。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| payOrderId | String | 二选一 | 支付系统订单号 |
| mchOrderNo | String | 二选一 | 商户订单号 |
支付回调通知
当支付成功后,系统将向商户配置的 notifyUrl 发送异步通知。
- 通知方式:
POST请求 +application/x-www-form-urlencoded - 通知频率:支付成功后立即通知,失败后间隔 30s、1min、5min、30min 重试
- 成功标识:商户响应 HTTP 200 且内容为
success即视为通知成功 - 签名验证:通知参数中包含
sign,商户需验证签名
通知参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| payOrderId | String | 支付系统订单号 |
| mchNo | String | 商户号 |
| appId | String | 应用ID |
| mchOrderNo | String | 商户订单号 |
| ifCode | String | 支付接口代码 |
| wayCode | String | 支付方式代码 |
| amount | Long | 支付金额(分) |
| currency | String | 货币代码 |
| state | Integer | 订单状态:2=成功 |
| successTime | Long | 支付成功时间 |
| sign | String | 签名值 |
success(注意小写),否则系统将持续重发。
发起转账
商户通过该接口发起代付(转账)请求,将资金转入指定账户。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mchOrderNo | String | 必填 | 商户订单号 |
| ifCode | String | 必填 | 支付接口代码 |
| entryType | String | 必填 | 入账方式:WX_CASH-微信零钱 ALIPAY_CASH-支付宝账户 BANK_CARD-银行卡 |
| amount | Long | 必填 | 转账金额,单位:分 |
| currency | String | 必填 | 货币代码 |
| accountNo | String | 必填 | 收款账号 |
| accountName | String | 选填 | 收款人姓名 |
| bankName | String | 选填 | 收款人开户行名称 |
| clientIp | String | 选填 | 客户端IP地址 |
| transferDesc | String | 必填 | 转账备注信息 |
| notifyUrl | String | 选填 | 异步通知地址 |
| channelExtra | String | 选填 | 渠道额外参数(JSON格式) |
| extParam | String | 选填 | 商户扩展参数 |
响应参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| transferId | String | 转账系统订单号 |
| mchOrderNo | String | 商户订单号 |
| state | Integer | 状态:0-生成 1-处理中 2-成功 3-失败 |
| channelOrderNo | String | 渠道订单号 |
| errCode | String | 错误码 |
| errMsg | String | 错误描述 |
查询转账
查询转账订单状态。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| transferId | String | 二选一 | 转账系统订单号 |
| mchOrderNo | String | 二选一 | 商户订单号 |
转账回调通知
转账完成后,系统将向商户配置的 notifyUrl 地址发送异步通知。
通知参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| transferId | String | 转账系统订单号 |
| mchNo | String | 商户号 |
| appId | String | 应用ID |
| mchOrderNo | String | 商户订单号 |
| amount | Long | 转账金额(分) |
| currency | String | 货币代码 |
| state | Integer | 转账状态:2=成功 3=失败 |
| sign | String | 签名值 |
success 字符串。
发起退款
商户通过该接口对已支付的订单发起退款。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mchOrderNo | String | 二选一 | 原商户订单号 |
| payOrderId | String | 二选一 | 原支付系统订单号 |
| mchRefundNo | String | 必填 | 商户退款单号 |
| refundAmount | Long | 必填 | 退款金额,单位:分 |
| currency | String | 必填 | 货币代码 |
| refundReason | String | 必填 | 退款原因 |
| clientIp | String | 选填 | 客户端IP地址 |
| notifyUrl | String | 选填 | 异步通知地址 |
| channelExtra | String | 选填 | 渠道额外参数 |
| extParam | String | 选填 | 商户扩展参数 |
响应参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| refundOrderId | String | 退款系统订单号 |
| payOrderId | String | 原支付订单号 |
| mchRefundNo | String | 商户退款单号 |
| state | Integer | 退款状态:0-生成 1-处理中 2-成功 3-失败 |
| refundAmount | Long | 退款金额(分) |
| errCode | String | 错误码 |
| errMsg | String | 错误描述 |
查询退款
查询退款订单状态。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| refundOrderId | String | 二选一 | 退款系统订单号 |
| mchRefundNo | String | 二选一 | 商户退款单号 |
退款回调通知
退款完成后,系统将向商户配置的 notifyUrl 地址发送异步通知。
通知参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| refundOrderId | String | 退款系统订单号 |
| payOrderId | String | 原支付订单号 |
| mchNo | String | 商户号 |
| appId | String | 应用ID |
| mchRefundNo | String | 商户退款单号 |
| refundAmount | Long | 退款金额(分) |
| currency | String | 货币代码 |
| state | Integer | 退款状态:2=成功 3=失败 |
| sign | String | 签名值 |
PayPH 兼容 API — 说明
http://api.olyester.com,并将 parter 设为本平台分配的 AppID、key 设为对应的 AppSecret,即可无缝迁移,无需修改其他代码。
兼容端点与原有 Jeepay API 并行运行,互不影响。下方为各端点说明。
| 端点 | 方法 | 说明 |
|---|---|---|
| /payment/create | POST | 发起代收(下单) |
| /pay/query | POST | 代收订单查询 |
| /pay/transfer | POST | 发起代付(转账) |
| /pay/transfer/query | POST | 代付查询 V1 |
| /pay/transfer/query/detail | POST | 代付查询 V2(详情) |
| /payment/query/balance | POST | 商户余额查询 |
| /pay/transfer/receipt | POST | 获取代付凭证 |
PayPH 兼容 — 签名规则
签名算法与 PayPH 完全一致:
- 将所有非空参数(不含 sign、不含 clientip、不含 attach)按参数名 ASCII 升序排列
- 拼接为
key1=value1&key2=value2&...&key=YOUR_SECRET - 对拼接字符串计算 MD5,结果转为 小写
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
POSThttp://api.olyester.com/payment/create
请求参数
| 参数名 | 必填 | 说明 |
|---|---|---|
| parter | 是 | 商户 AppID |
| value | 是 | 金额(元),如 100.00 |
| type | 是 | 支付类型:GcashWap、Maya、Gotyme |
| orderid | 是 | 商户订单号 |
| notifyurl | 否 | 异步通知地址 |
| callbackurl | 否 | 前端跳转地址 |
| clientip | 否 | 客户端IP(不参与签名) |
| attach | 否 | 附加参数(不参与签名,回调原样返回) |
| sign | 是 | 签名值(MD5 小写) |
响应示例
{
"code": 200,
"info": "success",
"param": {
"payment_url": "https://pay.example.com/cashier/xxxx"
}
}
代收查询 — POST /pay/query
POSThttp://api.olyester.com/pay/query
请求参数
| 参数名 | 必填 | 说明 |
|---|---|---|
| parter | 是 | 商户 AppID |
| orderid | 是 | 商户订单号 |
响应示例
{
"code": "200",
"state": "200",
"msg": "支付成功",
"price": "100.00"
}
state 值:100=处理中,200=支付成功,400=支付失败
发起代付 — POST /pay/transfer
POSThttp://api.olyester.com/pay/transfer
请求参数
| 参数名 | 必填 | 说明 |
|---|---|---|
| parter | 是 | 商户 AppID |
| order_no | 是 | 商户订单号 |
| type | 是 | 入账方式:PH_GCASH、PH_MAYA、BANK_CARD |
| name | 否 | 收款人姓名 |
| account_number | 是 | 收款账号 |
| money | 是 | 金额(元),如 100.00 |
| notify_url | 否 | 异步通知地址 |
| sign | 是 | 签名值(MD5 小写) |
响应示例
{
"code": "200",
"info": "提交成功"
}
代付查询 — POST /pay/transfer/query
POSThttp://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
POSThttp://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 字段会包含具体的错误描述信息。建议在业务逻辑中同时判断 code 和 msg。
Jeepay 支付网关 API 文档 v1.0 | 如有疑问请联系技术支持