[关闭]
@ulodev 2018-07-03T10:05:52.000000Z 字数 22087 阅读 1940

优络服务接口文档-刷卡支付

列表项

支付 接口

1. 引言

1.1. 阅读对象

    本文阅读对象:商户系统(在线购物平台、人工收银系统、自动化智能收银系统或其他)集成微信、支付宝、QQ钱包支付涉及的技术架构师,研发工程师,测试工程师,系统运维工程师。

1.2. 业务术语

1、刷卡支付
     刷卡支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。
2、扫码支付
     请找商务索取最新文档。。
3、公众号支付
     请找商务索取最新文档。
4、H5支付
     请找商务索取最新文档。
5、APP 支付
     请找商务索取最新文档。
6、支付宝支付
     请找商务索取最新文档。
7、QQ 钱包支付
     请找商务索取最新文档。
8、百度钱包支付
     请找商务索取最新文档。

1.3. 支付账户

商户在优络服务平台(申请扫码支付、公众号支付)按照相应提示,申请相应支付模式。工作人员审核资料 无误后开通相应的支付模式,如:微信支付、支付宝支付、百度钱包、QQ 钱包支付等。申请审核通过后,商户 在申请资料填写的邮箱中收取到由优洛服务平台发送的邮件,此邮件包含开发时需要使用的支付账户信息

1.3.1. 服务账户参数说明

参数 API 参数名 详细说明
服务商号 provider_no 服务商申请优络服务后,由服务平台分配的服务商号
API 密钥 key 交易过程生成签名的密钥,不会在网络中传播。商户妥善保管该 Key, 切勿在网络中传输,不能在其他客户端中存储,保证 key 不会泄露
参数 API 参数名 详细说明
商户号 mch_id 商户申请优络服务后,由服务平台分配的商户收款账号。
API 密钥 key 交易过程生成签名的密钥,不会在网络中传播。商户妥善保管该 Key, 切勿在网络中传输,不能在其他客户端中存储,保证 key 不会被泄

1.3.2. 测试服务商账户

注意:此账户为测试环境服务商账户,接口需调用测试环境接口地址!

参数 API 参数名 详细说明
服务商号 26101575 服务商申请优络服务后,由服务平台分配的服务商号。
API 密钥 e4b7971ecf14704c78da71bea45af4fc 交易过程生成签名的密钥,不会在网络中传播。
金额 100 单位为分,1 元

1.3.3. 测试商户账户

注意:此账户为生产环境商户账户,接口需调用生产环境接口地址!

参数 API 参数名 详细说明
商户号 26384580 商户申请优络服务后,由服务平台分配的商户收款账号。
API 密钥 fcc635d8880de1135581bf07fc23ca79 交易过程生成签名的密钥,不会在网络中传播。
金额 100 单位为分,1 元

1.4. 刷卡支付Demo下载

2. 刷卡支付

2.1. 场景介绍

步骤 1:用户选择刷卡支付付款并打开微信,进入“我” ->“钱包” ->“刷卡”条码界面;
步骤 2:收银员在商户系统操作生成支付订单,用户确认支付金额;
步骤 3:商户收银员用扫码设备扫描用户的条码/二维码,商户收银系统提交支付;
步骤 4:微信支付后台系统收到支付请求,根据验证密码规则判断是否验证用户的支付密码,不需要验证密码的交易直接发起扣款,需要验证密码的交易会弹出密码输入框。支付成功后微信端会弹出成功页面,支付失败会弹出错误提示。

1.png-42.4kB 2.png-45.6kB
我的钱包 刷卡界面
1.png-42.4kB 2.png-45.6kB
输入密码,确认支付 支付成功后页面提示

2.2. 支付验证密码规则

2.3. 案例介绍

目前已上线刷卡支付案例,商户可自行前往店里实际体验。
便利店:711 便利店、国大 36524、好邻居等连锁药店:老百姓大药房、国大药房、海王星辰等
超市:天虹等
根据商户具体的情况,刷卡支付接入模式可分为:商户后台接入和门店接入;
根据用户是否需要输入支付密码可分为:免密模式和验密模式

2.3.1. 接入模式-商户后台接入

该模式适合具备统一后台系统的商户。门店收银台不商户后台通信,商户后台系统负责不微信支付系统发送交易请求和接收返回结果。

1.png-42.4kB
图 5.4 商户后台接入刷卡支付

2.3.2. 接入模式-门店接入

该模式适合门店收银台通过公网直接不微信后台通信的商户。 门店收银台直接发起交易请求和处理返回结果。
商户可以根据实际需要,处理门店和商户后台系统之间的其它业务流程

7.png-32.4kB
图 5.5 门店接入刷卡支付

2.3.3. 免密支付流程

本节以商户后台接入模式说明支付流程,请参看以下时序图:

8.png-71.6kB
图 5.6 刷卡支付免密流程时序图

