文档中心 > 智慧景区整体技术解决方案

名词解释

名词 解释和使用场景
预授权冻结 用户授权商家冻结其支付宝内指定支付渠道的一定数量资金
信用预授权 当用户芝麻分达标的情况下无需冻结用户账户资金,可以通过芝麻免押。
预授权解冻 商家将用户冻结金额解冻为可用渠道资金
解冻转支付 商户创建交易订单,将用户预授权冻结的金额用于交易
条码预授权 商户使用扫码枪扫描用户付款码,冻结用户资金
扫码预授权 用户使用支付宝APP扫商户二维码主动授权冻结资金

预授权简介

用户在酒店、景区等场景消费时,用户需提前缴纳一定的押金,消费结束结算时,再根据实际消费情况从押金中扣除消费金额,剩余未消费部分返还给用户。支付宝根据此类场景,推出当面资金授权+信用产品。用户在消费时,支付宝先判断用户芝麻信用,信用好的用户可免押金消费,信用暂未达标的用户针对可用资金渠道做资金授权(冻结);结算时支付宝从免押金用户的可用资金渠道扣除费用(最大可扣除金额不超过商户发起的授权金额),从资金授权(冻结)用户的冻结资金中扣除费用;剩余冻结或授权资金解除返还给用户。

预授权场景介绍

预授权包含预授权冻结、解冻转支付两个阶段,只有转支付后,用户的资金才会发生扣款并进入商户收款账户。第一阶段为冻结用户一部分资金,第二阶段为将冻结资金用于交易结算,且商户需将剩余冻结资金解冻并返还用户。需要注意的是,目前预授权不支持追加冻结,即不支持先冻结500元再追加冻结200元(如果有这类场景,可以先解冻500元,再使用新订单冻结700元),且冻结金额需要大于等于结算支付金额。

条码预授权场景

  1. 收银员在收银系统生成订单,与顾客确认授权金额,提示顾客出示支付宝付款码。
  2. 顾客打开支付宝APP,点击首页“付钱”按钮,展示付款码界面供收银员扫描。
  3. 收银员使用扫码枪扫描顾客付款码,随后系统向支付宝发起预授权冻结申请。
  4. 信用好的用户可免押金消费,信用暂未达标的用户针对可用资金渠道做资金授权冻结,收银系统记录顾客预授权信息,如支付宝预授权交易号、授权类型、
    顾客uid。
  5. 商家为顾客实际结算时,根据实际消费情况直接发起扣款,用户无需提供任何信息,扣款成功后剩余冻结资金自动解冻,顾客支付宝APP会收到消费通知。

资金授权(冻结)流程示例

信用授权流程示例(用户首次)

信用授权流程示例(用户非首次)

 

扫码预授权场景(目前暂不支持信用免押)

条码预授权场景中,预授权解冻转支付流程与扫码模式一致,区别点就在于第一阶段的预授权冻结流程,由用户主动扫码确认预授权金额并输入密码完成冻结交易,商家接收预授权完成的结果。具体流程如下:

  1. 商户与顾客确认预授权金额,通过收银系统调用支付宝预授权发码接口,创建预授权订单二维码,并展示给顾客。
  2. 顾客使用支付宝钱包,通过“扫一扫”功能扫描二维码,打开预授权确认界面,确认预授权支付渠道,输入密码完成预授权操作。
  3. 顾客授权成功后,商家收银系统将接收到顾客授权成功的通知,收银系统保存支付宝授权码和顾客uid用于后续转支付。
  4. 商家为顾客实际结算时,根据实际消费情况直接从预授权冻结资金发起扣款,用户无需提供任何信息,扣款成功后顾客支付宝APP会收到消费通知。
  5. 预授权冻结转支付成功后,剩余授权金额商户需要及时解冻归还顾客。

接入准备工作

ISV准备:

1)ISV签约:联系对应BD签约“当面资金授权基础协作费方案”;

2)添加功能:ISV需要在应用中心“查看”应用的“功能选项”中添加“新当面资金授权”功能,勾选后保存。

商户签约:

