支付api地址
测试环境:http://test.ezrpro.cn:3309
Q1环境:http://pay-q1.ezrpro.cn:8086
正式环境:http://pay.ezrpro.cn
签名算法
参与签名的字段包括AppId, Timestamp(时间戳),Token 以及业务参数。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均区分大小写。对string1作sha1加密,然后转换成小写,字段名和字段值都采用原始值,不进行URL 转义。
即signature=sha1(string1)。
示例
支付:
AppId = EZP
Token = HH1232D
Timestamp = 20160523235959
ShopCode = HQ01S001
UserCode = KB1001
AuthCode = 130115575166786427
Body = 刷卡支付测试
SpbillCreateIp = 127.0.0.1
TotalAmount = 1
VipOldCode = EZ0541688
对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:
AppId=EZP&AuthCode=130115575166786427&OrderBody=刷卡支付测试&ShopCode=HQ01S001&SpbillCreateIp=127.0.0.1&Timestamp=20160523235959&Token=HH1232D&TotalAmount=1&UserCode=KB1001&VipOldCode=EZ0541688
对string1进行sha1签名,转成小写,得到signature:25a14a34dc6c18bd3da622e24292570d5276cdc3
注意事项
1. 空值不参与签名
2. 属性值区分大小写
3. Sha1之后需要转换成小写
接口返回码说明(BusinessCode)
0 :成功
500:业务异常
4001:参数错误
公共请求参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
AppId | 是 | string | appid |
Sign | 是 | string | 签名 |
Timestamp | 是 | string | 时间戳 |
ShopCode | 是 | string | 门店编号 |
UserCode | 否 | string | 员工编号 |
1. 支付
请求URL:
/upay/pay
请求方式:
POST
请求参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
AuthCode | 是 | string | 付款码 |
OutTradeNo | 是 | string | 商户订单号 |
Body | 是 | string | 订单描述 |
TotalAmount | 是 | int | 订单总金额(分) |
SpbillCreateIp | 是 | string | 客户端ip |
VipOldCode | 否 | string | 会员老卡号 |
PayType | 否 | string | 支付方式 数字的字符串 “0”-微信 “2”-支付宝 |
TerminalId | 否 | string | 终端设备号 |
GoodsDetail | 否 | list | 商品列表 |
DiscountAmount | 否 | int | 参与优惠计算的金额(分) |
GoodsDetail
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
GoodsId | 是 | string | 商品编码 |
GoodsName | 是 | string | 商品名称 |
Quantity | 是 | string | 商品数量 |
Price | 是 | int | 商品单价(分) |
GoodsCategory | 否 | string | 商品分类 |
Body | 否 | string | 商品描述 |
ShowUrl | 否 | string | 商品展示地址 |
返回示例
{
"Success": true,
"Msg": "操作成功",
"Status": 200,
"BusinessCode": 0,
"ServerTime": "2019-08-23 14:11:09",
"Result": {
"PayType": 0,
"PayerId": "oV5mxvz2KRy_Ey8DEIulG0HQpyeU",
"PayerLogonId": "159****5620",
"TerminalId": "test001TerminalId",
"UserCode": null,
"VoucherDetailList": null,
"TradeNo": "WP01085519082300000001",
"OutTradeNo": "POS1566540689295",
"ChannelTradeNo": "4200000380201908236033064095",
"TotalAmount": 0.01,
"TotalMerchantContribute": 0,
"TotalOtherContribute": 0,
"IncomeAmount": 0.01,
"FinishTime": "2019-08-23 14:11:06",
"ChannelFinishTime": "2019-08-23 14:11:31",
"OrderState": "SUCCESS",
"ErrorCode": null,
"ErrorCodeDesc": null
}
}
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
PayType | int | 支付方式 0-微信 2-支付宝 |
PayerId | string | 支付服务商下的用户id |
PayerLogonId | string | 支付宝的时候会有返回(支付宝账号 示例:159**5620) |
TerminalId | string | 终端设备号 |
VoucherDetailList | list | 优惠信息 |
TradeNo | string | EZR订单号 |
OutTradeNo | string | 商户订单号 |
ChannelTradeNo | string | 支付服务商单号 |
TotalAmount | int | 订单总金额(分) |
TotalMerchantContribute | int | 商户出资金额 (分) |
TotalOtherContribute | int | 其他出资方出资金额(分) |
IncomeAmount | int | 进账金额(IncomeAmount = TotalAmount - TotalMerchantContribute) |
FinishTime | string | EZR完成时间 |
ChannelFinishTime | string | 支付服务商完成时间 |
OrderState | string | 订单状态 |
ErrorCode | string | 错误码 |
ErrorCodeDesc | string | 错误描述 |
VoucherDetailList
参数名 | 类型 | 说明 |
---|---|---|
Id | string | 券id |
Name | string | 券名称 |
Amount | int | 优惠金额 (分) |
MerchantContribute | int | 商户出资金额 (分) |
OtherContribute | int | 其他出资方出资金额(分) |
备注
OrderState 订单状态 | 描述 |
---|---|
USERPAYING | 支付中 |
SUCCESS | 支付成功 |
PAYERROR | 支付失败 |
NOTPAY | 未支付 这里会有个情况 用户支付成功 微信返回超时并且查单超时(查单三次) 这里要调用撤单 |
2.查询
简要描述:
查询订单信息包含退款
请求URL:
/upay/query
请求方式:
POST
请求参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
TradeNo | 否 | string | EZR订单号(和商户订单号二选一) |
OutTradeNo | 否 | string | 商户订单号(和EZR 订单号二选一) |
RefundNo | 否 | string | 退款单号 多个用英文逗号,隔开 |
返回示例
{
"Success": true,
"Msg": "操作成功",
"Status": 200,
"BusinessCode": 0,
"ServerTime": "2019-08-18 17:58:56",
"Result": {
"TradeNo": "AP01106119081800000002",
"OutTradeNo": "POS1566114508737",
"ChannelTradeNo": "2019081822001483430542089451",
"UserCode": null,
"TotalAmount": 1,
"PayAmount": 1,
"RefundAmount": 1,
"OrderState": "SUCCESS",
"PayType": 0,
"PayTime": "2019-08-18 15:48:38",
"TerminalId": "test001TerminalId",
"PayerId": "oV5mxvz2KRy_Ey8DEIulG0HQpyeU",
"VoucherDetailList": null,
"RefundInfoList": [
{
"RefundNo": "APR01286419081800000002",
"RefundAmount": 1,
"RefundState": "SUCCESS",
"CreateTime": "2019-08-18 15:49:35"
}
]
}
}
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
TradeNo | int | EZR订单号 |
OutTradeNo | int | 商户订单号 |
ChannelTradeNo | int | 支付服务商支付单号 |
UserCode | int | 员工编号 |
TotalAmount | int | 订单金额(分) |
PayAmount | int | 支付金额(分) |
RefundAmount | int | 退款金额(分) |
OrderState | string | 订单状态 |
PayType | int | 支付方式 0-微信 2-支付宝 |
PayTime | string | 付款时间 |
TerminalId | string | 终端设备号 |
PayerId | string | 支付服务商下的用户id |
VoucherDetailList | int | 优惠详情 |
RefundInfoList | int | 退款详情 |
RefundInfoList
参数名 | 类型 | 说明 |
---|---|---|
RefundNo | int | EZR退款单号 |
RefundAmount | int | 退款金额(分) |
RefundState | string | 退款状态 |
CreateTime | string | 创建时间 |
备注
RefundState 退款状态 | 描述 |
---|---|
SUCCESS | 退款成功 |
PROCESSING | 退款中 |
3.撤销
简要描述:
撤销订单
请求URL:
/upay/cancel
请求方式:
POST
请求参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
TradeNo | 是 | string | EZR订单号 |
返回示例
{
"Success": true,
"Msg": "操作成功",
"Status": 200,
"BusinessCode": 0,
"ServerTime": "2019-08-17 17:52:38",
"Result": {
"TradeNo": "AP01625319081700000015",
"OutTradeNo": "POS1566035451985",
"ReCall": "N",
"ReverseState": "SUCCESS",
"ReverseDesc": "refund",
"ErrorCode": null,
"ErrorCodeDesc": null,
"FinishTime": "2019-08-17 17:52:30"
}
}
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
TradeNo | string | EZR订单号 |
OutTradeNo | string | 商户订单号 |
ReCall | string | 是否需要重试 N-不需要 Y-需要 |
ReverseState | string | 撤销状态 |
ReverseDesc | string | 撤销描述 支付宝此字段会有返回 refund-已支付退款 close-未支付关闭 |
ErrorCode | int | 错误码 |
ErrorCodeDesc | int | 错误描述 |
FinishTime | int | 完成时间 |
备注
ReverseState 撤销状态 | 描述 |
---|---|
SUCCESS | 撤销成功 |
4.申请退款
简要描述:
申请退款
请求URL:
/upay/refund/apply
请求方式:
POST
请求参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
TradeNo | 是 | string | EZR订单号 |
RefundAmount | 是 | int | 退款金额(分) |
RefundGoodsInfoList | 是 | list | 退款商品 |
RefundGoodsInfoList
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
GoodsId | 是 | string | 商品编号 |
GoodsName | 是 | string | 商品名称 |
Price | 是 | int | 商品价格(分) |
Quantity | 是 | int | 数量 |
返回示例
{
"Success": true,
"Msg": "操作成功",
"Status": 200,
"BusinessCode": 0,
"ServerTime": "2019-08-18 15:49:35",
"Result": {
"TrandeNo": "AP01106119081800000002",
"OutTrandeNo": "POS1566114508737",
"ChannelTradeNo": "2019081822001483430542089451",
"RefundNo": "APR01286419081800000002",
"FinishTime": "2019-08-18 15:49:35",
"RefundState": "PROCESSING"
}
}
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
TrandeNo | string | EZR订单号 |
OutTrandeNo | string | 商户支付订单号 |
ChannelTradeNo | string | 支付服务商支付单号 |
RefundNo | string | 退款单号 |
FinishTime | string | 创建退款单时间 |
RefundState | string | 申请退款状态 |
备注
RefundState 退款状态 | 描述 |
---|---|
PROCESSING | 退款中 需要到EZR后台确认退款 |
5.退款
简要描述:
退款
请求URL:
/upay/refund
请求方式:
POST
请求参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
OutRefundNo | 是 | string | 商户退款单号 |
TradeNo | 是 | string | EZR订单号 |
RefundAmount | 是 | int | 退款金额(分) |
RefundReason | 是 | string | 退款原因 |
TerminalId | 是 | string | 终端设备号 |
RefundGoodsInfoList | 是 | list | 退款商品 |
RefundGoodsInfoList
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
GoodsId | 是 | string | 商品编号 |
GoodsName | 是 | string | 商品名称 |
Quantity | 是 | int | 数量 |
Price | 是 | int | 商品价格(分) |
GoodsCategory | 否 | string | 商品分类 |
Body | 否 | string | 商品描述 |
ShowUrl | 否 | string | 商品展示地址 |
返回示例
{
"Success": true,
"Msg": "操作成功",
"Status": 200,
"BusinessCode": 0,
"ServerTime": "2019-08-18 15:49:35",
"Result": {
"TrandeNo": "AP01106119081800000002",
"OutTrandeNo": "POS1566114508737",
"ChannelTradeNo": "2019081822001483430542089451",
"RefundNo": "APR01286419081800000002",
"OutRefundNo": "testrefundno",
"ChannelRefundNo": "testchannelrefundno",
"RefundAmount": 1,
"MerchantDisctAmt": 0,
"ChannelDisctAmt": 0,
"PayerId": "test",
"PayerLogonId": "test",
"FinishTime": "2019-08-18 15:49:35",
"ChannelFinishTime": "2019-08-18 15:49:35",
"RefundState": "SUCCESS"
}
}
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
TrandeNo | string | EZR订单号 |
OutTrandeNo | string | 商户支付订单号 |
ChannelTradeNo | string | 支付服务商支付单号 |
RefundNo | string | 退款单号 |
OutRefundNo | string | 商户退款单号 |
ChannelRefundNo | string | 支付服务商退款单号 |
RefundAmount | int | 退款金额(分) |
MerchantDisctAmt | int | 退款中包含商户优惠金额(分) |
ChannelDisctAmt | int | 退款中包含平台优惠金额(分) |
PayerId | string | 支付宝的时候会有返回 支付服务商下的用户id |
PayerLogonId | string | 支付宝的时候会有返回(支付宝账号 示例:159**5620) |
FinishTime | string | EZR退款时间 |
ChannelFinishTime | string | 支付服务商退款时间 |
RefundState | string | 退款状态 |
备注
RefundState 退款状态 | 描述 |
---|---|
SUCCESS | 退款成功 |