流程详细说明:
(1)收银员在商户收银台生成支付订单,向用户展示支付金额;
(2)用户打开微信客户端,点击“我的钱包”,选择“刷卡”,进入条码界面;
(3)使用扫码设备读取用户手机屏幕上的条码;
(4)扫码设备将读取的信息上传给门店收银台;
(5)门店收银台得到支付信息后,向商户收银后台发起支付请求。
(6)商户后台对门店收银台的支付请求进行处理,生成签名后调用【提交刷卡支付 API】向微信支付系统发起支付请求。
(7)微信支付系统得到商户侧的支付请求之后会对请求进行验证,验证通过之后会对请求数据进行处理,最后将处理后的支付结果返回给商户收银后台。如果支付成功,微信支付系统会将支付结果返回给商户,同时把支付结果通知给用户(以短信、微信消息的形式通知)。
(8)商户收银后台对得到的支付结果进行签名验证和处理,再将支付结果返回给门店收银台。
(9)收银员看到门店收银台的支付结果后给用户发账。

2.3.4. 验密支付流程

场景交互不免密模式相同,不同的是在商户调用【提交刷卡支付API】发起支付请求之后,微信支付后台提示用户输入密码确认支付,接口同步返回USERPAYING状态,商户系统再轮询调用查询订单接口来确认当前用户是否已经支付成功
以下时序图说明验密支付流程:

11.png-138.5kB
图 5.7 刷卡支付验证密码流程时序图

由于在商户收银后台向微信支付系统发起支付请求之前的流程是完全一样的,所以这里只介绍商户发起支付请求之后的逻辑。
1)商户门店生成订单后,收银台向后台系统发起支付请求。
(2)后台调用微信支付【提交刷卡支付 API】生成支付交易。
(3)微信支付系统对商户请求进行验证,验证通过后判断当前用户需要输入密码。
(4)微信支付系统返回 USERPAYING 状态,商户后台系统将应答结果返回给商户门店收银台。
(5)微信支付系统通知用户微信客户端输入密码。
(6)用户得到输入密码提示后,确认支付并输入密码。
(7)完成密码输入,提交微信支付。
(8)微信客户端在用户完成支付后提示微信支付后台系统返回的支付结果,而且微信支付系统会通过短信、
微信消息给用户发送支付结果提醒。
(9)商户收银台得到 USERPAYING 状态后,经过商户后台系统调用【查询订单 API】查询实际支付结果。
(10)如果支付结果仍为 USERPAYING,则每隔 5 秒循环调用【查询订单 API】判断实际支付结果,如果用
户取消支付或累计 30 秒用户都未支付,商户收银台退出查询流程后继续调用【撤销订单 API】撤销支付交易。

2.3.5. 异常处理

用户遇到支付异常,请按如下说明处理
(1)用户微信端弹出系统错误提示框,用户可在交易列表查看交易情况,如果未找到订单,需要商户重新发
起支付交易;如果订单显示成功支付,商户收银系统再次调用【查询订单 API】查询实际支付结果;
(2)用户微信端弹出支付失败提示,例如:余额不足,信用卡失效。需要重新发起支付;
(3)当交易超时或支付交易失败,商户收银系统必须调用【撤销订单 API】,撤销此交易。
(4)由于银行系统异常、用户余额不足、不支持用户卡种等原因使当前支付交易失败,商户收银系统应该把
错误提示明确展示给收银员。
(5)根据返回的错误码,判断是否需要撤销交易,具体详见 API 返回错误码列表

3. 接口规则

3.1. 协议规则

调用API 必须遵循以下规则:

传输方式 为保证交易安全性,采用HTTPS传输
提交方式 采用POST方法提交
数据格式 提交和返回数据都为XML格式,根节点名为xml
字符编码 统一采用UTF-8字符编码
签名算法 MD5,后续会兼容SHA1、SHA256、HMAC等。
签名要求 请求和接收数据均需要校验签名,详细方法请参考[安全规范-签名算法]
证书要求 调用申请退款、撤销订单接口需要商户证书
判断逻辑为保证交易安全性,采用HTTPS传输

3.2. 参数规定

3.3. 安全规范

  1. appid wxd930ea5d5a258f4f
  2. mch_id 10000100
  3. device_info 1000 body

第一步:对参数按照 key=value 的格式,并按照参数名ASCII 字典序排序如下:

  1. stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100
  2. &nonce_str=ibuaiVcKdpRxkhJA";

第二步:拼接API 密钥:

  1. stringSignTemp="stringA&key=192006250b4c09247ec02edce69f6a2d"
  2. sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7"

最终得到最终发送的数据:

  1. <xml>
  2. <appid>wxd930ea5d5a258f4f</appid>
  3. <mch_id>10000100</mch_id>
  4. <device_info>1000<device_info>
  5. <body>test</body>
  6. <nonce_str>ibuaiVcKdpRxkhJA</nonce_str>
  7. <sign>9A0A8659F005D6984697E2CA0A9CF3B7</sign>
  8. <xml>

3.4. 数据格式

采用标准XML协议,所有参数只存在一级节点中,不采用多级节点嵌套。
协议级错误返回:

  1. <xml>
  2. <return_code><![CDATA[FAIL]]></return_code>
  3. <return_msg><![CDATA[404 Not Found]]></return_msg>
  4. </xml>

