版本说明
协议规则
| 提交数据格式 | application/x-www-form-urlencoded |
| 返回数据格式 | JSON |
| 字符编码 | UTF-8 |
V1 与 V2 版本对比
| 对比项 | V1版本 | V2版本 |
|---|---|---|
| 签名算法 | MD5 | SHA256WithRSA |
| 支付接口 | submit.php / mapi.php | /api/pay/submit / /api/pay/create |
| 查询接口 | api.php?act=xxx | /api/pay/query |
| 时间戳校验 | 不需要 | 需要 timestamp 参数 |
| 安全性 | 一般 | 更高(非对称加密) |
建议:新接入的商户推荐使用V2版本接口,安全性更高。V1版本接口仍可正常使用。
支付方式列表
以下是系统支持的支付方式及其对应的type值(实际可用支付方式以商户后台为准):
| 调用值 | 描述 |
|---|---|
alipay | 支付宝 |
wxpay | 微信支付 |
qqpay | QQ钱包 |
bank | 银行卡支付 |
不传type参数会跳转到收银台,让用户自行选择支付方式。
设备类型列表
用于API接口支付时,根据用户设备类型传入:
| 调用值 | 描述 |
|---|---|
pc | 电脑浏览器 |
mobile | 手机浏览器 |
qq | 手机QQ内浏览器 |
wechat | 微信内浏览器 |
alipay | 支付宝客户端 |
jump | 仅返回支付跳转url |
V2版本接口 RSA签名
RSA签名规则 V2
获取RSA密钥对
在 商户后台 → 个人资料 → API信息 页面,点击【生成商户RSA密钥对】,生成后注意保存【商户私钥】。对接接口时只需要用到【平台公钥】与【商户私钥】。
注意:私钥需妥善保管,避免遗失,不要泄露。
签名步骤
- 获取请求报文所有非空请求参数,不包括数组、字节类型参数,剔除sign、sign_type字段,并按照第一个字符的键值ASCII码递增排序(字母升序排序)。
- 将排序后的参数和对应值,组合成"参数=参数值"的格式,并用 & 字符连接起来,此时生成的字符串为待签名字符串。
- 使用商户私钥,对待签名字符串计算RSA签名(SHA256WithRSA),得到签名sign。
验签步骤
- 根据签名步骤里面的1~2,获取到待签名字符串。
- 使用平台公钥,根据签名字符串sign,对待签名字符串进行RSA验签(SHA256WithRSA)
页面跳转支付 V2
此接口可用于用户前台直接发起支付,使用form表单跳转或拼接成url跳转。
POST
/api/pay/submit
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 必填 | Int | 商户ID |
| 支付方式 | type | 选填 | String | 不传跳转收银台 |
| 商户订单号 | out_trade_no | 必填 | String | 商户系统内的订单号 |
| 异步通知地址 | notify_url | 必填 | String | 服务器异步通知地址 |
| 跳转通知地址 | return_url | 必填 | String | 页面跳转通知地址 |
| 商品名称 | name | 必填 | String | 如超过127字节自动截取 |
| 商品金额 | money | 必填 | String | 单位:元,最大2位小数 |
| 业务扩展参数 | param | 选填 | String | 支付后原样返回 |
| 当前时间戳 | timestamp | 必填 | String | 10位整数,单位秒 |
| 签名字符串 | sign | 必填 | String | RSA签名 |
| 签名类型 | sign_type | 必填 | String | 固定值 RSA |
统一下单接口 V2
此接口用于后端发起订单创建,获取支付链接或支付二维码。
POST
/api/pay/create
请求参数
参数与页面跳转支付一致,额外支持:
| 字段名 | 变量名 | 必填 | 描述 |
|---|---|---|---|
| 设备类型 | device | 选填 | pc/mobile/wechat等 |
| 客户端IP | clientip | 选填 | 用户端IP地址 |
返回参数
| 字段名 | 变量名 | 描述 |
|---|---|---|
| 返回状态码 | code | 1为成功,其他为失败 |
| 返回信息 | msg | 返回提示信息 |
| 平台订单号 | trade_no | 平台生成的订单号 |
| 支付链接 | payurl | 跳转到该url支付 |
| 二维码链接 | qrcode | 根据该url生成二维码 |
| 小程序跳转 | urlscheme | 可发起微信小程序支付 |
注:payurl、qrcode、urlscheme 三个参数只会返回其中一个
支付结果通知 V2
支付成功后,平台会向商户的notify_url地址发送异步通知。
重要:商户需要验证签名,确认通知来源的合法性,处理完成后返回字符串
success通知参数
| 字段名 | 变量名 | 描述 |
|---|---|---|
| 商户ID | pid | 商户ID |
| 平台订单号 | trade_no | 平台生成的订单号 |
| 商户订单号 | out_trade_no | 商户提交的订单号 |
| 支付方式 | type | 支付方式 |
| 商品名称 | name | 商品名称 |
| 订单金额 | money | 订单金额 |
| 支付状态 | trade_status | TRADE_SUCCESS 表示成功 |
| 签名 | sign | RSA签名 |
订单查询 V2
POST
/api/pay/query
订单退款 V2
POST
/api/pay/refund
V1版本接口 MD5签名
MD5签名规则 V1
- 将发送或接收到的所有参数按照参数名ASCII码从小到大排序(a-z),sign、sign_type、和空值不参与签名!
- 将排序后的参数拼接成URL键值对的格式,例如
a=b&c=d&e=f,参数值不要进行url编码。 - 再将拼接好的字符串与商户密钥KEY进行MD5加密得出sign签名参数,
sign = md5 ( a=b&c=d&e=f + KEY ),md5结果为小写。 - 具体签名与发起支付的示例代码可下载SDK查看。
页面跳转支付 V1
此接口可用于用户前台直接发起支付,使用form表单跳转或拼接成url跳转。
POST / GET
submit.php
推荐使用POST方式,不容易被劫持或屏蔽。
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1001 | |
| 支付方式 | type | 否 | String | alipay | 不传跳转收银台 |
| 商户订单号 | out_trade_no | 是 | String | 20160806151343349 | |
| 异步通知地址 | notify_url | 是 | String | http://xxx/notify.php | 服务器异步通知地址 |
| 跳转通知地址 | return_url | 是 | String | http://xxx/return.php | 页面跳转通知地址 |
| 商品名称 | name | 是 | String | VIP会员 | 如超过127字节自动截取 |
| 商品金额 | money | 是 | String | 1.00 | 单位:元,最大2位小数 |
| 业务扩展参数 | param | 否 | String | 支付后原样返回 | |
| 签名字符串 | sign | 是 | String | 202cb962ac59075b... | MD5签名 |
| 签名类型 | sign_type | 是 | String | MD5 | 固定值 MD5 |
API接口支付 V1
此接口可用于服务器后端发起支付请求,会返回支付二维码链接或支付跳转url。
POST
mapi.php
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | pid | 是 | Int | 1001 | |
| 支付方式 | type | 是 | String | alipay | |
| 商户订单号 | out_trade_no | 是 | String | 20160806151343349 | |
| 异步通知地址 | notify_url | 是 | String | http://xxx/notify.php | |
| 跳转通知地址 | return_url | 否 | String | http://xxx/return.php | |
| 商品名称 | name | 是 | String | VIP会员 | |
| 商品金额 | money | 是 | String | 1.00 | 单位:元,最大2位小数 |
| 用户IP地址 | clientip | 是 | String | 192.168.1.100 | 用户发起支付的IP地址 |
| 设备类型 | device | 否 | String | pc | 默认为pc |
| 业务扩展参数 | param | 否 | String | 支付后原样返回 | |
| 签名字符串 | sign | 是 | String | 202cb962ac59075b... | MD5签名 |
| 签名类型 | sign_type | 是 | String | MD5 | 固定值 MD5 |
返回结果(JSON)
| 字段名 | 变量名 | 类型 | 描述 |
|---|---|---|---|
| 返回状态码 | code | Int | 1为成功,其它值为失败 |
| 返回信息 | msg | String | 失败时返回原因 |
| 订单号 | trade_no | String | 支付订单号 |
| 支付跳转url | payurl | String | 直接跳转到该url支付 |
| 二维码链接 | qrcode | String | 根据该url生成二维码 |
| 小程序跳转url | urlscheme | String | 可发起微信小程序支付 |
注:payurl、qrcode、urlscheme 三个参数只会返回其中一个
支付结果通知 V1
通知类型:服务器异步通知(notify_url)、页面跳转通知(return_url)
请求方式:GET
通知参数
| 字段名 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户ID | pid | 是 | Int | |
| 易支付订单号 | trade_no | 是 | String | 平台订单号 |
| 商户订单号 | out_trade_no | 是 | String | 商户系统内部的订单号 |
| 支付方式 | type | 是 | String | |
| 商品名称 | name | 是 | String | |
| 商品金额 | money | 是 | String | |
| 支付状态 | trade_status | 是 | String | 只有TRADE_SUCCESS是成功 |
| 业务扩展参数 | param | 否 | String | |
| 签名字符串 | sign | 是 | String | MD5签名 |
| 签名类型 | sign_type | 是 | String | MD5 |
重要:收到异步通知后,需返回
success 以表示服务器接收到了订单通知查询商户信息 V1
GET
api.php?act=query&pid={商户ID}&key={商户密钥}
请求参数
| 字段名 | 变量名 | 必填 | 描述 |
|---|---|---|---|
| 操作类型 | act | 是 | 固定值 query |
| 商户ID | pid | 是 | |
| 商户密钥 | key | 是 |
返回结果
| 字段名 | 变量名 | 描述 |
|---|---|---|
| 返回状态码 | code | 1为成功 |
| 商户ID | pid | |
| 商户密钥 | key | |
| 商户状态 | active | 1为正常,0为封禁 |
| 商户余额 | money | |
| 结算方式 | type | 1:支付宝,2:微信,3:QQ,4:银行卡 |
| 结算账号 | account | |
| 结算姓名 | username | |
| 订单总数 | orders | |
| 今日订单 | order_today | |
| 昨日订单 | order_lastday |
查询结算记录 V1
GET
api.php?act=settle&pid={商户ID}&key={商户密钥}
查询单个订单 V1
GET
api.php?act=order&pid={商户ID}&key={商户密钥}&out_trade_no={商户订单号}
请求参数
| 字段名 | 变量名 | 必填 | 描述 |
|---|---|---|---|
| 操作类型 | act | 是 | 固定值 order |
| 商户ID | pid | 是 | |
| 商户密钥 | key | 是 | |
| 系统订单号 | trade_no | 选择 | 二选一 |
| 商户订单号 | out_trade_no | 选择 | 二选一 |
系统订单号 和 商户订单号 二选一传入即可,如果都传入以系统订单号为准!
返回结果
| 字段名 | 变量名 | 描述 |
|---|---|---|
| 返回状态码 | code | 1为成功 |
| 返回信息 | msg | |
| 易支付订单号 | trade_no | 平台订单号 |
| 商户订单号 | out_trade_no | |
| 第三方订单号 | api_trade_no | 支付宝微信等接口方订单号 |
| 支付方式 | type | |
| 商户ID | pid | |
| 创建订单时间 | addtime | |
| 完成交易时间 | endtime | |
| 商品名称 | name | |
| 商品金额 | money | |
| 支付状态 | status | 1为支付成功,0为未支付 |
| 业务扩展参数 | param | |
| 支付者账号 | buyer |
批量查询订单 V1
GET
api.php?act=orders&pid={商户ID}&key={商户密钥}
请求参数
| 字段名 | 变量名 | 必填 | 描述 |
|---|---|---|---|
| 操作类型 | act | 是 | 固定值 orders |
| 商户ID | pid | 是 | |
| 商户密钥 | key | 是 | |
| 查询订单数量 | limit | 否 | 最大50 |
| 页码 | page | 否 | 当前页码 |
提交订单退款 V1
注意:需要先在商户后台开启订单退款API接口开关,才能调用该接口发起订单退款
POST
api.php?act=refund
请求参数
| 字段名 | 变量名 | 必填 | 描述 |
|---|---|---|---|
| 商户ID | pid | 是 | |
| 商户密钥 | key | 是 | |
| 易支付订单号 | trade_no | 特殊可选 | 二选一 |
| 商户订单号 | out_trade_no | 特殊可选 | 二选一 |
| 退款金额 | money | 是 | 少数通道需要与原订单金额一致 |
注:trade_no、out_trade_no 不能同时为空,如果都传了以trade_no为准
返回结果
| 字段名 | 变量名 | 描述 |
|---|---|---|
| 返回状态码 | code | 0为成功,其它值为失败 |
| 返回信息 | msg |
SDK下载
SDK版本:V1.3
提示:SDK包含完整的签名、验签、请求示例代码,建议下载后参考使用。