目录:

  1. 场景介绍
    1.1 扫码付场景
    1.2 刷卡付场景
  2. 接入指引
    2.1 准备工作
    2.2 接口调用规范
    2.2.1 请求说明
  3. API列表
    3.1 获取二维码串/提交订单
    3.2 交易结果查询接口
    3.3 交易退款接口
    3.4 交易退款结果查询接口
    3.5 关闭订单
    3.6 对账文件下载
    3.7 交易结果查询接口(含退款信息)
    3.8 支付宝人脸初始化接口
    3.9 支付宝人脸核身获取用户详细信息
  4. 系统交互
  5. 修订记录

1. 场景介绍

线下当面付包含扫码支付(扫码付)和条码支付(刷卡付)两种付款方式,聚合支付平台对这两种当面付进行了接口统一。

1.1 扫码付场景

扫码付,指用户打开支付宝/微信中的“扫一扫”功能,扫描商家展示在某收银场景下的二维码并进行支付的模式。该模式适用于线下实体店支付、面对面支付、自助机等场景。业务流程如下:

1.2 刷卡付场景

刷卡付(条码支付)是第三方支付给到线下传统行业的一种收款方式。商家使用扫码枪等条码识别设备扫描用户支付宝/微信钱包上的条码/二维码,完成收款。用户仅需出示付款码,所有收款操作由商家端完成。该模式一般用于医院的收银窗口场景。业务流程如下:

2. 接入指引

2.1 准备工作

第一步、获取开发者数据

调用聚合支付平台接口,需要与平台商务对接后,获取开发者ID(developId),密钥(privateKey),公钥(publicKey)和对称密钥(desKey),这些参数让商户拥有调用平台接口的权限,对请求的数据进行加密以保证数据的安全性。

  • 开发者ID(developerId):
      developerId在所有的请求中都需要传入,与密钥公钥信息相对应,鉴别请求是否是由平台商户发起。
  • 密钥(privateKey):
      密钥在接口请求中用于对数据进行RSA加密,生成签名sign。
  • 公钥(publicKey):
      公钥用于对签名进行解密
  • 对称密钥(desKey):
      在线上支付中,<body>标签的中的参数,需要通过des进行对称加密,得到密文进行请求。

第二步、获取平台商户号

每个商户对接聚合支付平台,在第三方平台想要拥有的支付能力,需要在支付宝或者微信签约对应的支付方式,平台的商务会为每个商户分配一个平台商户号(merchantNo),该商户号账户下所有的交易流水都会进入到对应的支付宝和微信的账户下,并且平台账单流水都是以商户号进行隔离,这是一个非常重要的参数。

第三步、下载加解密sdk和demo

2.2 接口调用规范

2.2.1 请求说明
参数 类型 是否必填 最大长度 描述 示例
data String 300 请求参数转为xml格式 <xml><paytype>2</paytype><merchant_no>10000</merchant_no></xml>
developerId String 10 开发者id 12345
funcId String 20 功能码 P7001
sign String 100 将公共参数以“参数名”ASCII码顺序排序拼接成新字符串(参数名ASCII码从小到大排序(字典序))得到:“data=value1&developerId=value2&funcId=value3”,再将新的字符串经过RSA签名得到签名后的字符串 Sa/hb9jaTZZZq89mN62DDooLv/YTvfE9ayrbzgOMsucfIPZfJGmhUia6YWK8vQ5/NQana3Pub7BDswEenm0sBg==
  • 公共返回参数说明:
参数 类型 是否必填 最大长度 描述 示例
retCode String 30 0000:表示接口业务调用正常,9999:表示处理失败,如参数错误,验签失败等(注:retCode并不表示交易行为成功或失败,某笔交易是否成功请根据对应接口返回报文的状态字段来判定 0000
retMsg String 100 接口调用异常返回信息 验签失败

3. API列表

3.1 获取二维码串/提交订单

  • 功能码:P7001
  • 接口说明:扫码付(C扫B)调用该接口得到二维码串,刷卡付(B扫C)通过该接口提交订单
  • 请求参数:<xml>
参数 名称 类型 长度 是否必填 说明 示例
treatment_id 诊疗卡卡号 String 30 患者的诊疗卡卡号 123
merchant_no 收款商户号 String 30 创业聚合支付系统为医院分配的平台商户号 809900000001
username 支付者姓名 String 30 付款者姓名 张三
order_no 业务单号 String 30 商户业务系统的唯一订单号 BX20190722902141
paytype 支付渠道 String 2 2=支付宝; 3=微信 5=云闪付 6=数字人民币 2
trade_type 交易类型 String 2 1=扫码付; 2=刷卡付; 7=刷脸付 1
total_amt 支付金额 Price 20.2 以元为单位 0.01
spbill_create_ip 用户IP String 10 客户端实际ip(微信需要) 183.156.115.113
order_subject 商品标题 String 150 如:门诊、住院预交、住院结算、自助缴费等 门诊
order_detail 商品描述 String 300 如:门诊挂号、门诊结算、住院预交、住院结算、自助挂号、自助结算、自助住院预交等 门诊挂号
sub_merchant 分店号 String 30 商户内部区分订单字段 001
paytimeout 订单超时时间 String 3 单位是: m (分钟) 如果不填,默认是 6分钟,如果填,必须大于5分钟 6
mobile 手机号码 String 15 用户手机号 13211112222
auth_code 授权码 String 128 刷卡付,刷脸付必传 134692901956119825
scene_type 场景类型 String 1
0=his窗口场景缺省
1=自助机
自助机刷脸必填
1
terminal_id 商户机具终端编号 String 1 自助机刷脸必填 NJ_T_001
store_id 商户门店编号 String 1 支付宝参数 NJ_001
alipay_store_id 支付宝内部门店编号 String 1 支付宝参数
remark 备注 String 200 备注
big_merchant_no 统一商户号 String 30 流水转入统收商户中(不建议使用,对账无法区分)
notifyURL 自定义支付结果通知地址 String 单独为此订单配置的支付结果通知地址 http://test.com/callback
goodsTag 支付优惠场景 String 128 涉及到2022-04-01日后的微信返佣 REGISTRATION_FEE 门诊挂号
MEDICINE_AND_TEST 门诊缴费
HOSPITALIZATION 住院
ONLINE_CONSULTATION 在线问诊
NUCLEIC_ACID_TEST 核酸检测
BODY_TEST 体检
SCAN_TO_ORDER 医院餐饮
MEDICAL_COSMETOLOGY 医疗美容、整形等
VALUE_ADDED_SERVICE 增值服务(远程探视、VIP 套餐、高端医疗等)
PARKING 医院停车场缴费
RETAIL 医院零售(超市、便利店、自助售货机等)
COMMERCIAL_OTHERS 其他商业场景
  • 响应参数:
参数 名称 类型 长度 是否必输 说明 示例
return_code 返回状态码 String 16 SUCCESS/OK代表成功 FAIL=代表失败 WAIT=待支付 不能以此作为支付成功标志,支付结果以status为准 SUCCESS
return_msg 返回信息 String 128 返回信息 OK
code_url 二维码串 String 500 扫码付时返回
status 支付状态 String 2 1=成功;0=支付中 需要调用查询接口轮询查询订单状态 刷卡支付时使用 1
pay_orderno 支付渠道流水号 String 32 刷卡支付时使用 4200000376201908224052992001
order_no 平台流水号 String 32 刷卡支付时使用 34411000
out_tradeno 业务单号 String 32 刷卡支付时使用 BX20190722902141
time_end 支付完成时间 String 32 刷卡支付时使用(yyyyMMddHHmmss) 20190722205306
amt 实际支付金额 Price 16.2 刷卡支付时使用 0.01
receipt_amount 商户收到的金额 Price 16.2 刷卡支付时使用(相当于订单支付金额) 0.01
  • Java请求示例:
    String data = "<xml>" +
                  "<treatment_id>123123123123</treatment_id>" +
                  "<merchant_no>1001003</merchant_no>" +
                  "<username>测试者</username>" +
                  "<order_no>"+ "xw20190722001"+"</order_no>" +
                  "<paytype>3</paytype>" +
                  "<trade_type>2</trade_type>" +
                  "<total_amt>0.01</total_amt>" +
                  "<spbill_create_ip>192.168.11.1</spbill_create_ip>" +
                  "<order_subject>测试</order_subject>" +
                  "<order_detail>测试</order_detail>" +
                  "<auth_code>130195331105619585</auth_code>" +
                  "</xml>";
          List<NameValuePair> list = new ArrayList<NameValuePair>();
          NameValuePair valu1 = new BasicNameValuePair("data",data);
          NameValuePair valu2 = new BasicNameValuePair("developerId",[your developerId]);
          NameValuePair valu3 = new BasicNameValuePair("funcId","P7001");
          String privateKey = [your privateKey];
          String signData = "data="+data+"&developerId=[your developerId]&funcId=P7001";
          String sign = SecurityUtil.signRSA(signData,privateKey,"utf-8");
          NameValuePair valu4 = new BasicNameValuePair("sign",sign);
          list.add(valu1);
          list.add(valu2);
          list.add(valu3);
          list.add(valu4);
          String xml = null;
          try {
              CloseableHttpResponse response = HttpClients.custom().build().execute(RequestBuilder.post().setUri("http://offlinetest.bsoftpay.com/gatewayOffline/pay/offline/execute").setEntity(new UrlEncodedFormEntity(list, Consts.UTF_8)).build());
              xml = EntityUtils.toString(response.getEntity());
          } catch (Exception e) {
              e.printStackTrace();
          }
          System.out.println(xml);
  • 返回示例:
    developerId=12345&funcId=P7001&retCode=0000&retMsg= &data=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xml>
    <return_code>SUCCESS</return_code>
    <return_msg>OK</return_msg>
    <status>1</status>
    <pay_orderno>4200000376201907220000000000</pay_orderno>
    <order_no>34411000</order_no>
    <out_tradeno>WX15637998177239200001</out_tradeno>
    <time_end>20190722205306</time_end>
    <amt>0.01</amt>
    <receipt_amount>0.01</receipt_amount>
    </xml>
    &sign=Apu4i49RBQkh94n5BVEA/Ao35tjfT8BsTPA9fOqKUmbKJ37Pszfi0sS9R15OLEpXJYo6p2v+uw1fr/BE+PSxHg==
  • 异常返回示例:
    developerId=12345&funcId=P7001&retCode=9999&retMsg=请扫描微信支付授权码(以10/11/12/13/14/15为前缀的18位数字)&sign=XD1unE4I2pM/jWMXy1o7NwVB2H3yfkmxluH2qz3xRt+mB8VQNSLhKnz79+5PuRfz9Q4y44CKCyL7S21iQzOHbg==
  • 注意:签名sign生成之后,在请求发送之前,需要对签名字符串进行urlEncode编码,否则字符串在传递过程中可能会不完整,从而导致“验证签名失败”

3.2 交易结果查询接口

  • 功能码:P2005
  • 接口说明:通过该接口获取某个订单的支付结果
  • 请求参数:<Data>
参数 名称 类型 长度 是否必填 说明 示例
order_no 业务单号 String 32 商户内部业务单号 WX2019072200001
trade_no 平台单号 String 32 与order_no不全为空 平台单号 422604191
merchant_no 收款商户号 String 32 商户号 809900000001
prefer_properties 希望在应答中增加的订单信息字段 String 512 json格式 [“payAccount”,”str3”]
  • 响应参数:
参数 名称 类型 长度 是否必输 说明 示例
TradeNo 平台流水号 String 32 聚合支付平台流水号 34411000
PayTradeNo 渠道流水号 String 32 各个支付渠道返回的流水号 4200000376201907220000000000
OrderNo 业务单号 String 32 商户内部业务单号 WX2019072200001
Amt 实际支付金额 Price 16.2 用户实际付款金额 0.01
PayTime 实际支付时间 String 16 yyyy-MM-dd hh:mm:ss 2019-07-22 21:37:31
PayStatus 支付状态 String 6 0=未支付;1=支付成功;2=支付失败;-1=关闭或撤销 1
receipt_amount 商户收到的金额 Price 16.2 相当于订单支付金额 0.01
Attach 希望在应答中增加的订单信息字段 String 512 xml格式
  • JAVA请求示例:
    String data = "<Data>" +
                  "<order_no>WX2019072200001</order_no>\n" +
                  "<merchant_no>809900000001</merchant_no>\n"+
                  "</Data>";
          List<NameValuePair> list = new ArrayList<NameValuePair>();
          NameValuePair valu1 = new BasicNameValuePair("data",data);
          NameValuePair valu2 = new BasicNameValuePair("developerId",[your developerId]");
          NameValuePair valu3 = new BasicNameValuePair("funcId","P2005");
          String privateKey = [your privateKey];
          String signData = "data="+data+"&developerId=[your developerId]&funcId=P2005";
          String sign = SecurityUtil.signRSA(signData,privateKey,"utf-8");
          NameValuePair valu4 = new BasicNameValuePair("sign",sign);
          list.add(valu1);
          list.add(valu2);
          list.add(valu3);
          list.add(valu4);
          String xml = null;
          try {
              CloseableHttpResponse response = HttpClients.custom().build().execute(RequestBuilder.post().setUri("http://offlinetest.bsoftpay.com/gatewayOffline/pay/offline/execute").setEntity(new UrlEncodedFormEntity(list, Consts.UTF_8)).build());
              xml = EntityUtils.toString(response.getEntity());
          } catch (Exception e) {
              e.printStackTrace();
          }
          System.out.println(xml);
  • 返回示例:
    developerId=66337&funcId=P2005&retCode=0000&retMsg= &data=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Data>
    <TradeNo>34411000</TradeNo>
    <PayTradeNo>4200000376201907220000000000</PayTradeNo>
    <OrderNo>WX2019072200001</OrderNo>
    <Amt>0.01</Amt>
    <receipt_amount>0.01</receipt_amount>
    <PayTime>2019-07-22 21:37:31</PayTime>
    <PayStatus>1</PayStatus>
    <Attach>
      <payAccount>oTNu_0f5H1ZcSsl2OaIY0nVHfUuo</payAccount>
      <str3>130635149075250231</str3>
    </Attach>
    </Data>
    &sign=JxUbXFPS4Kp3bS9ipmznDoAwBd3TzLX4Df8xd5VFR97Z1Kyb5XiJNxZ4LXA1RIlOafm+BmmnPXZXDfykss3geg==
  • 注意: P2005功能中请求参数是用<Data></Data>包围,不是<xml></xml>

3.3 交易退款接口

  • 功能码:P2008
  • 接口说明:当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家(原路返回)。注意的地方:微信超过1年的订单无法提交退款,支付宝超过3个月的订单无法提交退款,可以一笔订单多次退款,但是累计金额不能超过原支付金额
  • 请求参数:<Data>
参数 名称 类型 长度 是否必填 说明 示例
RequestNo 退款订单号 String 32 商户内部唯一退款单号 TK20190722001
PayType 退款渠道 String 2 2=支付宝;3=微信 2
Amt 退款金额 Price 16.2 退款金额不得超过原支付金额 0.01
TradeNo 原支付业务单号 String 32 商户原支付订单号 WX2019072200001
pay_trade_no 原支付渠道交易单号 String 32 三个原单号任一不为空 微信或支付宝端交易单号 42XXXXX
order_no 原聚合支付平台单号 String 32 三个原单号任一不为空 原聚合支付平台单号.既微信支付宝客户端显示的商户订单号 4XXXXX
merchant_no 商户号 String 32 平台商户号 809900000001
sub_merchant 分店号 String 32 商户内部区分单号 001
  • 响应参数:
参数 名称 类型 长度 是否必输 说明 示例
RequestNo 退款订单号 String 32 申请退款订单号 TK20190722001
Amt 退款金额 Price 16.2 申请退款金额 0.01
  • JAVA请求示例:
    String data =
          "<Data>" +
          "<RequestNo>TK123127893456798765491</RequestNo>" +
          "<PayType>3</PayType>" +
          "<Amt>0.01</Amt>" +
          "<TradeNo>YMP011494322477660</TradeNo>" +
          "<merchant_no>809900000001</merchant_no>" +
          "</Data>";
          List<NameValuePair> list = new ArrayList<NameValuePair>();
          NameValuePair valu1 = new BasicNameValuePair("data",data);
          NameValuePair valu2 = new BasicNameValuePair("developerId",[your developerId]);
          NameValuePair valu3 = new BasicNameValuePair("funcId","P2008");
          String privateKey =[your privateKey];
          String signData = "data="+data+"&developerId=[your developerId]&funcId=P2008";
          String sign = SecurityUtil.signRSA(signData,privateKey,"utf-8");
          NameValuePair valu4 = new BasicNameValuePair("sign",sign);
          list.add(valu1);
          list.add(valu2);
          list.add(valu3);
          list.add(valu4);
          String xml = null;
          try {
              CloseableHttpResponse response = HttpClients.custom().build().execute(RequestBuilder.post().setUri("http://offlinetest.bsoftpay.com/gatewayOffline/pay/offline/execute").setEntity(new UrlEncodedFormEntity(list, Consts.UTF_8)).build());
              xml = EntityUtils.toString(response.getEntity());
          } catch (Exception e) {
              e.printStackTrace();
          }
          System.out.println(xml);
  • 返回示例:
    developerId=12345&funcId=P2008&retCode=0000&retMsg= &data=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Data>
    <RequestNo>TK123127893456798765491</RequestNo>
    <Amt>0.01</Amt>
    </Data>
    &sign=XUvpouNiWkQF7bQsS2GTz+x7InmbxNz0reUhi1qqIIVg6AvLv5BKOqRzGpEm/N214pBPmiZpsygsOMKvYgLFqg==
  • 注意: P2008功能中请求参数是用<Data></Data>包围,不是<xml></xml>

3.4 交易退款结果查询接口

  • 功能码:P2009
  • 接口说明:提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用微信零钱或者支付宝余额宝、花呗等支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态(20分钟、3 个工作日都是大概时间,不一定为准,有可能提前,有可能延迟)
  • 请求参数:<Data>
参数 名称 类型 长度 是否必填 说明 示例
RequestNo 退款订单号 String 32 商户内部唯一退款单号 TK20190722001
PayType 退款渠道 String 2 2=支付宝;3=微信 2
  • 响应参数:
参数 名称 类型 长度 是否必输 说明 示例
RequestNo 退款订单号 String 32 申请退款订单号 TK20190722001
Amt 退款金额 Price 16.2 当code为1时这里会显示退款金额 0.01
Code 退款状态 String 2 -1交易不存在 1 成功 2 失败 1
Msg 错误信息描述 String 100 当code为2时这里会显示错误信息 0.01
  • 返回示例:
    developerId=12345&funcId=P2009&retCode=0000&retMsg= &data=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Data>
    <RequestNo>TK20190722001</RequestNo>
    <Amt>0.01</Amt>
    <Code>1</Code>
    <Msg>OK</Msg>
    </Data>
    &sign=pkXTgvceROvF0JPq7Bmwxv654YoAImkSNblr/xTE75h6ZS1hUSSl5OAjEXptiJ0EW5vT9AvmFWGeW6uQGE6aKg==
  • 注意: P2009功能中请求参数是用<Data></Data>包围,不是<xml></xml>

3.5 关闭订单

  • 功能码:P7002

  • 接口说明:需要重新发起支付时,关闭该订单(刷卡付场景,扫码付无需关闭订单)

  • 场景描述:当接入应用系统调用支付指令接口(P7001)后,遇到网络等原因,超时未获取到结果的情况下,可以调用本接口进行关闭(撤销)此次支付订单(用于非正常支付场景
    特别注意:如果是刷卡付(B扫C)的应用场景,若付款人已支付,渠道商会进行退款,聚合支付平台不会有退款记录

    • 情况一实际未支付,订单关闭(撤销), 接入的应用系统一定要作废本地业务单据
    • 情况二实际已支付,若是刷卡付(B扫C)的应用场景,关闭(撤销)订单时,会原路退回支付款,接入的应用系统一定要作废本地业务单据。若是扫码付(C扫B)的应用场景,则系统会提示该笔“已支付不允许关闭”,遇到该情况,接入应用可以继续获取支付结果来同步本地业务单据状态或者重新发起业务付款流程,原业务单据走异常退款方式(接入应用研发异常退款功能直接调用P2008)
  • 请求参数:<xml>

参数 名称 类型 长度 是否必填 说明 示例
order_no 业务单号 String 32 商户内部唯一订单号 ZF20190722001
merchant_no 收款商户号 String 32 平台商户号 809900000001
  • 响应参数:
参数 名称 类型 长度 是否必输 说明 示例
ReturnCode 返回状态码 String 16 SUCCESS=关闭成功;FAIL=关闭失败 SUCCESS
ReturnMsg 返回消息 String 128
  • 请求示例:
    String data = "<xml>" +
                  "<order_no>ZF20190722001</order_no>" +
                  "<merchant_no>809900000001</merchant_no>" +
                  "</xml>";
          List<NameValuePair> list = new ArrayList<NameValuePair>();
          NameValuePair valu1 = new BasicNameValuePair("data",data);
          NameValuePair valu2 = new BasicNameValuePair("developerId",[your developerId]);
          NameValuePair valu3 = new BasicNameValuePair("funcId","P7002");
          String privateKey = [your privateKey];
          String signData = "data="+data+"&developerId=[your developerId]&funcId=P7002";
          String sign = SecurityUtil.signRSA(signData,privateKey,"utf-8");
          NameValuePair valu4 = new BasicNameValuePair("sign",sign);
          list.add(valu1);
          list.add(valu2);
          list.add(valu3);
          list.add(valu4);
          String xml = null;
          try {
              CloseableHttpResponse response = HttpClients.custom().build().execute(RequestBuilder.post().setUri("http://offlinetest.bsoftpay.com/gatewayOffline/pay/offline/execute").setEntity(new UrlEncodedFormEntity(list, Consts.UTF_8)).build());
              xml = EntityUtils.toString(response.getEntity());
          } catch (Exception e) {
              e.printStackTrace();
          }
          System.out.println(xml);
  • 返回示例:
    developerId=12345&funcId=P7002&retCode=0000&retMsg= &data=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xml>
    <ReturnCode>SUCCESS</ReturnCode>
    <ReturnMsg>OK</ReturnMsg>
    </xml>
    &sign=WkYUWPi+bnecNPTrhKnmvVWrnnCGvgxEkqwwrdMmu6LWMwUm6iFOhMlsRdvibFGr9SBqWY4pIew5e732xmXZOw==

    3.6 对账文件下载

  • 功能码:P7003
  • 接口说明:下载对账文件(每日对账文件会第二天12:10左右生成)
  • 请求参数:<xml>
参数 名称 类型 长度 是否必填 说明 示例
MerchantNo 收款商户号 String 32 商户内部唯一订单号 809900000001
BalanceDate 对账日期 String 10 日期格式:yyyymmdd 20190722
SubMerchant 门店号 String 32 平台商户号 001
  • 响应参数:
名称 类型 长度 是否必输 说明 示例
商户号 String 32 平台商户号 809900000001
门店号 String 32 商户内部区分号 001
订单号 String 16 是 平台外交易时没有 业务订单号 ZF20190722001
支付渠道 String 1 2=支付宝;3=微信 5-云闪付 2
交易类型 String 1 1=app支付;2=退款;3=扫码付;4=刷卡付;5=公众号支付;6=H5支付;7=刷脸付;8-医保支付 -1=未知支付(造成原因:支付平台掉单,无法确定支付类型,出现这种情况请尽快联系支付平台,查明原因) 1
交易时间 String 16 时间格式:yyyyMMddhhmmss 20190722122134
交易金额 Price 16.2 实际交易金额 医保支付做为总金额 0.01
医保金额 Price 16.2 医保支付金额 医保支付返回 0.01
自费金额 Price 16.2 自费金额 医保支付返回 0.01
  • 请求示例:
    <xml>
      <MerchantNo>809900000001</MerchantNo>
      <BalanceDate>20190722</BalanceDate>
    </xml>
  • 返回文件格式:txt (以TAB键作为分隔符)
      商户号    门店号    订单号    支付渠道    交易类型    交易时间    交易金额
      1243    001    334567    2    1    20170111091233    10.00
      1244    001    334568    3    2    20170111091244    100.00

    3.7 交易结果查询接口(含退款信息)

  • 功能码:P2005_1
  • 接口说明:通过该接口获取某个订单的支付结果和退款结果
  • 请求参数:<Data>
参数 名称 类型 长度 是否必填 说明 示例
order_no 支付业务单号 String 32 商户内部支付业务单号 WX2019072200001
merchant_no 收款商户号 String 32 商户号 809900000001
  • 响应参数:
参数 名称 类型 长度 是否必输 说明 示例
TradeNo 平台流水号 String 32 聚合支付平台流水号 34411000
PayTradeNo 渠道流水号 String 32 各个支付渠道返回的流水号 4200000376201907220000000000
OrderNo 业务单号 String 32 商户内部业务单号 WX2019072200001
Amt 实际支付金额 Price 16.2 用户实际付款金额 0.01
PayTime 实际支付时间 String 16 yyyy-MM-dd hh:mm:ss 2019-07-22 21:37:31
PayStatus 支付状态 String 6 0=未支付;1=支付成功;2=支付失败;-1=关闭或撤销 1
receipt_amount 商户收到的金额 Price 16.2 相当于订单支付金额 0.01
RefundTotalAmt 退款总金额 Price 16.2 总退款金额 0.01
RefundList 退款列表 退款列表,可能包含多个退款记录:<Refund></Refund>
  • 退款列表参数:<Refund></Refund>
参数 名称 类型 长度 是否必输 说明 示例
RefundNo 商户退款单号 String 32 his退款唯一流水号 34411000
RefundAmt 退款金额 Price 16.2 退款金额 0.01
RefundStatus 退款状态 String 6 1=申请成功 ,2=已到账,-1=退款失败 2
  • 返回示例:
    developerId=31331&funcId=P2005_1&retCode=0000&retMsg= &data=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Data>
      <TradeNo>39568862</TradeNo>
      <PayTradeNo>4200000346201908304141456066</PayTradeNo>
      <OrderNo>paymentProd201908300859539000</OrderNo>
      <Amt>0.01</Amt>
      <receipt_amount>0.01</receipt_amount>
      <PayTime>2019-08-30 09:00:01</PayTime>
      <PayStatus>1</PayStatus>
      <RefundTotalAmt>0.01</RefundTotalAmt>
      <RefundList>
          <Refund>
              <RefundNo>refundTest201908300901351000</RefundNo>
              <RefundAmt>0.01</RefundAmt>
              <RefundStatus>2</RefundStatus>
          </Refund>
      </RefundList>
    </Data>
    &sign=Seko5j5kYUs1Vpmpon03IgX7GqiNYWvOkhcUq7alPneOGWSjNPuY3QeXMzUSTBiMC1WQGVwlK+TBPzQeDvvUnQ==

    3.8 支付宝微信人脸初始化

  • 功能码:P5001
  • 接口说明:通过该接口初始化人脸初始化参数
  • 请求参数:<xml>
参数 名称 类型 长度 是否必填 说明 示例
paytype 支付渠道 String 2-支付宝 3-微信
deviceId 微信设备Id String 微信支付必填 微信人脸支付设备序列号
meta_info 透传体 String 获取刷脸所需的设备信息返回的metainfo
微信SDK返回的rawData
amt 订单金额 String 32 订单金额,值为double类型 0.01
merchant_no 收款商户号 String 32 商户号
transType 交易类型 String 32 7-刷脸支付
  • 响应参数:
参数 名称 类型 长度 是否必输 说明 示例
return_code 返回状态码 String 16 SUCCESS/OK代表成功 FAIL=代表失败 SUCCESS
return_msg 返回信息 String 128 返回信息 OK
zim_id 刷脸调用的标识,将作为下一步zolozVerify接口的入參 String 刷脸调用的标识
zim_init_client_data 支付宝 :刷脸的下发协议数据,将作为下一步zolozVerify接口的入參
微信: authInfo 信息 SDK调用凭证。用于调用SDK的人脸识别接口。为便于xml文件解析,authInfo进行了URLEncode,取出时可能需要进行相应的URLDecode操作
String 刷脸的下发协议数据
  • 返回示例:
    developerId=31331&funcId=P5001&retCode=0000&retMsg= &data=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xml>
     <return_code>SUCCESS</return_code>
     <return_msg>OK</return_msg>
     <zim_id></zim_id>
     <zim_init_client_data></zim_init_client_data>
    </xml>
    &sign=Seko5j5kYUs1Vpmpon03IgX7GqiNYWvOkhcUq7alPneOGWSjNPuY3QeXMzUSTBiMC1WQGVwlK+TBPzQeDvvUnQ==

    3.9 支付宝人脸核身获取用户详细信息

  • 功能码:P5002
  • 接口说明:通过该接口获取用户详细信息
  • 请求参数:<xml>
参数 名称 类型 长度 是否必填 说明 示例
auth_code 授权码 String 32 授权码 ca34ea491e7146cc87d25fca24c4cD11
merchant_no 收款商户号 String 32 商户号
  • 响应参数:
参数 名称 类型 长度 是否必输 说明 示例
return_code 返回状态码 String 16 SUCCESS/OK代表成功 FAIL=代表失败 SUCCESS
return_msg 返回信息 String 128 返回信息 OK
user_id 支付宝用户的userId String 2088102104794936
avatar 用户头像地址 String http://tfsimg.alipay.com/images/partner/T1uIxXXbpXXXXXXXX
province 省份名称 String 安徽省
city 市名称。 String 安庆
nick_name 用户昵称 String 用户昵称 支付宝小二
is_student_certified 是否是学生 String 是否是学生 T
user_type 用户类型 String 用户类型(1/2) 1代表公司账户2代表个人账户 1
user_status 用户状态 String 用户状态(Q/T/B/W)。Q代表快速注册用户 T代表已认证用户 B代表被冻结账户 W代表已注册,未激活的账户 T
is_certified 是否通过实名认证。 String T是通过 F是没有实名认证 F
gender 性别 String 【注意】只有is_certified为T的时候才有意义,否则不保证准确性. 性别(F:女性;M:男性)。 F
  • 返回示例:
    developerId=31331&funcId=P5002&retCode=0000&retMsg= &data=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xml>
     <return_code>SUCCESS</return_code>
     <return_msg>OK</return_msg>
     <user_id></user_id>
     <avatar></avatar>
     <province></province>
     <city></city>
     <nick_name></nick_name>
     <is_student_certified></is_student_certified>
     <user_type></user_type>
     <user_status></user_status>
     <is_certified></is_certified>
     <gender></gender>
    </xml>
    &sign=Seko5j5kYUs1Vpmpon03IgX7GqiNYWvOkhcUq7alPneOGWSjNPuY3QeXMzUSTBiMC1WQGVwlK+TBPzQeDvvUnQ==

4. 系统交互

  • 系统交互图:
    系统交互
    说明:第三方系统在正常发起支付(P7001)或者退款(P2008)请求之后,可在一定时间范围之内,定时向聚合支付平台主动查询支付或退款结果,直到查询到成功或失败的结果。支付宝和微信处理支付回调的时间一天中不同时间段耗时会有所不同,平台状态完全以第三方支付的状态为准。

  • 支付宝自助机刷脸支付交互图:

-支付宝自助机刷脸核身交互图:

5. 修订记录

日期 修订内容 修订人
2019-08-20 支付宝支付新增刷脸付的支付方式,下单时trade_type=7 甘世敏
2019-08-21 签约了医保支付的商户,下载账单会包含有医保相关字段 甘世敏
2019-09-06 增加P2005_1支付结果查询接口(含退款数据) 甘世敏
文档更新时间: 2024-04-16 13:38   作者:甘世敏