正确返回数据:

  1. <xml>
  2. <bank_type><![CDATA[SPDB_CREDIT]]></bank_type>
  3. <fee_type><![CDATA[CNY]]></fee_type>
  4. <is_subscribe><![CDATA[Y]]></is_subscribe>
  5. <mch_id><![CDATA[15121009]]></mch_id>
  6. <openid><![CDATA[ozaUDwqSo51HvC0lw9CrL20KXlsQ]]></openid>
  7. <out_trade_no><![CDATA[20150303398]]></out_trade_no>
  8. <result_code><![CDATA[SUCCESS]]></result_code>
  9. <return_code><![CDATA[SUCCESS]]></return_code>
  10. <third_trans_id><![CDATA[1004970044201510081126012906]]></third_trans_id>
  11. <time_end><![CDATA[20151008112037]]></time_end>
  12. <total_fee><![CDATA[1]]></total_fee>
  13. <trade_state><![CDATA[SUCCESS]]></trade_state>
  14. <trade_type><![CDATA[trade.weixin.micropay]]></trade_type>
  15. <transaction_id><![CDATA[1512100920150925000000010]]></transaction_id>
  16. </xml>

业务级错误返回:

  1. <xml>
  2. <err_code><![CDATA[AUTHCODEEXPIRE]]></err_code>
  3. <err_code_des><![CDATA[请扫描微信支付被扫条码/二维码]]></err_code_des>
  4. <result_code><![CDATA[FAIL]]></result_code>
  5. <return_code><![CDATA[SUCCESS]]></return_code>
  6. </xml>

4. API 列表

4.1. 刷卡支付接口

4.1.1. 应用场景

收银员使用扫码设备读取微信用户刷卡授权码以后,二维码或条码信息传送至商户收银台,由商户收银台或者商户后台调用该接口发起支付。
提醒 1:提交支付请求后微信会同步返回支付结果。当返回结果为“系统错误”时,商户系统等待 5 秒后调用【查询订单API】,查询支付实际交易结果;当返回结果为“USERPAYING”时,商户系统可设置间隔时间(建议 10 秒)重新查询支付结果,直到支付成功或超时(建议 30 秒);
提醒 2:在调用查询接口返回后,如果交易状况不明晰,请调用【撤销订单 API】,此时如果交易失败则关闭订单,该单不能再支付成功;如果交易成功,则将扣款退回到用户败户。当撤销无返回或错误时,请再次调用。
注意:请勿扣款后立即调用【撤销订单 API】 ,建议至少 5 分钟后再调用

注:该支付接口统一整合了支付宝、微信的小额刷卡支付,后台动态区分该笔交易是支付宝付款还是微信付款,前端调用者无需判断,如需要支付类型未开通的错诨,需要联系商务进行开通

4.1.2. 接口地址

测试环境地址:http://api.test.szulodev.com/pay/micropay
生产环境地址:https://api.ulopay.com/pay/micropay

特别提醒:服务商测试交易,请调用测试环境的地址,调试通过,没有问题后再使用正式服务商号和API密钥调生产环境地址,商户测试交易不受限制

4.1.3. 输入参数

字段名 变量名 类型 必填 描述
商户号 mch_id String(32) 商户号(服务商测试需传下属子商户号,如使用测试服务商号26101575,商户号可传26101576)
服务商号 provider_no String(32) 服务商可以替商户发起交易,所传商户号(mch_id)必须所属该服务商,签名的API 密钥(key)也要用对应的服务商的,不能用商户的API 密钥(key)。当服务商号为空时,签名用的API 密钥(key)应为商户的
门店编号 sub_mch_id String(32) 门店编号,在后台添加,用于识别该笔交易是来源不某个门 店,后台可根据此门店编号进行数据汇总查询。 该参数特别适用于有线下门店的商户,例如线下门店做交 易,钱统一收到总部。 没有门店则无需填写。
随机字符串 nonce_str String(32) 随机字符串,不长于32位
商品描述 body String(32) 商品或支付单简要描述
交易类型 trade_type String(32) 此参数为非必填,当使用银联刷卡支付类型时,为必填,传值:trade.unionpay.micropay
设备信息 device_info String(32) 调用刷卡支付的设备信息(QQ小额支付为必传字段)
商品详情 detail String(8192) 商品名称明细列表
附加数据 attach String(127) 附加数据,在查询 API 和支付通知中原样返回,该字段主 要用于商户携带订单的自定义数据
商户订单号 out_trade_no String(32) 商户系统内部的订单号,32 个字符内、可包含字母,其他说 明见商户订单号
总金额 total_fee Int 订单总金额,单位为分,只能为整数,详见 支付金额
货币类型 fee_type String(16) 默认人民币:CNY,其他值列表详见 货币类型
终端 IP spbill_create_ip String(16) 调用微信支付API的机器IP
商品标记 goods_tag String(32) 商品标记,代金券或立减优惠功能的参数
授权码 auth_code String(128) 扫码支付授权码,设备读取用户微信中的条码或者二维码 信息
操作终端类型 op_term_tp String(8) 取值:POS,WEB,PC
操作终端编号 op_term_no String(32) 终端设备号
操作门店编号 op_shop_no String(32) 门店编号
操作员编号 op_user_id String(32) 操作员帐号
签名 sign String(32) 签名,详见 签名生成算法

4.1.4. 返回结果

