帮助中心

微信支付API

2018-11-14

支付Api地址:

测试环境:http://test.ezrpro.cn:3309

正式环境:http://pay.ezrpro.cn

签名算法:

API接口请求加签算法,签名生成的通用步骤如下:

签名生成规则如下:参与签名的字段包括AppIdTimestamp(时间戳),Token 以及业务参数。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均区分大小写。对string1作sha1加密,然后转换成小写,字段名和字段值都采用原始值,不进行URL 转义

即signature=sha1(string1)。 

  • 示例:

  • AppId = EZP

  • Token = HH1232D

  • Timestamp = 20160523235959

  • ShopCode = HQ01S001

  • UserCode = KB1001


步骤1:

对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:

AppId=EZP&AuthCode=130115575166786427&OrderBody=刷卡支付测试&ShopCode=HQ01S001&SpbillCreateIp=192.168.12.18&Timestamp=20160523235959&Token=1234Tk123&TotalFee=1&UserCode=323231&VipOldCode=EZ0541688


步骤2: 

对string1进行sha1签名,转成小写,得到signature:

e0afdde6ff59081f18609f8d77926d88bc43a3db


注意事项:

  • 空值不参与签名

  • 属性值区分大小写

  • Sha1之后需要转换成小写

接口返回码说明(BusinessCode):

0 :成功

500:业务异常

4001:参数错误

 1:刷卡支付下单

接口说明:

  • 用于商户收银员扫描用户微信钱包二维码,进行支付收银。

请求说明:

  • http请求方式:POST

  • 返回数据格式:JSON

  • 是否需要签名:需要

  • 请求路径:/wxpay/micropay/createmicropay


请求参数:

字段类型为空长度描述
AppIdstring
由EZR提供的AppId
Timestampstring
时间戳
Signstring
签名
ShopCodestring
门店代号
UserCodestring
员工工号
VipOldCodestring
会员老卡号
TradeNostring
商户订单号
OrderBodystring64订单描述(如果是商品可填写商品名称)
TotalFeeint
订单金额(分),必须大于0
AuthCodestring
扫钱包码的code
SpbillCreateIpstring
调用微信支付客户端IP






返回参数:

字段类型描述
TradeNostringEZR的支付订单订单号(不是传入的商户订单号)
PayStatestring支付状态,支付状态描述详细见下方
PayErrorCodestring支付出错代码
PayErrorMsgstring支付出错描述




 

请求参数示例代码(json对象):

{
    "AppId": "EZP",
    "Timestamp": "20160523235959",
    "Sign": "AB52DAC1832949EAC322FCFD7F515A987C9E8A67",
    "ShopCode": "HQ01S001",
    "OrderBody": "测试商品",
    "TotalFee": 100,
    "SpbillCreateIp": "112.64.26.230",
    "AuthCode": "189339323633672"
}


系统返回参数示例(json对象):

{
    "Success": true,
    "Msg": "操作成功",
    "Status": 200,
    "BusinessCode": 0,
    "ServerTime": "2016-09-21T17:33:08.7074597+08:00",
    "Result": {
        "OrderId": 112,
        "TradeNo": "WP01973316092100000029",
        "Code": null,
        "PayState": "SUCCESS",
        "PayErrorCode": null,
        "PayErrorMsg": null
    }
}



支付结果描述:

支付下单分为两种情况:

第一种是免支付密码模式,即用户出示微信钱包二维码,使用POS枪扫描下单即可直接请求支付,支付结果会同步返回,此时返回的状态为“SUCCESS”,免密模式的条件:

  • 1. 支付金额>500元的交易需要验证用户支付密码

  • 2. 用户账号每天最多有5笔交易可以免密,超过后需要验证密码

  • 3. 微信支付后台判断用户支付行为有异常情况,符合免密规则的交易也会要求验证密码

