说明:
本帖是利用支付宝沙箱测试“单笔转账到支付宝账户”,demo中会配置个人的沙箱账号信息,方便大家测试。
测试环境:Eclipse+JDK1.6及以上+Tomcat6.0及以上
1.目前仅支持账户余额渠道付款。
2.转账额度
1)单日转出累计额度为100万元。
2)转账给个人支付宝账户,单笔最高5万元;转账给企业支付宝账户,单笔最高10万元。
特殊逻辑注意点:
1)如果商户重复请求转账,支付宝会幂等返回成功结果,商户必须对重复转账的业务做好幂等处理;如果不判断,
存在潜在的风险,商户自行承担因此而产生的所有损失。
2)如果调用alipay.fund.trans.toaccount.transfer掉单时,或返回结果code=20000时,或返回结果code=40004,
sub_code= SYSTEM_ERROR时,请调用alipay.fund.trans.order.query发起查询,如果未查询到结果,
请保持原请求不变再次请求alipay.fund.trans.toaccount.transfer接口。
3)商户处理转账结果时,对于错误码的处理,只能使用sub_code作为后续处理的判断依据,
不可使用sub_msg作为后续处理的判断依据。
参数解读:
1.amount 转账金额,只支持2位小数,小数点前最大支持13位,金额必须大于等于0.1元。
2.payer_show_name付款方姓名(最长支持100个英文/50个汉字)。显示在收款方的账单详情页。如果该字段不传
则默认显示付款方的支付宝认证姓名或单位名称。
3.payee_real_name收款方真实姓名(最长支持100个英文/50个汉字),如果本参数不为空,则会校验该账户在支付宝
登记的实名是否与收款方真实姓名一致。
4.remark转账备注(支持200个英文/100个汉字)。当付款方为企业账户,且转账金额达到(大于等于)50000元,
remark不能为空。收款方可见,会展示在收款用户的收支详情中。
测试流程(声明:本demo仅做参考测试使用)
1.准备工作
a、签约:[url]https://openclub.alipay.com/read.php?tid=276&fid=72[/url]
b、创建应用:[url]https://openclub.alipay.com/read.php?tid=1606&fid=72[/url]
c、生成密钥:[url]https://openclub.alipay.com/read.php?tid=1833&fid=25[/url]
d、下载服务端sdk:[url]https://docs.open.alipay.com/54/103419/[/url]
2.在AlipayConfig文件中配置基本信息
正式环境必须添加对应功能包,否则会报isv权限不足
正式环境测试需要把支付宝网关中的“dev”去掉
正式环境支付宝网关:[url]https://openapi.alipay.com/gateway.do[/url]
3.测试接口
-
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest(); AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel(); //商户转账唯一订单号 model.setOutBizNo("2018101149542322343211"); //收款方账户类型。 //1、PayeeType=ALIPAY_USERID:PayeeAccount传值pid ,以2088开头的16位纯数字组成。 //2、PayeeType=ALIPAY_LOGONID:PayeeAccount传值支付宝登录号(邮箱或手机号) model.setPayeeType("ALIPAY_LOGONID"); //收款方账户。与payee_type配合使用。付款方和收款方不能是同一个账户。 model.setPayeeAccount("dvnvqi3054@sandbox.com"); //测试金额必须大于等于0.1,只支持2位小数,小数点前最大支持13位 model.setAmount("1.10"); //当付款方为企业账户且转账金额达到(大于等于)50000元,remark不能为空。 model.setRemark("单笔到到支付账户转账备注"); request.setBizModel(model); AlipayFundTransToaccountTransferResponse response = alipayClient.execute(request); System.out.println(response.getBody()); if(response.isSuccess()){ System.out.println("调用成功"); } else { System.out.println("调用失败"); }
返回结果:
{"alipay_fund_trans_toaccount_transfer_response":{"code":"10000","msg":"Success","order_id":"20181011110070001502580000201866","out_biz_no":"2018101149542322343211","pay_date":"2018-10-11 17:13:16"},"sign":"Iim9QVhrzysDQ=="}
pay_date(支付时间):当且仅当转账成功之后,才会返回
order_id(支付宝转账单据号):失败可能不返回也可能返回。
如果大家遇到单笔交易的问题欢迎大家在帖子下面追问,注意一定要提供详细的错误等相关信息方便解答疑问