字段名 变量名 类型 必填 描述
返回状态码 return_code String(16) SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看 result_code 来判断
返回信息 return_msg String(128) 返回信息,如非空,为错误原因:签名失败、参数格式校验错误
return_codeSUCCESS的时候,还会包括以下字段:
返回状态码 return_code String(16) SUCCESS/FAIL
业务结果 result_code String(16) SUCCESS/FAIL
错误代码 err_code String(32) 详细参见错误列表
错误代码描述 err_code_des String(128) 错误返回的信息描述
return_coderesult_code都为SUCCESS的时,还会包括以下字段:
用户标识 openid String(128) 用户在商户 appid 下的唯一标识
是否关注公众号 is_subscribe String(1) 用户是否关注公众号,仅在公众号类型支付有效, 取值范围:Y 或 N;Y-关注;N-未关注
用户子标识 sub_openid String(128) 用户在子商户 appid 下的唯一标识
是否关注子公众号 sub_is_subscribe String(1) 用户是否关注子公众败号,Y-关注,N-未关注,仅在公 众败号类型支付有效
交易类型 trade_type String(16) 支付类型为 trade.weixin.micropay (即刷卡支付)
付款银行 bank_type String(16) 银行类型,采用字符串类型的银行标识,值列表详见银行类型
账币类型 fee_type String(16) 符合 ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见账币类型
总金额 total_fee Int 订单总金额,单位为分,只能为整数,详见支付金额
现金支付账币类型 cash_fee_type String(16) 符合 ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见账币类型
现金支付金额 cash_fee Int 订单现金支付金额,详见支付金额
代金券或立减优惠金额 coupon_fee Int 代金券或立减优惠金额订单总金额,订单总金额-代金券立减优惠金额=现金支付金额
平台支付订单号 transaction_id String(32) 平台支付订单号
微信支付订单号 third_trans_id String(32) 微信支付订单号
商户订单号 out_trade_no String(32) 商户系统的订单号,不请求一致。
商家数据包 attach String(128) 商家数据包,原样返回
支付完成时间 time_end String(14) 订单生成时间,格式为 yyyyMMddHHmmss,如 2009年 12 月 25 日 9 点 10 分 10 秒表示为 20091225091010。详见时间规则

4.1.5. 错误码

注意:如果当前交易返回的支付状态是明确的错误原因造成的支付失败(支付确认失败),请重新下单支付;如 果当前交易返回的支付状态是不明错误(支付结果未知),请调用查询订单接口确认状态。

名称 描述 原因 解决方案
NOAUTH 商户无此接口权限 商户未开通此接口权限 请商户前往申请此接口权限
NOTENOUGH 余额不足 用户帐号余额不足 用户帐号余额不足,请用户充值或更换支付 卡后再支付
ORDERPAID 商户订单已支付 商户订单已支付,无需重复操作 商户订单已支付,无需更多操作
ORDERCLOSED 订单已关闭 当前订单已关闭,无法支 付 当前订单已关闭,请重新下单
SYSTEMERROR 系统错误 系统超时 系统异常,请用相同参数重新调用
MCHID_NOT_EXIST MCHID 不存在 参数中缺少 MCHID 请检查 MCHID 是否正确
LACK_PARAMS 缺少参数 缺少必要的请求参数 请检查参数是否齐全
OUT_TRADE_NO_USE D 商户订单号重复 同一笔交易不能多次提 交 请核实商户订单号是否重复提交
SIGNERROR 签名错误 参数签名结果不正确 请检查签名参数和方法是否都符合签名算 法要求
XML_FORMAT_ERROR XML 格式错误 XML 格式错误 请检查 XML 参数格式是否正确
REQUIRE_POST_METH OD 请使用 post 方法 未使用 post 传递参数 请检查请求参数是否通过 post 方法提交
POST_DATA_EMPTY post 数据为空 post 数据不能为空 请检查 post 数据是否为空
NOT_UTF8 编码格式错误 未使用指定编码格式 请使用 NOT_UTF8 编码格式

4.2. 查询订单接口

4.2.1. 应用场景

该接口提供所有支付订单的查询,商户可以通过该接口主动查询订单状态,完成下一步的业务逻辑。 需要调用查询接口的情况:
◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
◆ 调用支付接口后,返回系统错误或未知交易状态情况;
◆调用被扫支付 API,返回 USERPAYING 的状态;
◆ 调用关单或撤销接口API 之前,需确认支付状态;

4.2.2. 接口地址

测试环境地址:http://api.test.szulodev.com/pay/orderquery
生产环境地址:https://api.ulopay.com/pay/orderquery

特别提醒:服务商测试交易,请调用测试环境的地址,调试通过,没有问题后再使用正式服务商号和API密钥调生产环境地址,商户测试交易不受限制

4.2.3. 请求参数

字段名 变量名 类型 必填 描述
商户号 mch_id String(32) 商户号(服务商测试需传下属子商户号,如使用测试服务商号26101575,商户号可传26101576)
服务商号 provider_no String(32) 服务商可以替商户发起交易,所传商户号(mch_id)必须所属该服务商,签名的API 密钥(key)也要用对应的服务商的,不能用商户的API 密钥(key)。当服务商号为空时,签名用的API 密钥(key)应为商户的
门店编号 sub_mch_id String(32) 门店编号,在后台添加,用于识别该笔交易是来源不某个门 店,后台可根据此门店编号进行数据汇总查询。 该参数特别适用于有线下门店的商户,例如线下门店做交 易,钱统一收到总部。 没有门店则无需填写。
平台订单号 transaction_ id String(32) 二选 一 平台订单号
商户订单号 out_trade_no String(32) 商户系统内部的订单号,当没提供 transaction_id 时需 要传这个。
随机字符串 nonce_str String(32) 随机字符串,不长于 32 位。推荐 随机数生成算法
操作终端类型 op_term_tp String(8) 取值:POS,WEB,PC
操作终端编号 op_term_no String(32) 终端设备号
操作门店编号 op_shop_no String(32) 门店编号
操作员编号 op_user_id String(32) 操作员帐号
签名 sign String(32) 签名,详见 签名生成算法

