EpayProtocol换网关即可切 · MD5

epay 协议文档

快米兔 epay 兼容协议:已对接常见易支付的系统,更换网关地址和商户密钥即可切换。含签名、发起支付、查单、异步通知。与本站原生支付 API 不是同一套字段。

Epay Protocol

兼容常见易支付

标准面板换网关和密钥即可切换。原生统一下单、退款接口见支付 API 文档。

1

. 怎么切过来

本文是 epay(易支付)兼容协议,和「支付 API 文档」里的统一下单 / 退款 / 重定向不是同一套字段,请不要混用。

标准易支付面板或已按常见 epay 协议对接的充值页,一般只需更换网关地址商户密钥,原有下单、查单、回调逻辑不用重写。魔改过字段或签名算法的版本,需要对照本文核对差异,不保证覆盖所有二次改造。

你需要准备的

项目说明
网关地址以商户后台展示为准。下文用 `{网关}` 表示,不要写死过期域名。
商户 ID(pid)商户号,后台可查。
商户密钥(key)用于签名与验签,勿泄露、勿提交到前端页面。
异步通知 notify_url支付结果服务端回调,沿用原业务地址即可。
同步跳转 return_url付款完成后浏览器跳转,沿用原业务地址即可。

金额、商户订单号、商品名、通道 type 仍按原来的 epay 参数提交。建议先用小额订单联调,确认通知与查单一致后再放量。

常见接口路径

用途相对路径说明
页面跳转支付`/submit.php`浏览器 GET/POST 跳转收银台或通道页面。
API 下单`/mapi.php`服务端请求,返回支付链接或二维码等。
查询订单`/api.php`按商户订单号查询支付状态。

完整地址为 {网关} + 相对路径,例如 {网关}/submit.php。若后台给出的网关已含路径,以后台为准。

2

. 签名

与常见彩虹易支付一致:对参与签名的参数按参数名 ASCII 升序排列,拼接后接上商户密钥,再做 MD5(小写)。signsign_type 以及空值不参与签名。

步骤

第一步: 取出全部非空参数。排除 signsign_type。按参数名从小到大排序。 第二步: 拼成 key1=value1&key2=value2&…(最后一项后面没有 &)。 第三步: 在该字符串末尾直接拼接商户密钥 key(中间不加 &key=)。 第四步: 对结果做 MD5,得到 32 位小写十六进制,作为 sign。请求里同时带 sign_type=MD5

验签时用收到的参数按同样规则重算,再与传入的 sign 比较。接口以后可能增加字段,验签必须忽略未知字段之外的空值和 sign 本身。

示例

pid=1001type=alipayout_trade_no=P20260917001name=账户充值money=1.00notify_url=https://your.example/notifyreturn_url=https://your.example/return

待签名串形态:money=1.00&name=账户充值&notify_url=…&out_trade_no=P20260917001&pid=1001&return_url=…&type=alipay + 商户密钥。 实际签名值随密钥变化,请用后台密钥在本地按上述步骤计算,不要复制示例里的假密钥。

3

. 发起支付

请求参数

参数必填说明
pid商户 ID。
type支付通道,见「通道 type」。
out_trade_no商户订单号,需保证商户内唯一。
notify_url异步通知地址,需公网可访问。
return_url支付完成同步跳转地址。
name商品名称 / 订单标题。
money金额,单位元,最多两位小数,例如 `1.00`。
sitename网站名称,部分面板会展示。
param透传参数,通知时原样返回(若通道支持)。
sign签名。
sign_type固定 `MD5`。

页面跳转 `/submit.php`

用浏览器 GET 或表单 POST 提交到 {网关}/submit.php。用户会被带到收银台或对应通道页面完成付款。

API 下单 `/mapi.php`

服务端以 GET/POST 提交相同参数到 {网关}/mapi.php。成功时返回 JSON,常见字段:

字段说明
code`1` 表示下单成功,其它为失败。
msg失败原因或提示。
trade_no平台订单号(若返回)。
payurl可跳转的支付链接。
qrcode扫码内容 / 二维码链接(若返回)。
urlscheme唤起 App 的 scheme(若返回)。

优先按返回里实际出现的字段跳转或展示二维码。不要假设每次都同时返回 payurl 和 qrcode。

4

. 查单

付款后请以异步通知为准,同时可用查单做掉单补查。请求 {网关}/api.php

参数必填说明
act固定 `order`。
pid商户 ID。
key商户密钥。部分实现用 sign 代替明文 key,以联调结果为准。
out_trade_no商户订单号。

成功时 JSON 常见字段:

字段说明
code`1` 查询成功。
trade_no平台订单号。
out_trade_no商户订单号。
type支付通道。
pid商户 ID。
addtime创建时间。
endtime完成时间。
name商品名称。
money金额(元)。
status`1` 已支付,`0` 未支付。

只有查单或通知均显示已支付,才给用户加余额、发货。不要只凭同步跳转页面判断成功。

5

. 异步通知与同步跳转

异步通知 notify_url

支付成功后,平台以 GET(常见)请求你的 notify_url。参数与下单字段对应,并带 signsign_type

参数说明
pid商户 ID。
trade_no平台订单号。
out_trade_no商户订单号。
type支付通道。
name商品名称。
money订单金额(元)。
trade_status常见为 `TRADE_SUCCESS`。
param下单时的透传参数(若有)。
sign签名。
sign_type`MD5`。

处理步骤: 1. 按本文「签名」规则验签。 2. 核对 out_trade_nomoney 与本地订单一致。 3. trade_status 为成功且本地尚未入账时,完成业务(加余额、发货等),保证幂等。 4. 处理成功后,HTTP 响应正文输出 success(小写)。其它内容会被视为失败并可能重试。

同步跳转 return_url

用户支付完成后浏览器跳转到 return_url,参数与通知类似。同步跳转只用于展示结果页,不能单独作为入账依据。入账必须以异步通知或查单为准。

6

. 通道 type

常见取值如下。以商户后台实际开通的通道为准,未开通的 type 会下单失败。

type说明
alipay支付宝
wxpay微信支付
qqpayQQ 钱包(若开通)
bank网银 / 其它(若开通)

后台若使用自定义通道标识,按后台文档或顾问提供的取值提交,不要自行猜测。

7

. 注意

• 网关、pid、密钥只从商户后台获取,不要使用过期或第三方转发的地址。 • 本协议与 支付 API 文档 相互独立:那边是 userId / outTradeNo 等原生字段,这边是 pid / out_trade_no。 • 标准易支付一般换网关即可通;增删字段、改签名、改金额单位的魔改面板需要对照联调。 • 金额单位为(如 1.00),不是原生支付 API 文档里的「分」。 • 生产环境请使用 HTTPS。密钥仅放在服务端。 • 联调问题可联系顾问,按实际请求报文核对。