开发者社区> 问答> 正文

#支付宝 当面付如何实现分账?

当面付如何实现分账?

展开
收起
保持可爱mmm 2020-05-05 23:20:05 1439 0
1 条回答
写回答
取消 提交回答
  • 一、业务场景

    想实现每笔当面付收款的订单的资金,实时划转到一个或多个分账收入方的支付宝账户。(只有通过当面付接口支付收款的订单才能分账,固定收钱码收款订单不支持分账)。

    二、如何实现 1、集成当面付

    (1)如果之前对接过支付宝产品,那么可以直接使用之前对接支付宝接口的APPID,在APPID下添加当面付功能包并签约。签约成功后该APPID就有调用当面付接口的权限,再进行代码集成,接入流程可参考【当面付接入流程】

    (2)如果之前没有对接过支付宝产品,则需要先入驻支付宝开放平台,步骤可参考【如何入驻开放平台】,如何获取APPID可参考【创建应用】,在APPID下添加当面付功能包,【签约】成功后进行接口对接,接入流程可参考【当面付接入流程】。

    2、集成商家分账

    商家分账接入流程可参考【如何接入】

    三、接口调用 1、支付流程

    1、用户在线下商店进行付款;

    (1)扫码枪扫用户付款码支付,则扫码枪获取到付款码,商家服务端调用【alipay.trade.pay】条码支付接口进行支付;

    (2)商家服务端调用【alipay.trade.precreate】生成付款二维码,展示给用户,用户扫商家收银机展示的付款码进行支付。

    2、获取到支付成功的支付宝交易号(trade_no),可以调用【alipay.trade.query】查询接口获取;

    3、调用【alipay.trade.order.settle】分账接口传入需要分账的支付宝订单号(trade_no)和分账收入方账号(trans_in)、分账金额(amount),进行分账。

    注意:如果第一次分账,或者是新的分账收款方账号,需要先调用【alipay.trade.royalty.relation.bind】分账关系绑定接口绑定分账关系后才可分账。

    2、退款流程

    分账成功后,如果用户退款,商家服务端调用【alipay.trade.refund】退款接口,此时退款是按照分账比例退款的,当面付交易不支持自定义退款金额和退款方.

    四、代码示例 1、支付

    【alipay.trade.app.pay】APP支付接口

    AlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY, APP_ID, PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); AlipayTradePayRequest request = new AlipayTradePayRequest(); //request.putOtherTextParam("app_auth_token","商家授权的app_auth_token"); //第三方应用APPID调用接口时传入 request.setBizContent("{" + ""out_trade_no":"20150320010101001"," + //商家订单号 ""scene":"bar_code"," + //支付场景 ""auth_code":"28763443825664394"," + //付款码值 ""subject":"测试订单"," + //订单标题
    ""total_amount":"0.1"" + //金额 "}"); AlipayTradePayResponse response = alipayClient.execute(request); //输出响应结果 System.out.println(response.getBody());

    2、分账

    【alipay.trade.order.settle】分账接口

    (注意:如果第一次分账,或者是新的分账收款方账号,需要先调用【alipay.trade.royalty.relation.bind】分账关系绑定接口绑定分账关系后才可分账。)

    AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGNTYPE); //获得初始化的AlipayClient AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); request.setBizContent("{" + ""out_request_no":"26665934326"," + //请求号,每次请求不重复 ""trade_no":"2020010222001446280540872500"," + //支付成功的支付宝交易号 ""royalty_parameters":[{"+ //分账明细 ""royalty_type":"transfer"," + //分账类型 ""trans_out":"2088********"," + //支出方账户(填商家) ""trans_out_type":"userId"," + //支出方账户类型。userId表示是支付宝账号对应的支付宝唯一用户号;loginName表示是支付宝登录号; ""trans_in_type":"userId"," + //收入方账户类型 ""trans_in":"2088********"," + //收入方账户(填分账收入方) ""amount":0.01," + //分账金额 ""desc":"分账给测试账号"" + //分账描述
    "}]" + "}"); AlipayTradeOrderSettleResponse response = alipayClient.execute(request); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); } System.out.println(response.getBody()); }

    3、退分账

    【alipay.trade.refund】交易退款接口

    注意:当面付退分账是按照分账比例退款的,所以不需要传入退分账参数refund_royalty_parameters。

    AlipayClient alipayClient = new DefaultAlipayClient(Config.gatewayUrl, Config.app_id, Config.merchant_private_key, "json", Config.charset, Config.alipay_public_key, Config.sign_type); //锟斤拷贸锟绞硷拷锟斤拷锟紸lipayClient AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); request.setBizContent("{" + //""out_trade_no":"20150320010101001"," + //商家订单号 ""trade_no":"2020010222001446280540872500"," + //支付宝交易号 ""refund_amount":0.1" + //退款金额 "}"); AlipayTradeRefundResponse response = alipayClient.execute(request); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); } System.out.print(response.getBody()); }

    2020-05-06 09:24:44
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
58到家支付系统架构与实践 立即下载
直达客户 贴身服务——通信在快递场景中的应用 立即下载
余额宝超大规模基金文件处理——分布式调度组件:余额宝大白组件 立即下载