4.2.4. 返回结果

字段名 变量名 类型 必填 描述
返回状态码 return_code String(16) SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看result_code 来判断
返回信息 return_msg String(128) 返回信息,如非空,为错误原因签名失败参数格式校验错误
以下字段在return_codeSUCCESS的时候有返回
业务结果 result_code String(16) SUCCESS/FAIL
返回状态码 return_code String(16) SUCCESS/FAIL
错误代码 err_code String(32) 详细参见错误列表
错误代码描述 err_code_des String(128) 错误返回的信息描述
以下字段在return_coderesult 都为SUCCESS的时候有返回
商户号 mch_id String(32) 商户号
交易类型 trade_type String(16) 调用接口提交的交易类型,取值详细说明见 参数规定
交易状态 trade_state String(32) SUCCESS—支付成功
REFUND—转入退款
NOTPAY—未支付
CLOSED—已关闭
REVOKED—已撤销(刷卡支付)
USERPAYING--用户支付中
PAYERROR--支付失败(其他原因,如银行返回失败)
用户标识 openid String(128) 用户在商户 appid 下的唯一标识
是否关注公众号 is_subscribe String(1) 用户是否关注公众号,仅在公众号类型支付有效, 取值范围:Y 或 N;Y-关注;N-未关注
付款银行 bank_type String(16) 银行类型,采用字符串类型的银行标识
总金额 total_fee Int 订单总金额,单位为分
货币种类 fee_type String(8) 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见 货币类型
现金支付金额 cash_fee Int 现金支付金额订单现金支付金额,详见 支付金额
现金支付货币 类型 cash_fee_type String(16) 货币类型,符合 ISO 4217 标准的三位字母代码,默 认人民币:CNY,其他值列表详见 货币类型
代金券或立减 优惠金额 coupon_fee Int “代金券或立减优惠”金额<=订单总金额, 订单总金额-“代金券或立减优惠”金额=现金支付金额,详见 代金券或立减优惠
代金券或立减 优惠使用数量 coupon_count Int 代金券或立减优惠使用数量
代金券或立减 优惠批次 ID coupon_batch_i d_$n String(20) 代金券或立减优惠批次 ID ,$n 为下标,从 0 开始编号
代金券或立减 优惠 ID coupon_id_$n String(20) 代金券或立减优惠 ID, $n 为下标,从 0 开始编号
单个代金券或 立减优惠支付 金额 coupon_fee_$n Int 单个代金券或立减优惠支付金额, $n 为下标,从 0 开 始编号
平台支付订单 号 transaction_id String(32) 平台支付订单号
微信支付订单 号 third_trans_id String(32) 微信支付订单号
商户订单号 out_trade_no String(32) 商户系统的订单号,不请求一致。
附加数据 attach String(128) 附加数据,原样返回
支付完成时间 time_end String(14) 订单支付时间,格式为 yyyyMMddHHmmss,如 200 9 年 12 月 25 日 9 点 10 分 10 秒表示为 20091225091 010。其他详见时间规则
交易状态描述 trade_state_des c String(256) 对当前查询订单状态的描述和下一步操作的指引

4.2.5. 错误码

名称 描述 原因 解决方案
ORDERNOTEXIST 此交易订单号 不存在 查询系统中不存 在此交易订单号 该 API 只能查提交支付交易返回成功的订单,请商户检查需要查询的订 单号是否正确
SYSTEMER ROR 系统错误 后台系统返回错误 系统异常,请再调用发起查询

4.3. 撤销订单接口

4.3.1. 应用场景

支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,支付系统会将此订单关闭;如果用户支付成功,系统会将此订单资金退还给用户。
注意:7 天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。提交支付交易后调用【查询订单 API】,没有明确的支付结果再调用【撤销订单 API】。调用支付接口后请勿立即调用撤销订单 API,建议支付后至少 5 分钟再调用撤销订单接口。

4.3.2. 接口地址

测试环境地址:http://api.test.szulodev.com/secapi/pay/reverse
生产环境地址:https://api.ulopay.com/secapi/pay/reverse

特别提醒:服务商测试交易,请调用测试环境的地址,调试通过,没有问题后再使用正式服务商号和API密钥调生产环境地址,商户测试交易不受限制

4.3.3. 输入参数

字段名 变量名 类型 必填 描述
商户号 mch_id String(32) 商户号(服务商测试需传下属子商户号,如使用测试服务商号26101575,商户号可传26101576)
门店编号 sub_mch_id String(32) 门店编号,在后台添加,用于识别该笔交易是来源不某个门 店,后台可根据此门店编号进行数据汇总查询。 该参数特别适用于有线下门店的商户,例如线下门店做交 易,钱统一收到总部。 没有门店则无需填写。
平台订单号 transaction_ id String(32) 二选 一 平台订单号
商户订单号 out_trade_no String(32) 商户系统内部的订单号,当没提供 transaction_id 时需 要传这个。
随机字符串 nonce_str String(32) 随机字符串,不长于 32 位。推荐 随机数生成算法
操作终端类型 op_term_tp String(8) 取值:POS,WEB,PC
操作终端编号 op_term_no String(32) 终端设备号
操作门店编号 op_shop_no String(32) 门店编号
操作员编号 op_user_id String(32) 操作员帐号
签名 sign String(32) 签名,详见 签名生成算法