有3种签约方式:

  • 业务经理(BD)签约销售方案名:“当面资金授权V2”,且选择信用授权:是。
  • 邀约链接签约(推荐):ISV发邀约链接给下家商户自主签约(ISV需要已挂包“新当面资金授权”)。
  • ISV代签约(推荐):ISV帮助下家商户签约(ISV需要已挂包“新当面资金授权”)。

签约升级注意事项:部分老商户之前签约的老版本销售方案,包含“当面资金授权“+”资金授权即时到账”两部分,如果需要改签为“当面资金授权V2”方案,在改签之前请isv务必核对最新版接口文档做好接口改造。否则会导致方案改签接口无法正常调用报错的情况。

组件说明&下载

使用信用预授权组件开发,可大大降低开发者开发工作量,详见组件说明文档

预授权技术接入流程

0、服务商入驻流程

ISV首先必须入驻开放平台,服务商入驻请参考:服务商入驻指南 。

1、预授权冻结阶段

预授权冻结分为扫用户条码和用户扫描商家二维码完成授权两种模式,目的均为冻结用户资金,完成预授权冻结交易,记录授权码和用户uid等信息,为第二阶段解冻转支付准备。

1.1、条码授权模式

首先调用资金授权冻结接口(alipay.fund.auth.order.freeze)进行用户资金冻结,支付宝同步返回冻结成功或失败。如资金冻结成功(状态字段status为SUCCESS),支付宝会返回支付宝资金授权订单号(auth_no)、授权用户id(payer_logon_id)、授权类型(pre_auth_type:信用预授权订单返回值为CREDIT_AUTH)等信息,系统开发方必须记录好该信息以备第二阶段解冻转支付使用。对于授权金额单笔不超过2000元,且芝麻信用达标的用户可以免冻结账户资金;授权金额单笔大于2000元、单日大于5w或风控系统需要验证用户身份的情况下,支付宝APP会唤起收银台让用户输入密码确认授权冻结,此时支付宝返回码code为10003,表示用户授权中,可调用资金授权操作查询接口(alipay.fund.auth.operation.detail.query)每隔5秒钟查询一次授权冻结的状态,如依然是用户授权中,则再等待5秒钟继续使用查询接口查询,直至1分钟后超时(推荐每隔5秒查询一次,共进行12次查询,具体根据商户业务情况决定),如超时前最后一次查询依然返回用户授权中,则马上调用资金授权撤销接口(alipay.fund.auth.operation.cancel)将该笔预授权冻结交易撤销。如接口返回系统异常,也类似当面付处理流程,首先通过查询接口查询授权冻结的状态,并根据查询结果进行后续操作。

1.1.1、条码预授权免密模式交互流程

1.1.2、条码预授权验密交互流程

1.1.3、条码预授权冻结成功通知

通知以表单方式,通过POST方法,提交到发码接口的notify_url字段指定的通知地址,通知请求样例如下,通知特性参考当面付“异步通知特性”。

operation_id=20180124172581536702&auth_no=2018012410002001670257018719&sign_type=RSA&payee_user_id=2088501624737791&out_order_no=orderFreeze0000010&auth_app_id=2015081000208233¬ify_type=fund_auth_freeze&payer_user_id=2088102852641672&version=1.0&amount=0.02&rest_amount=0.02¬ify_time=2018-01-24 16:57:56&status=SUCCESS&charset=UTF-8&operation_type=FREEZE&sign=$$$&total_unfreeze_amount=0.00&payee_logon_id=ali***@alipay.com&gmt_create=2018-01-24 16:57:29&total_freeze_amount=0.02&payer_logon_id=sha***@aliyun.com&out_request_no=requestNo0000010&app_id=2015081000208233&total_pay_amount=0.00¬ify_id=a5f49b5851c5b2ae562a58eb6144b0el66&pre_auth_type=CREDIT_AUTH&gmt_trans=2018-01-24 16:57:56

1.2、扫码授权模式

首先调用资金授权发码接口(alipay.fund.auth.order.voucher.create)生成预授权订单二维码,然后由用户使用支付宝APP扫描二维码输入密码确认授权冻结。用户授权成功后,支付宝会发送授权成功通知给到商户或isv,通知以表单形式,通知地址由发码接口的notify_url字段传入。isv或商户接收通知,并根据订单号和预授权状态进行相应处理,必须记录支付宝资金授权订单号(auth_no)和授权用户id(payer_logon_id)等信息,为第二阶段转支付做准备。