第二种情况是需要输入支付密码,POS扫描微信钱包二维码之后进行下单,下单的时候状态会返回“USERPAYING”用户支付中,此时EZR会去取到微信支付订单状态并返回到支付结果callback地址,POS接收到支付结果并处理支付状态。如果支付结果推送的时候网络异常等情况可以调用刷卡支付订单状态查询


订单支付结果错误代码:

名称描述原因解决方案
SYSTEMERROR接口返回错误系统超时Ezr会取微信支付结果并返回到callback
ORDERPAID订单已支付订单号重复请确认该订单号是否重复支付,如果是新单,请使用新订单号提交
AUTHCODEEXPIRE二维码已过期,请用户在微信上刷新后再试用户的条码已经过期请收银员提示用户,请用户在微信上刷新条码,然后请收银员重新扫码。 直接将错误展示给收银员
NOTENOUGH余额不足用户的零钱余额不足请收银员提示用户更换当前支付的卡,然后请收银员重新扫码。建议:商户系统返回给收银台的提示为“用户余额不足“提示用户换卡支付”
NOTSUPORTCARD不支持卡类型用户使用卡种不支持当前支付形式请用户重新选择卡种 建议:商户系统返回给收银台的提示为“该卡不支持当前支付,提示用户换卡支付或绑新卡支付
ORDERCLOSED订单已关闭该订单已关商户订单号异常,请重新下单支付
ORDERREVERSED订单已撤销当前订单已经被撤销当前订单状态为“订单已撤销”,请提示用户重新支付
BANKERROR银行系统异常银行端超时Ezr会取微信支付结果并返回到callback
USERPAYING用户支付中,需要输入密码该笔交易因为业务规则要求,需要用户输入支付密码。Ezr会取微信支付结果并返回到callback






注意:

  • 需要输入密码或者系统出错的订单ezr会调用微信接口获取订单查询接口,如果超过3分钟没有获取到订单状态的订单视为超时订单,一分钟之内订单状态获取完之后会将状态回调到POS支付结果回调Callback地址,回传的时候如果出现网络超时,会尝试多次回调,同时ezr也提供了查询订单信息的接口(接口详情可以看订单信息查询接口),在出现回调不成功的情况下,可以通过订单查询接口获取订单状态

 

回调返回参数:

字段类型描述
Brandstring所属品牌
TradeNostring订单号
TotalFeeint订单金额
CashFeeint支付金额
TransactionIdstring微信支付订单号
PayTimestring支付时间
TradeStatestring订单状态
PayErrorCodestring支付错误代码
PayErrorMsgstring支付错误描述


 

订单状态码:

  • SUCCESS—支付成功

  • REFUND—转入退款

  • NOTPAY—未支付

  • CLOSED—已关闭

  • REVOKED—已撤销(刷卡支付)

  • USERPAYING--用户支付中

  • PAYERROR--支付失败(其他原因,如银行返回失败)

 

2:订单信息查询接口

 

接口说明:

  • 用于获取单个订单的信息(可用于订单callback接收失败获取订单状态)

请求说明:

  • http请求方式:POST

  • 返回数据格式:JSON

  • 是否需要签名:需要

  • 请求路径:/wxpay/getorderinfo


请求参数:

字段类型为空长度描述
AppIdstring

EZR
提供的
AppId
Timestampstring
时间戳
Signstring
签名
TradeNostring
Ezr
订单下单返回的订单号
OutTradeNostring
商户生成支付传入的TradeNo


 注意:TradeNo与 OutTradeNo必须二选一,如果两者都有以TradeNo为主

返回参数:

字段类型描述
TradeNostring支付订单号
OutTradeNostring外部订单号
UserCodestring员工工号
TotalFeeInt订单金额(分)
CashFeeInt支付金额(分)
RefundFeeInt退款金额(分)
CreateDateDateTime订单创建时间
TradeStatestring订单状态
PayErrorMsgstring订单支付失败原因
PayTimeDateTime订单支付时间


 

请求参数示例代码(json对象):

{
    "AppId": "EZP",
    "Timestamp": "20160523235959",
    "Sign": "AB52DAC1832949EAC322FCFD7F515A987C9E8A67",
    "TradeNo": "WP01631316101000000017"
}