4.3.4. 返回结果

字段名 变量名 类型 必填 描述
返回状态码 return_code String(16) SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看result_code 来判断
返回信息 return_msg String(128) 返回信息,如非空,为错误原因签名失败参数格式校验错误
以下字段在return_codeSUCCESS的时候有返回
业务结果 result_code String(16) SUCCESS/FAIL
返回状态码 return_code String(16) SUCCESS/FAIL
错误代码 err_code String(32) 详细参见错误列表
错误代码描述 err_code_des String(128) 错误返回的信息描述

4.3.5. 错误码

名称 描述 原因 解决方案
SYSTEMERROR 接口返回错误 系统超时 请用相同参数再次调用 API
INVALID_TRANSACTI ONID 无效 transaction_id 请求参数未按指引进 行填写 请求参数错误,检查原交易号是否存在或发起支付 交易接口返回失败
PARAM_ERROR 参数错误 请求参数未按指引进 行填写请求参数错误,请重新检查再调用退款申请
MCHID_NOT_EXIST MCHID 不存在 参数中缺少 MCHID 请检查 MCHID 是否正确
REQUIRE_POST_METH OD 请使用 post 方法 未使用 post 传递参 数 请检查请求参数是否通过 post 方法提交
SIGNERROR 签名错误 参数签名结果不正确 请检查签名参数和方法是否都符合签名算法要求
XML_FORMAT_ERROR XML 格式错误 XML 格式错误 请检查 XML 参数格式是否正确

4.4. 申请退款接口

4.4.1. 应用场景

当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。

注意:退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。 一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额。

4.4.2. 接口地址

测试环境地址:http://api.test.szulodev.com/secapi/pay/refund
生产环境地址:https://api.ulopay.com/secapi/pay/refund

特别提醒:服务商测试交易,请调用测试环境的地址,调试通过,没有问题后再使用正式服务商号和API密钥调生产环境地址,商户测试交易不受限制

4.4.3. 输入参数

字段名 变量名 类型 必填 描述
商户号 mch_id String(32) 商户号(服务商测试需传下属子商户号,如使用测试服务商号26101575,商户号可传26101576)
服务商号 provider_no String(32) 服务商可以替商户发起交易,所传商户号(mch_id)必须所属该服务商,签名的API 密钥(key)也要用对应的服务商的,不能用商户的API 密钥(key)。当服务商号为空时,签名用的API 密钥(key)应为商户的
门店编号 sub_mch_id String(32) 门店编号,在后台添加,用于识别该笔交易是来源不某个门 店,后台可根据此门店编号进行数据汇总查询。 该参数特别适用于有线下门店的商户,例如线下门店做交 易,钱统一收到总部。 没有门店则无需填写。
随机字符串 nonce_str String(32) 随机字符串,不长于 32 位。推荐 随机数生成算法
平台订单号 transaction_id String(28) 二选一 平台生成的订单号,在支付通知中有返回
商户订单号 out_trade_no String(32) 商户的订单号
商户退款单号 out_refund_no String(32) 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
总金额 total_fee Int 订单总金额,单位为分,只能为整数,详见 支付金额
退款金额 refund_fee Int 退款总金额,订单总金额,单位为分,只能为整数,详见 支付金额
货币种类 refund_fee_typ e String(8) 货币类型,符合 ISO 4217 标准的三位字母代码,默认人 民币:CNY,其他值列表详见 货币类型
操作终端类型 op_term_tp String(8) 取值:POS,WEB,PC
操作终端编号 op_term_no String(32) 终端设备号
操作门店编号 op_shop_no String(32) 门店编号
操作员编号 op_user_id String(32) 操作员帐号
签名 sign String(32) 签名,详见 签名生成算法

4.4.4. 返回结果

字段名 变量名 类型 必填 描述
返回状态码 return_code String(16) SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看 result_code 来判断
返回信息 return_msg String(128) 返回信息,如非空,为错误原因 签名失败 参数格式校验错误
以下字段在return_codeSUCCESS的时候有返回
业务结果 result_code String(16) SUCCESS/FAIL
返回状态码 return_code String(16) SUCCESS/FAIL
错误代码 err_code String(32) 详细参见错误列表
错误代码描述 err_code_des String(128) 错误返回的信息描述
return_coderesult_code 都为SUCCESS的时,还会包括以下字段:
商户号 mch_id String(32) 商户号
平台订单号 transaction_id String(28) 平台订单号
微信订单号 third_trans_id String(28) 微信订单号
商户订单号 out_trade_no String(32) 商户系统内部的订单号
商户退款单号 out_refund_no String(32) 商户退款单号
平台退款单号 refund_id String(28) 平台退款单号
微信退款单号 third_refund_id String(28) 微信退款单号
退款渠道 refund_channel String(16) ORIGINAL—原路退款 BALANCE—退回到余额
退款金额 refund_fee Int 退款总金额,单位为分,可以做部分退款
订单总金额 total_fee Int 订单总金额,单位为分,只能为整数,详见 支付金额
订单金额货币 种类 fee_type String(8) 订单金额货币类型,符合 ISO 4217 标准的三位字母代码, 默认人民币:CNY,其他值列表详见 货币类型
现金支付金额 cash_fee Int 现金支付金额,单位为分,只能为整数,详见 支付金额
现金退款金额 cash_refund_fee Int 现金退款金额,单位为分,只能为整数,详见 支付金额
代金券或立减 优惠退款金额 coupon_refund_f ee Int 代金券或立减优惠退款金额=订单金额-现金退款金额,注 意:立减优惠金额不会退回
代金券或立减 优惠使用数量 coupon_refund_ count Int 代金券或立减优惠使用数量
代金券或立减 优惠 ID coupon_refund_i d String(20) 代金券或立减优惠 ID