1.2.1、扫码预授权冻结成功通知

通知以表单方式,通过POST方法,提交到发码接口的notify_url字段指定的通知地址,通知请求样例如下,通知特性参考当面付“异步通知特性”。

operation_id=20170922345015779802&auth_no=2017092210002001980263817241&sign_type=RSA&payee_user_id=2088911212416201&out_order_no=orderFreeze0000014&auth_app_id=2015051100069170&notify_type=fund_auth_freeze&payer_user_id=2088002470788888&version=1.0&amount=0.01&rest_amount=0.01&notify_time=2017-09-22 21:16:21&status=SUCCESS&charset=utf-8&operation_type=FREEZE&total_unfreeze_amount=0.00&sign=***&payee_logon_id=zfb***@test.com&gmt_create=2017-09-22 21:15:39&total_freeze_amount=0.01&payer_logon_id=cli***@test.com&out_request_no=requestNo0000014&app_id=2015051100069170&total_pay_amount=0.00&notify_id=632f1457e6b251d74041567d9fa43acnka&gmt_trans=2017-09-22 21:15:39

2、预授权解冻转支付阶段

 预授权解冻转支付阶段使用当面付条码支付接口(alipay.trade.pay),但是需要注意产品码字段product_code需要传预授权产品码PRE_AUTH,表示进行预授权交易;通过支付宝预授权号(auth_no)选择冻结转支付的交易;同时必须上传付款方(buyer_id,填写预授权冻结阶段支付宝返回的payer_logon_id)和收款方(seller_id,与授权冻结阶段的payee_user_id相同)字段;还建议传入预授权确认模式参数可省去解冻接口调用(auth_confirm_mode,COMPLETE:转交易支付完成结束预授权,解冻剩余金额;NOT_COMPLETE:转交易支付完成不结束预授权,不解冻剩余金额);由于是预授权转支付交易已经传入了auth_no所以无需传入auth_code。

由于预授权冻结金额大于等于结算金额,当冻结金额大于结算金额时,用户剩余冻结金额需要根据业务情况及时通过解冻接口退还给用户(以防止用户拿不到剩余冻结资金导致投诉),可进行多次转支付操作,也可进行多次解冻操作,原则是转支付总金额小于等于冻结总金额,解冻总金额小于等于冻结总金额。同一订单的多次解冻操作通过请求流水号out_request_no来标识,部分解冻情况下out_request_no必传。

注意:对于普通预授权订单转支付返回处理中,商户需通过交易查询服务确认支付结果,5s内未成功可业务重试(不能更换商户订单号);对于信用预授权订单转支付返回处理中场景,商户无需重试,等待异步通知结果;支付宝T+N支付重试,T+N重试未成功通过保险垫资推进交易资金流。预授权转支付时,商户需传入notify_url,否则接收不到支付宝支付成功异步通知。

3、预授权解冻能力和交易管理能力

预授权阶段包含冻结、发码、查询、撤销、解冻共五个接口,如顾客冻结金额有误或希望追加冻结金额,可使用资金授权解冻接口(alipay.fund.auth.order.unfreeze)将原冻结资金解冻(调用资金解冻时,使用auth_no确认需要解冻的预授权订单,支持多次解冻,通过out_request_no区分同一笔冻结交易的多次解冻。如全单解冻,则解冻金额填写冻结金额,out_request_no填写一个全新流水号,与冻结接口的流水号不能相同),然后操作员可使用新订单号,输入新的金额,重新发起一笔新的授权冻结请求。对于解冻转支付的交易,如业务需要退款,则可以使用退款接口(alipay.trade.refund)进行预授权交易的退款,同时也可以使用交易查询接口(alipay.trade.query)查询该笔交易的状态。

接入注意点

1、除了及时在解冻转支付后将用户剩余冻结资金及时解冻,也一定要提供独立解冻功能用于完成用户冻结资金的解冻,以免发生用户无法解冻资金,造起用户不必要的投诉。

