支付宝资金授权

转官方产品介绍

产品介绍

资金授权是支付宝小程序针对商家在需要用户提前出资担保的消费场景下(如租车、充电桩、酒店预订等),推出的功能。用户在开启服务时需要做一笔资金授权,当服务完结算时,再从授权资金中扣除消费金额,剩余返还给用户。

支付宝资金授权支持余额,余额宝,信用卡,借记卡,花呗以及芝麻信用等渠道,其中:

  • 余额,余额宝做资金冻结;
  • 信用卡,借记卡扣款至支付宝内部账户做资金锁定;
  • 花呗锁定额度(推荐),不产生账期,用户不需要马上还款;
  • 芝麻信用以用户信用为担保并授权。

 

文档地址

https://opendocs.alipay.com/mini/00arki

在做授权转支付的时候,一致遇到“参数错误”的bug,参数完全按文档接入的,只能连续阿里技术小哥,给了一个正确的文档的地址,授权转支付参照这里

https://docs.open.alipay.com/20180417160701241302/qca164/

区别:里面的案例是java版本的。详细见 :坑4

 

遇到的坑

1.线上资金授权冻结 https://docs.open.alipay.com/api_28/alipay.fund.auth.order.app.freeze/

参数 enable_pay_channels, 按文档配置了三个支付方式,余额,花呗,信用,结果不能使用信用卡,这个地方不能传,屏蔽掉,就能使用信用卡冻结了

 

2.资金授权解冻 https://docs.open.alipay.com/api_28/alipay.fund.auth.order.unfreeze/

例子:如我冻结总额0.02

全额解冻:amout =0.02  解冻全额,这里是没有问题的

部分解冻:第一次amount 传0.01 ,没有问题;

第二次再传0.01,依然提示success,但是没有真正退款

第二次传0.02,报错 UNIQUE_VIOLATION, 解冻信息被篡改,下面的文档说解决办法需要重传请求流水号,修改 out_request_no, 补位0,’out_request_no’ => $out_request_no.’0′,   成功,全额解冻了

猜想,如果多次解冻,请求流水号每次要修改才行

 

3.授权订单 弹出支付宝支付页面,点取消,原订单怎么处理

开始以为拿之前生成好的order_code (商户订单号,out_order_no)及 order_code_req(商户流水号,支付宝 our_request_no),再次请求支付吧冻结接口(freeze),获取到orderStr,前端使用提示“系统繁忙,稍后重试”

解决:判断订单号的长度,在order_code 默认补0,下次+1,order_code_req同理在末尾补数,更新到数据库,再次请求支付宝freeze接口,相当于换个订单号去发请求

疑问:支付宝小程序授权订单取消支付,会不会留存,还是有其他接口继续支付,类似普通订单有个30分钟等待~

疑问:没有找到支付宝订单明细功能,之前看到过

 

4.授权订单 转支付,提示“参数异常”

https://docs.open.alipay.com/20180417160701241302/qca164/

案例是java写的,所以对着 统一收单接口去写的代码 https://docs.open.alipay.com/api_1/alipay.trade.pay

然后就一直提示“参数错误”,但是又不清楚哪个参数异常,联系了阿里云技术小哥,查找半天,发小文档有参数说明错了,授权订单 应该发 auth_no,而不是auth_code(统一收单接口写的这个,误导我了)

另外:订单有个唯一订单号 order_code, 阿里那边是 out_trade_no,  如果直接发数据库的order_code, 第一次会提示参数错误,接口会自动 +1 发第二次,要处理这个问题就是改变订单号,官方技术了就算报错了,这个order_code 也是要改变再次请求。