4.4.5. 错误码

名称 描述 原因 解决方案
SYSTEMERROR 接口返回错误 系统超时 请用相同参数再次调用 API
INVALID_TRANSACTI ONID 无效 transaction_id 请求参数未按指引进 行填写 请求参数错误,检查原交易号是否存在或发起支付 交易接口返回失败
PARAM_ERROR 参数错误 请求参数未按指引进 行填写请求参数错误,请重新检查再调用退款申请
MCHID_NOT_EXIST MCHID 不存在 参数中缺少 MCHID 请检查 MCHID 是否正确
REQUIRE_POST_METH OD 请使用 post 方法 未使用 post 传递参 数 请检查请求参数是否通过 post 方法提交
SIGNERROR 签名错误 参数签名结果不正确 请检查签名参数和方法是否都符合签名算法要求
XML_FORMAT_ERROR XML 格式错误 XML 格式错误 请检查 XML 参数格式是否正确

4.5. 查询退款接口

4.5.1. 应用场景

提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款 20 分钟内到账,银行
卡支付的退款 3 个工作日后重新查询退款状态。

4.5.2. 接口地址

测试环境地址:https://api.test.szulodev.com/pay/refundquery
生产环境地址:https://api.ulopay.com/pay/refundquery

特别提醒:服务商测试交易,请调用测试环境的地址,调试通过,没有问题后再使用正式服务商号和API密钥调生产环境地址,商户测试交易不受限制

4.5.3. 输入参数

字段名 变量名 类型 必填 描述
商户号 mch_id String(32) 商户号(服务商测试需传下属子商户号,如使用测试服务商号26101575,商户号可传26101576)
服务商号 provider_no String(32) 服务商可以替商户发起交易,所传商户号(mch_id)必须所属该服务商,签名的API 密钥(key)也要用对应的服务商的,不能用商户的API 密钥(key)。当服务商号为空时,签名用的API 密钥(key)应为商户的
随机字符串 nonce_str String(32) 随机字符串,不长于 32 位。推荐 随机数生成算法
签名 sign String(32) 签名,详见 签名生成算法
操作终端类型 op_term_tp String(8) 取值:POS,WEB,PC
操作终端编号 op_term_no String(32) 终端设备号
操作门店编号 op_shop_no String(32) 门店编号
操作员编号 op_user_id String(32) 操作员帐号
平台订单号 transaction_id String(28) 四 选 一 平台订单号
商户订单号 out_trade_no String(32) 商户系统内部的订单号
商户退款单号 out_refund_no String(32) 商户退款单号
平台退款单号 refund_id String(28) 微信生成的退款单号,在申请退款接口有返回

4.5.4. 返回结果

字段名 变量名 类型 必填 描述
返回状态码 return_code String(16) SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看result_code 来判断
返回信息 return_msg String(128) 返回信息,如非空,为错误原因 签名失败 参数格式校验错误
以下字段在 return_code SUCCESS 的时候有返回
业务结果 result_code String(16) SUCCESS/FAIL
返回状态码 return_code String(16) SUCCESS/FAIL
错误代码 err_code String(32) 详细参见错误列表
错误代码描述 err_code_des String(128) 错误返回的信息描述
return_coderesult_code 都为 SUCCESS 的时,还会包括以下字段:
商户号 mch_id String(32) 商户号
平台订单号 transaction_id String(32) 平台订单号
微信订单号 third_trans_id String(32) 微信订单号
商户订单号 out_trade_no String(32) 商户系统内部的订单号
订单总金额 total_fee Int 订单总金额,单位为分,只能为整数,详见 支付金额
订单金额货币 种类 fee_type String(8) 订单金额货币类型,符合 ISO 4217 标准的三位字母代码, 默认人民币:CNY,其他值列表详见 货币类型
现金支付金额 cash_fee Int 现金支付金额,单位为分,只能为整数,详见 支付金额
退款笔数 refund_count Int 退款记录数
商户退款单号 out_refund_no _$n String(32) 商户退款单号
平台退款单号 refund_id_$n String(28) 平台退款单号
退款渠道 refund_channel _$n String(16) ORIGINAL—原路退款 BALANCE—退回到余额
退款金额 refund_fee_$n Int 退款总金额,单位为分,可以做部分退款
代金券或立减 优惠退款金额 coupon_refund _fee_$n Int 代金券或立减优惠退款金额<=退款金额,退款金额-代金 券或立减优惠退款金额为现金,说明详见 代金券或立减优惠
代金券或立减 优惠使用数量 coupon_refund _count_$n Int 代金券或立减优惠使用数量 ,$n 为下标,从 0 开始编号
代金券或立减 优惠批次 ID coupon_refund _ batch_ id_$n_ $m String(20) 批次 ID ,$n 为下标,$m 为下标,从 0 开始编号
代金券或立减 优惠 ID coupon_refund _id_$n_$m String(20) 代金券或立减优惠 ID, $n 为下标,$m 为下标,从 0 开 始编号
单个代金券 或 立减优惠支付 金额 coupon_refund _fee_$n_$m Int 单个代金券或立减优惠支付金额, $n 为下标,$m 为下标, 从 0 开始编号
退款状态 refund_status_$n String(16) 退款状态: SUCCESS—退款成功
FAIL—退款失败
PROCESSING—退款处理中
NOTSURE—未确定,需要商户原退款单号重新发起
CHANGE—转入代发,退款到银行发现用户的卡作废或者冻结 了,导致原路退款银行卡失败,资金回流到商户的现金帐 号,需要商户人工干预,通过线下或者财付通转账的方式进 行退款。