2、预授权冻结、解冻、转支付、退款均会在支付宝app账单中产生一条记录,但由于预授权冻结、解冻并未发生用户账务变动,所以支付宝app账单中金额字段并不会出现正负号,同时,由于资金并未发生变动,所以对账单中也不会出现未转支付的预授权冻结交易流水。如需查看冻结解冻的业务明细账单,需要联系支付宝客户经理申请配置预授权业务账单。

3、撤销接口中传递的out_request_no需要和冻结接口的操作流水号相同,代表对该笔冻结流水进行撤销。解冻接口传递的out_request_no不能与冻结时候的out_request_no重复,代表一笔全新的资金操作流水。

4、退款接口如果是部分退款,out_request_no必传,全额退款情况下可不传。

5、预授权解冻只能根据支付宝资金授权订单号auth_no来操作,不能根据商户授权订单号来操作。

6、alipay.fund.auth.order.freeze(资金授权冻结接口)请求参数的 extra_param需传入如下三个扩展参数。key, value按照如下约定,整体拼接成json字符串格式,形如:{"category":"HOTEL","outStoreCode":"酒店定义的酒店编号","outStoreAlias":"酒店定义的酒店简称"}。该参数建议必传,否则将影响门店维度的数据报表统计。

outStoreCode参数取值建议:如酒店有自己门店编号规则以酒店为准,如果酒店没有编号规则建议按照如下规则(共由三段组成):

第一段:ISV名称拼音首字母大写简称(不超过4位)
第二段:HOTEL(固定值)
第三段:任意编码(建议用数字,或者字母,只要确保该ISV下唯一即可,不超过20位)
每一段之前用英文下划线(_)连接。
即:ISV名称拼音首字母大写简称(不超过4位)_HOTEL(固定值)_任意编码(建议用数字,或者字母,只要确保该ISV下唯一即可,不超过20位)


7、信用预授权支付模式返回处理中场景,商户无需重试,等待异步通知结果;支付宝T+N支付重试,T+N重试未成功通过保险垫资理推进交易资金流。对于普通预授权支付模式返回处理中,商户需通过交易查询服务确认支付结果,5s内未成功可业务重试(不能更换商户订单号)。


8、预授权转交易服务,商户需传入notify_url,否则接收不到支付宝支付成功异步通知。

9、alipay.trade.pay接口中需要传入store_id(建议与资金授权冻结接口中extra_param参数的outStoreCode取值一致)、terminal_id参数。如果需返佣接入时还需要传入"extend_params":{"sys_service_provider_id":"ISV签约账户的PID"}参数用于计算返佣。

10、支持全额解冻和部分解冻。

11、解冻转支付时,若auth_confirm_mode=complete,无需调用解冻接口,支付宝端在扣款成功后会自动解冻剩余金额;若auth_confirm_mode=no_complete,在收到支付成功通知后,商户自行调用解冻接口将余额进行解冻。

12、针对信用授权订单,扣款处理中或扣款失败(如:trade_ status=WAIT_BUYER_PAY或ORDER SUCCESS PAY INPROGRESS),商户调用解冻接口,会中断支付宝扣款流程,同时中断赔付流程,请慎用。

请求参数示例 

/**
	 * 测试预授权冻结
	 */
	@Test
	public void fundAuthOrderFreeze() throws AlipayApiException {
		AlipayFundAuthOrderFreezeRequest request = new AlipayFundAuthOrderFreezeRequest();
		AlipayFundAuthOrderFreezeModel model = new AlipayFundAuthOrderFreezeModel();
		model.setAuthCode("2839999997473519824"); // 填写用户支付宝钱包中的付款码
		model.setAuthCodeType("bar_code"); // 填写固定值bar_code
		model.setOutOrderNo("orderFreeze0000011"); // 预授权冻结交易商户订单号,商户系统唯一标识一笔预授权
		model.setOutRequestNo("requestNo0000011");
		model.setOrderTitle("酒店信用预授权冻结测试"); // 预授权标题,会在支付宝账单中显示
		model.setAmount("0.02"); // 预授权金额,注意需要大于等于结算支付金额
		model.setPayeeUserId("2088501624737791"); // 收款方的支付宝唯一用户号,以2088开头的16位纯数字组成,收款方支付宝登录号(payee_logon_id)和用户号(payee_user_id)不能同时为空。
		model.setPayTimeout("5m"); // 预授权冻结超时时间,超时则自动关闭冻结交易
		model.setProductCode("PRE_AUTH"); // 填写固定值PRE_AUTH		
		model.setExtraParam("{\"category\":\"HOTEL\",\"outStoreCode\":\"酒店定义的酒店编号\",\"outStoreAlias\":\"酒店定义的酒店简称\"}");  //该扩展参数建议必传,否则会影响用户享受免押服务
		request.setBizModel(model);
		request.setNotifyUrl("https:///notify.htm");
		AlipayFundAuthOrderFreezeResponse response = alipayClient.execute(request); //需要先创建DefaultAlipayClient类型对象alipayclient
		logger.info("response: {}"+response.getBody());
		Assert.assertTrue(response.isSuccess());
	}