系统返回结果示例:

{
    "TradeNo": "WP01631316101000000017",
    "OutTradeNo": "",
    "UserCode": "323231",
    "TotalFee": 1,
    "CashFee": 1,
    "RefundFee": 0,
    "CreateDate": "2016-10-10T16:58:15",
    "TradeState": "SUCCESS",
    "PayErrorMsg": "",
    "PayTime": "2016-10-10T16:58:32"
}


 

3:支付订单列表获取

 

接口说明:

  • 用户获取支付订单列表

请求说明:

  • http请求方式:POST

  • 返回数据格式:JSON

  • 是否需要签名:需要

  • 请求路径:/pay/getorderlist


请求参数:

字段类型为空长度描述
AppIdstring

EZR
提供的
AppId
Timestampstring
时间戳
Signstring
签名
TradeNostring
Ezr
支付订单号,用户查询
BeginTimestring
查询开始时间时间戳,秒
EndTimestring
查询结束时间时间戳,秒
ShopCodestring
门店
code
PageIndexInt

1
开始的页码
PageSizeInt
分页条数


返回参数:

字段类型描述
OrderIdlong订单编号
PayTypeInt支付方式,微信支付
TradeNostringezr支付订单号
OutTradeNostring外部订单号
UserCodestring员工工号
TotalFeeInt订单金额(分)
CashFeeInt支付金额(分)
RefundFeeInt退款金额(分)
CreateDateDateTime订单创建时间
TradeStatestring订单状态
PayErrorMsgstring订单支付失败原因
PayTimeDateTime订单支付时间
VipMobileNostring会员手机号
VipNamestring会员名字


 

请求参数示例:

{
    "AppId": "EZP",
    "Timestamp": "20160523235959",
    "Sign": "AB52DAC1832949EAC322FCFD7F515A987C9E8A67",
    "ShopCode": "HQ01S001",
    "PageIndex": 1,
    "PageSize": 20
}


返回参数示例:

{
  "Success": false,
  "Msg": "操作成功",
  "Status": 200,
  "ServerTime": "2016-09-18T16:39:01.3853029+08:00",
  "Count": 1,
  "Result": [
    {
      "OrderId": 79,
      "PayType": 0,
      "TradeNo": "WP01366216091800000001",
      "UserCode": "323231",
      "TotalFee": 1,
      "CashFee": 0,
      "RefundFee": 0,
      "CreateDate": "2016-09-18T15:15:38",
      "TradeState": "NOTPAY",
      "PayErrorMsg": null,
      "PayTime": "2016-09-18T15:15:38",
      "VipMobileNo": "18302188990",
      "VipName": "cycle"
    }
  ],
  "PageTotal": 1,
  "BusinessCode": 0
}


 

4:退款申请接口

 

接口说明:

  • 用于支付订单进行退款申请,一个订单可以多次退款

请求说明:

  • http请求方式:POST

  • 返回数据格式:JSON

  • 是否需要签名:需要

  • 请求路径:/pay/createpayrefund

请求参数:

字段类型为空长度描述
AppIdstring

EZR
提供的
AppId
Timestampstring
时间戳
Signstring
签名
TradeNostring
Ezr支付订单号
RefundFeeInt
退款金额
(
退款金额不能大于可退金额
)


 

返回参数:

返回退款单号

请求参数示例:

{
"AppId": "EZP",
"Timestamp": "20160523235959",
"Sign": "AB52DAC1832949EAC322FCFD7F515A987C9E8A67",
"OrderId": 21,
"PageIndex": 1,
"RefundFee": 50
}


 

返回参数示例:

{
    "Success": true,
    "Msg": "操作成功",
    "Status": 200,
    "BusinessCode": 0,
    "ServerTime": "2016-09-18T17:01:01.3977386+08:00",
    "Result": "WPR01408316091800000001"
}


 

5:退款单列表查询

 