4.5.5. 错误码

名称 描述 原因 解决方案
SYSTEMERROR 接口返回错误 系统超时 请尝试再次掉调用 API。
INVALID_TRANSACTI ONID 无效transaction_ id 请求参数未按指引进行 填写 请求参数错误,检查原交易号是否存在或发起支 付交易接口返回失败
PARAM_ERROR 参数错误 请求参数未按指引进行 填写 请求参数错误,请检查参数再调用退款申请
APPID_NOT_EXIST APPID 不存在 参数中缺少 APPID 请检查 APPID 是否正确
MCHID_NOT_EXIST MCHID 不存在 参数中缺少 MCHID 请检查 MCHID 是否正确
APPID_MCHID_NOT_ MATCH appid 和 mch_id 不匹配 appid 和 mch_id 不匹 配 请确认 appid 和 mch_id 是否匹配
REQUIRE_POST_MET HOD 请使用 post 方法 未使用 post 传递参数 请检查请求参数是否通过 post 方法提交
SIGNERROR 签名错误 参数签名结果不正确 请检查签名参数和方法是否都符合签名算法要求
XML_FORMAT_ERRO R XML 格式错 XML 格式错误 请检查 XML 参数格式是否正确

4.6. 下载账单接口

4.6.1. 应用场景

商户可以通过该接口下载历史交易清单。比如掉单、系统错误等导致商户侧和平台侧数据不一致,通过对账单核对后可校正支付状态。
注意:
1、平台侧未成功下单的交易不会出现在对账单中。
2、平台在次日 10 点启动生成前一天的对账单,建议商户 11 点后再获取;
3、对账单中涉及金额的字段单位为“元”。
4、对账单接口只能下载三个月以内的账单。

4.6.2. 接口地址

测试环境地址:http://api.test.szulodev.com/pay/downloadbill
生产环境地址:https://api.ulopay.com/pay/downloadbill

4.6.3. 请求参数

字段名 变量名 类型 必填 描述
商户号 mch_id String(32) 当bill_type为“1”时,mch_id传服务商号,为“2”时传商户号
随机字符串 nonce_str String(32) 随机字符串,不长于 32 位。推荐 随机数生成算法
对账单日期 bill_date String(8) 下载对账单的日期,格式:20140603
商户类型 bill_type String(2) 1-服务商 2-商户(不传默认为商户,如果为服务商,签名时API密钥必须为服务商的)
签名 sign String(32) 签名,详见 签名生成算法

4.6.4. 返回结果

字段名 变量名 类型 必填 描述
返回状态码 return_code String(16) SUCCESS/FAIL## 标题 ## 此字段是通信标识,非交易标识,交易是否成功需要查看 result_code 来判断
返回信息 return_msg String(128) 返回信息,如非空,为错误原因 签名失败 参数格式校验错误

成功时,数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退 款结果一致,具体字段说明可查阅相应接口。

第一行为表头:
交易时间,商户号,子商户号,设备号,平台单号,第三方单号,商户单号,用户标识,交易类型,交易状态,付款银行,货币 种类,总金额,红包金额,平台退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品 名称, 商户数据包

从第二行起,为数据记录,各参数以逗号分隔,参数前增加`符号,为标准键盘 1 左边键的字符,字段顺序不表 头一致。

倒数第二行为订单统计标题,最后一行为
统计数据 总交易单数,总交易额,总退款金额,总红包退款金额
示例如下:

交易时间,商户号,子商户号,设备号,平台单号,第三方单号,商户单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金 额,红包金额,平台退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,商户数据包

  1. `2016-09-03 10:40:11,`15121009,`15121009,`,`1512100920160903109790993,`8012016090310243946534287,`201609031039491
  2. 05714,`,`trade.weixin.micropay,`SUCCESS,`,`CNY,`0.01,`0,`,`,`0,`0,`,`,`测试购物,`
  3. `2016-09-03 14:56:38,`15121009,`15121009,`,`1512100920160903149824853,`8012016090314245624846302,`201609031456288
  4. 62401,`,`trade.weixin.micropay,`SUCCESS,`,`CNY,`0.01,`0,`,`,`0,`0,`,`,`测试购物,`
  5. 总交易单数,总交易额,总退款金额,总红包退款金额
  6. `2,`0.02,`0.00,`0

4.6.5. 错误码

名称 描述 原因 解决方案
SYSTEMERROR 系统错误 后台系统返回错误 系统异常,请再调用发起查询
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注