/**
	 * 测试扫码预授权生成授权码
	 */
	@Test
	public  void fundAuthOrderVoucherCreate() throws AlipayApiException {
		AlipayFundAuthOrderVoucherCreateRequest request = new AlipayFundAuthOrderVoucherCreateRequest();
		AlipayFundAuthOrderVoucherCreateModel model = new AlipayFundAuthOrderVoucherCreateModel();
		model.setOutOrderNo("orderFreeze000008"); // 预授权冻结交易商户订单号,商户系统唯一标识一笔预授权
		model.setOutRequestNo("requestNo000008"); // 商户授权资金操作流水号,不能重复
		model.setOrderTitle("酒店预授权冻结测试"); // 预授权标题,会在支付宝账单中显示
		model.setAmount("0.01"); // 预授权金额,注意需要大于等于结算支付金额
		model.setPayeeUserId("2088501624737791"); // 收款方的支付宝唯一用户号,以2088开头的16位纯数字组成,收款方支付宝登录号(payee_logon_id)和用户号(payee_user_id)不能同时为空。
		model.setPayTimeout("5m"); // 预授权冻结超时时间,超时则自动关闭冻结交易
		model.setProductCode("PRE_AUTH"); // 填写固定值PRE_AUTH		
		request.setBizModel(model);
		AlipayFundAuthOrderVoucherCreateResponse response = alipayClient.execute(request);
		logger.info("response: {}"+response.getBody());
		Assert.assertTrue(response.isSuccess());
	}
/**
	 * 测试预授权解冻
	 */
	@Test
	public void fundAuthOrderUnFreeze() throws AlipayApiException {
		AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest();
		AlipayFundAuthOrderUnfreezeModel model = new AlipayFundAuthOrderUnfreezeModel();
		model.setAuthNo("2017120410002001390208978986"); // 支付宝资金授权订单号,在授权冻结成功时返回需要入库保存
		model.setOutRequestNo("UnfreezeRequestNo000003");//同一商户每次不同的资金操作请求,商户请求流水号不能重复,且与与冻结流水号不同
		model.setAmount("0.01"); // 本次操作解冻的金额,单位为:元(人民币),精确到小数点后两位
		model.setRemark("预授权解冻"); // 商户对本次解冻操作的附言描述,长度不超过100个字母或50个汉字		
		request.setBizModel(model);
		AlipayFundAuthOrderUnfreezeResponse response = alipayClient.execute(request);
		logger.info("response: {}"+response.getBody());
		Assert.assertTrue(response.isSuccess());
	}
/**
	 * 测试预授权撤销
	 */
	@Test
	public void fundAuthCancel() throws AlipayApiException {
		AlipayFundAuthOperationCancelRequest request = new AlipayFundAuthOperationCancelRequest();
		AlipayFundAuthOperationCancelModel model = new AlipayFundAuthOperationCancelModel();
		//model.setAuthNo("2017120110002001390206804295"); // 支付宝资金授权订单号,在授权冻结成功时返回参数中获得
		model.setOutOrderNo("orderFreeze000005"); //商户的授权资金订单号,与支付宝的授权资金订单号不能同时为空
		//model.setOperationId("20171201317348823902"); //支付宝的授权资金操作流水号
		model.setOutRequestNo("requestNo000005");//与支付宝的授权资金操作流水号不能同时为空,与冻结流水号相同
		model.setRemark("预授权撤销"); // 商户对本次撤销操作的附言描述,长度不超过100个字母或50个汉字		
		request.setBizModel(model);
		AlipayFundAuthOperationCancelResponse response = alipayClient.execute(request);
		logger.info("response: {}"+response.getBody());
		Assert.assertTrue(response.isSuccess());
	}
