易支付对接
概述
易支付(EasyPay)是 DaxPay 内置的通用商户支付接入模块,兼容主流易支付协议,适用于小微商户和个人开发者快速接入。
DaxPay 同时提供两套 API:
| 版本 | 路径前缀 | 签名方式 | 接口能力 |
|---|---|---|---|
| V1(兼容旧版) | /epay/api/v1/* | 固定 MD5 | 仅下单(submit/mapi)+ 查单(api),不支持退款/关单 |
| V2(推荐) | /epay/api/v2/api/pay/* | 固定 RSA(SHA256withRSA) | 下单、查单、退款、退款查询、关单 |
版本签名不可混用
- V2 接口的
sign_type固定为RSA,不接受MD5 - V1 接口的
sign_type固定为MD5,不接受RSA - 不存在「V2 任选 MD5/RSA」的说法
金额单位与标准 API 不同
易支付协议的金额字段是 money(String 类型,单位元),不是 标准 API 的 amount(Long,单位分)。例如 1.00 表示 1 元。
接口列表(V2)
| 接口名称 | 接口地址 | 方法 | 描述 |
|---|---|---|---|
| 易支付下单 | /epay/api/v2/api/pay/create | GET/POST | 创建易支付订单 |
| 易支付查询 | /epay/api/v2/api/pay/query | GET/POST | 查询易支付订单状态 |
| 易支付退款 | /epay/api/v2/api/pay/refund | GET/POST | 发起退款 |
| 易支付退款查询 | /epay/api/v2/api/pay/refund_query | GET/POST | 查询退款状态 |
| 易支付关闭 | /epay/api/v2/api/pay/close | GET/POST | 关闭订单 |
refund_query 别名
退款查询同时接受 /api/pay/refund_query(下划线)和 /api/pay/refundquery(无下划线)两个路径,兼容不同易支付实现。
V2 下单
请求地址
GET/POST /epay/api/v2/api/pay/create
请求参数
字段名遵循易支付协议的 snake_case 风格:
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| pid | string | 是 | 易支付商户号(对应 mchNo) |
| type | string | 是 | 接口类型:web(跳转)/ jump(直接跳转通道)/ jsapi |
| method | string | 否 | 支付方式:alipay / wxpay 等 |
| out_trade_no | string | 是 | 商户订单号(对应 bizOrderNo) |
| name | string | 是 | 商品名称(对应 title) |
| money | string | 是 | 金额,单位元(如 "1.00") |
| timestamp | string | 是 | 当前时间戳(秒) |
| notify_url | string | 否 | 异步通知地址 |
| return_url | string | 否 | 同步跳转地址 |
| sign | string | 是 | RSA 签名值(Base64) |
| sign_type | string | 是 | 签名类型,固定 RSA |
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"orderId": 1853123456789012345,
"orderNo": "P2024120112345700001",
"payBody": "weixin://wxpay/bizpayurl?pr=xxxxx",
"payBodyType": "qr_code"
}
}V2 查询
请求地址
GET/POST /epay/api/v2/api/pay/query
请求参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| pid | string | 是 | 易支付商户号 |
| out_trade_no | string | 是 | 商户订单号 |
| sign | string | 是 | RSA 签名值 |
| sign_type | string | 是 | 固定 RSA |
响应示例
json
{
"code": 0,
"msg": "success",
"data": {
"orderNo": "P2024120112345700001",
"status": "success",
"realAmount": 100,
"payTime": "2024-12-01 12:00:00"
}
}V2 退款
请求地址
GET/POST /epay/api/v2/api/pay/refund
请求参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| pid | string | 是 | 易支付商户号 |
| out_trade_no | string | 是 | 原商户订单号 |
| money | string | 是 | 退款金额,单位元 |
| out_refund_no | string | 否 | 商户退款号(不传由系统生成) |
| sign | string | 是 | RSA 签名值 |
| sign_type | string | 是 | 固定 RSA |
V2 签名规则(RSA)
- 获取所有非空参数,排除
sign与sign_type两个字段。 - 按 key 的 ASCII 字典序升序排列。
- 拼接为
key1=value1&key2=value2格式(无分隔符、无&key=后缀)。 - 使用商户私钥以
SHA256withRSA签名,Base64 编码后填入sign。
与标准支付 API 签名的差异
- 标准 API(
/unipay/*):参数名为 camelCase(bizOrderNo),签名字段含reqTime/nonceStr等 - 易支付 V2:参数名为 snake_case(
out_trade_no),签名字段含timestamp,且排除sign_type
验签使用平台公钥,规则与 签名机制 一致。
V1 接口(兼容旧版)
V1 接口兼容传统易支付协议路径,仅支持 MD5 签名:
| 接口名称 | 接口地址 | 方法 |
|---|---|---|
| 提交(跳转) | /epay/api/v1/submit.php | GET/POST |
| 创建(API) | /epay/api/v1/mapi.php | GET/POST |
| 查询 | /epay/api/v1/api.php | GET/POST |
V1 限制
- 仅下单与查单:V1 不提供退款、退款查询、关单接口。如需退款请使用 V2 或商户端管理 API。
- 签名固定 MD5:
sign_type=MD5,使用商户 MD5 密钥拼接末尾后取 MD5(小写十六进制)。 - 查单弱鉴权:V1 查单使用
key=md5Key直接比对(query 参数),与 V2 的 RSA 验签完全不同,仅适用于低风险场景。
V1 MD5 签名规则
- 获取所有非空参数,排除
sign与sign_type。 - 按 key 的 ASCII 字典序排列,拼接为
key1=value1&key2=value2。 - 在末尾拼接商户密钥:
...&key={md5Key}(或视具体实现直接拼接)。 - 对整个字符串取 MD5,输出小写十六进制。
异步回调
易支付订单的回调走 protocol=easy_pay(GET + URL query 参数),与标准支付的 system 协议(POST JSON)不同。详见 异步回调 - 两套通知协议。