接口说明:

  • 用户获取支付订单退款列表

请求说明:

  • http请求方式:POST

  • 返回数据格式:JSON

  • 是否需要签名:需要

  • 请求路径:/pay/getorderrefundlist


请求参数:

字段类型为空长度描述
AppIdstring

EZR
提供的
AppId
Timestampstring
时间戳
Signstring
签名
RefundNostring
Ezr
支付退款单号,用户查询
BeginTimestring
查询开始时间时间戳,秒
EndTimestring
查询结束时间时间戳,秒
ShopCodestring
门店
code
PageIndexInt

1
开始的页码
PageSizeInt
分页条数


返回参数:

字段类型描述
OrderRefundIdlong退款订单编号
RefundTypeInt退款支付方式,微信支付
RefundNostring支付退款单号
UserCodestring员工工号
CashFeeInt支付金额(分)
RefundFeeInt退款金额(分)
CreateDateDateTime订单创建时间
RefundStatusstring退款单状态
VipMobileNostring会员手机号
VipNamestring会员名字


 

请求参数示例:

{
    "AppId": "EZP",
    "Timestamp": "20160523235959",
    "Sign": "AB52DAC1832949EAC322FCFD7F515A987C9E8A67",
    "ShopCode": "HQ01S001",
    "PageIndex": 1,
    "PageSize": 20
}


返回参数示例:

{
  "Success": false,
  "Msg": "操作成功",
  "Status": 200,
  "ServerTime": "2016-09-18T17:07:36.1546628+08:00",
  "Count": 2,
  "Result": [
    {
      "OrderRefundId": 6,
      "RefundType": 0,
      "RefundNo": "WPR01408316091800000001",
      "UserCode": "323231",
      "CashFee": 1,
      "RefundFee": 1,
      "CreateDate": "2016-09-18T17:01:01",
      "RefundStatus": "PROCESSING",
      "VipMobileNo": "18302188990",
      "VipName": "cycle"
    },
    {
      "OrderRefundId": 5,
      "RefundType": 0,
      "RefundNo": "WPR01944916091300000003",
      "UserCode": null,
      "CashFee": 1,
      "RefundFee": 1,
      "CreateDate": "2016-09-13T19:40:01",
      "RefundStatus": "PROCESSING",
      "VipMobileNo": "18302188990",
      "VipName": "cycle"
    }
  ],
  "PageTotal": 1,
  "BusinessCode": 0
}


 

退款单状态:

  • SUCCESS—退款成功

  • FAIL—退款失败

  • PROCESSING—退款处理中


6:订单撤销接口

 

接口说明:

  • 支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;如果用户支付成功,微信支付系统会将此订单资金退还给用户

请求说明:

  • http请求方式:POST

  • 返回数据格式:JSON

  • 是否需要签名:需要

  • 请求路径:/pay/createreverse


请求参数:

字段类型为空长度描述
AppIdstring

EZR
提供的
AppId
Timestampstring
时间戳
Signstring
签名
TradeNostring
Ezr支付订单号
OutTradeNostring
POS生成支付传入的TradeNo


注意:TradeNo与 OutTradeNo必须二选一,如果两者都有以TradeNo为主

返回参数:

字段类型描述
ResultCodelong业务结果
ErrCodeInt错误代码
ErrCodeDesstring错误描述
Recallstring是否需要继续调用撤销,Y-需要,N-不需要


 

请求参数示例:

{
    "AppId": "EZP",
    "Timestamp": "20160523235959",
    "Sign": "AB52DAC1832949EAC322FCFD7F515A987C9E8A67",
    "TradeNo": "WP01903617061500000002"
}


返回参数示例:

{
    "Success": true,
    "Msg": "操作成功",
    "Status": 200,
    "BusinessCode": 0,
    "ServerTime": "2017-06-15T21:50:56.3857797+08:00",
    "Result": {
        "ResultCode": "SUCCESS",
        "ErrCode": null,
        "ErrCodeDes": null,
        "Recall": "N"
    }
}