/**
	 * 测试资金授权操作查询
	 */
	@Test
	public void fundAuthQuery() throws AlipayApiException {
		AlipayFundAuthOperationDetailQueryRequest request = new AlipayFundAuthOperationDetailQueryRequest();
		AlipayFundAuthOperationDetailQueryModel model = new AlipayFundAuthOperationDetailQueryModel();
		//model.setAuthNo("2017120110002001390206804295"); // 支付宝资金授权订单号,在授权冻结成功时返回参数中获得
		model.setOutOrderNo("orderFreeze000003"); //商户的授权资金订单号,与支付宝的授权资金订单号不能同时为空
		//model.setOperationId("20171201317348823902"); //支付宝的授权资金操作流水号,冻结成功同步返回
		model.setOutRequestNo("requestNo000003");//商户的授权资金操作流水号,与支付宝的授权资金操作流水号不能同时为空	
		request.setBizModel(model);
		AlipayFundAuthOperationDetailQueryResponse response = alipayClient.execute(request);
		logger.info("response: {}"+response.getBody());
		Assert.assertTrue(response.isSuccess());
	}
/**
	 * 测试预授权解冻转支付,使用当面付接口,但使用PRE_AUTH即预授权的产品码
	 */
	@Test
	public void testTradePay() throws Exception {
	    AlipayTradePayModel model = new AlipayTradePayModel();
	    model.setOutTradeNo("tradePay00000009");      //预授权转支付商户订单号,为新的商户交易流水号
	    model.setScene("bar_code");                // 固定值bar_code
	    model.setProductCode("PRE_AUTH");          // 固定值PRE_AUTH
	    model.setAuthNo("2018012410002001670257018719");  // 填写预授权冻结交易号
	    model.setSubject("预授权转支付测试"); 		  // 解冻转支付标题,用于展示在支付宝账单中
	    model.setTotalAmount("0.01");             // 结算支付金额
	    model.setSellerId("2088501624737791");    // 填写卖家支付宝账户pid
	    model.setBuyerId("2088102852641672");     // 2088202415071394填写预授权用户uid,通过预授权冻结接口返回的payer_user_id字段获取
	    model.setBody("预授权解冻转支付测试");      	  // 可填写备注信息
	    model.setTerminalId("test_terminal_id");      // 填写商户操作员编号
	    model.setStoreId("test_store_id");   	// 填写实际交易发生的终端编号
	    model.setTimeoutExpress("5m");             // 填写解冻转支付交易的超时时间
//	   ExtendParams extendParams = new ExtendParams();
//	    extendParams.setSysServiceProviderId("此处填写ISV签约返佣协议账户的PID为2088开头的16位数字");
//	    model.setExtendParams(extendParams);  //系统商开发需要传入正确的返佣参数才能拿到返佣,无返佣协议不需要传入该参数。
	     model.setAuthConfirmMode("COMPLETE"); //自动解冻时取值COMPLETE,不传该参数默认剩余资金不会自动解冻NOT_COMPLETE。
	    AlipayTradePayRequest request = new AlipayTradePayRequest();
	    request.setBizModel(model);
	    request.setNotifyUrl("https://www.***.com/index.htm");
	    AlipayTradePayResponse response = alipayClient.execute(request);
	    logger.info("response: {}"+response.getBody());
	    Assert.assertTrue(response.isSuccess());
	}
/**
	 * 测试预授权交易退款
	 */
	@Test
	public void testTradeRefund() throws Exception {
	    AlipayTradeRefundModel model = new AlipayTradeRefundModel();
	    model.setOutTradeNo("tradePay000002"); //与预授权转支付商户订单号相同,代表对该笔交易退款
	    model.setRefundAmount("0.01");
	    model.setRefundReason("预授权退款测试");	 
	    model.setOutRequestNo("refund0000001");//标识一次退款请求,同一笔交易多次退款需要保证唯一,如部分退款则此参数必传。
	    AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
	    request.setBizModel(model);
	    AlipayTradeRefundResponse response = alipayClient.execute(request);
	    logger.info("response: {}"+response.getBody());
	    Assert.assertTrue(response.isSuccess());
	}
/**
	 * 
	 *测试预授权交易查询
	 */
	@Test
	public void testTradeQuery() throws Exception {
	    AlipayTradeQueryModel model = new AlipayTradeQueryModel();
	    model.setOutTradeNo("tradePay000002");
	    AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
	    request.setBizModel(model);
	    AlipayTradeQueryResponse response = alipayClient.execute(request);
	    logger.info("response: {}"+ response.getBody());
	    Assert.assertTrue(response.isSuccess());
	}

预授权API列表

注意:查看API接口文档之前,请一定先了解预授权整体接入流程,不要直接就看API文档,对于接口参数的使用,可以参考调用示例的传参,磨刀不误砍材工。

接口名称(中/英文名) 描述 使用场景
资金授权冻结接口
alipay.fund.auth.order.freeze
被扫(条码)授权场景下资金冻结 收银员使用扫码设备读取用户支付宝钱包“付款码”后,将二维码或条码信息和订单信息通过本接口上送至支付宝发起资金授权冻结。
资金授权发码接口
alipay.fund.auth.order.voucher.create
主扫(扫码)授权场景下资金冻结 收银员通过收银台或商户后台调用支付宝接口,生成授权冻结二维码后,展示给用户,由用户扫描二维码完成资金冻结。
资金授权撤销接口
alipay.fund.auth.operation.cancel
授权资金冻结的反交易接口 此接口为处理异常流程时提供的反交易接口,如需要正常解冻业务,请使用资金授权解冻接口。当预授权超时或者返回结果未知时,可根据资金授权操作查询接口查询,如重复查询依然显示未知结果时,才可调用该撤销接口。
资金授权解冻接口
alipay.fund.auth.order.unfreeze
提供资金解冻能力,支持部分和全额解冻 当资金授权冻结完成后的一段时间内,由于业务原因需解冻资金,商家可通过资金授权解冻接口将授权资金解冻,支付宝将在收到解冻请求并验证成功后,按解冻规则将冻结资金解冻,原路退回支付渠道
资金授权操作查询接口
alipay.fund.auth.operation.detail.query
通过该接口查询授权操作明细信息,如该订单授权总额,已转支付金额,剩余冻结金额等 任何时候均可使用授权查询接口查询当前授权冻结订单状态
交易创建并支付接口
alipay.trade.pay
创建支付宝交易订单,并使用预授权资金完成转支付交易 当商家需要对用户授权资金进行解冻支付时,商家可通过该接口将用户授权资金支付给卖家,支付宝将在收到请求后创建交易并将授权资金支付给商户收款账户
交易同步退款接口
alipay.trade.refund
用于对已完成转支付的交易订单进行退款操作,支持部分和全额退款 当预授权转支付交易发生后的一段时间内,由于业务原因需要退款,受理商户可通过退款接口将支付款退还给买家,支付宝将在收到退款请求并验证成功后,按退款规则将支付款按原路退还至支付渠道
交易订单查询接口
alipay.trade.query
查询转支付交易订单的状态,不是查询预授权冻结的状态 任何时候均可使用交易订单查询接口查询当前转支付交易的订单状态

错误码说明

结果码 说明 处理方式
10000 授权成功 记录授权结果并在客户端显示授权成功,进入后续的业务处理。
40004 授权失败 记录授权结果并在终端显示错误信息
10003 等待用户授权 发起轮询流程,即等待5秒后调用资金授权操作查询接口,通过授权时传入的商户授权订单号(out_order_no)和资金操作流水号(out_request_no)查询授权结果(返回参数status),如果仍然返回等待用户授权(INIT),则再次等待5秒后继续查询,直到返回确切的授权结果(成功SUCCESS 或 已关闭CLOSED),或是超出轮询时间(建议轮询时间为60s)。在最后一次查询仍然返回等待用户授权的情况下,必须立即调用资金授权撤销接口将这笔授权操作撤销,避免用户继续操作造成投诉。
20000 未知异常 调用查询接口确认授权结果,并根据查询结果进行处理。

 

FAQ

关于此文档暂时还没有FAQ
返回
顶部