大家好,我是小悟
使用场景
不管是做APP、电脑网站、手机网站还是小程序,为了推广基本上都离不开用户分佣的场景。
换句话说就是在其平台内为每个用户设置“电子钱包”功能,而电子钱包在平台那里只是一串数字,这就需要平台为用户实现提现的功能。
而支付宝单笔转账到银行卡账户主要解决电商等行业商家在其平台内存在用户分佣等场景下,平台内的用户资金提现时面临的主要问题。
方便快捷
使用支付宝提供的单笔转账到银行卡账户接入很灵活,可应用于多行业平台内用户分佣等场景,提现到指定收款人的银行卡。可以和自身业务系统直接集成实现转账功能,无需频繁登录支付宝商家后台转账。
当发起接口转账后,对商家来说最重要的是,可以免费使用接口,无手续费,支付宝官方提供安全保障。而对用户来说最重要的是,都希望提现资金能够实时到账,单笔转账到银行卡账户可以选择预期T+0到账或预期T+1到账,但最终到账时效要以银行机构为准。
发放账户可以是企业支付宝账户或者个人支付宝账户,收款账户可以是企业对公银行账户或者个人银行卡账户。
功能实现
实现功能前需要联系支付宝业务人员为应用绑定转账到银行卡账户产品,签约成功了才可以调用。接口加签方式一定要选择公钥证书模式,除了产品本身要求外,安全级别更高。
使用SDK接入更是极其方便,几行代码即可完成接入。一运行就把应用参数传入SDK提供的方法创建DefaultAlipayClient实例,不需要每次调用的时候创建。
@Bean
public DefaultAlipayClient aliPayClient() throws AlipayApiException {
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
certAlipayRequest.setAppId("支付宝应用id");
certAlipayRequest.setPrivateKey("支付宝应用私钥路径");
certAlipayRequest.setFormat("json");
certAlipayRequest.setCharset("UTF-8");
certAlipayRequest.setSignType("RSA2");
certAlipayRequest.setCertPath("支付宝应用公钥路径");
certAlipayRequest.setAlipayPublicCertPath("支付宝公钥路径");
certAlipayRequest.setRootCertPath("支付宝根证书路径");
return new DefaultAlipayClient(certAlipayRequest);
}
调用alipay.fund.trans.uni.transfer(单笔转账接口),实现转账功能。
public AjaxResult uniTransfer(AlipayFundTransUniTransferModel model) {
try {
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
model.setOutBizNo("商家侧唯一订单号");
model.setTransAmount("1");
model.setProductCode("TRANS_BANKCARD_NO_PWD");
model.setBizScene("DIRECT_TRANSFER");
model.setOrderTitle("转账到银行卡账户");
Participant payeeInfo = new Participant();
payeeInfo.setIdentityType("BANKCARD_ACCOUNT");
payeeInfo.setIdentity("收款方银行账户名称");
payeeInfo.setName("收款方银行账户名称");
BankcardExtInfo bankcardExtInfo = new BankcardExtInfo();
bankcardExtInfo.setInstName("机构名称");
bankcardExtInfo.setAccountType("1");
bankcardExtInfo.setInstProvince("银行所在省份");
bankcardExtInfo.setInstCity("收款银行所在市");
bankcardExtInfo.setInstBranchName("收款银行所属支行");
bankcardExtInfo.setBankCode("银行支行联行号");
payeeInfo.setBankcardExtInfo(bankcardExtInfo);
model.setPayeeInfo(payeeInfo);
model.setRemark("转账到银行卡账户");
Map<String, String> params = new HashMap<>(2);
params.put("payer_show_name", "转账到银行卡账户");
model.setBusinessParams(JSON.toJSONString(params));
request.setBizModel(model);
AlipayFundTransUniTransferResponse response = aliPayClient.certificateExecute(request);
logger.info("支付宝 单笔转账到银行卡账户接口:{}", response.getBody());
int code = Integer.valueOf(response.getCode());
if(response.isSuccess()){
logger.info("支付宝 单笔转账到银行卡账户接口 调用成功 code=10000");
UniTransferResult result = new UniTransferResult();
result.setOutBizNo(response.getOutBizNo())
.setOrderId(response.getOrderId())
.setPayFundOrderId(response.getPayFundOrderId())
.setStatus(response.getStatus())
.setTransDate(response.getTransDate());
return AjaxResult.success(code, result);
} else {
logger.info("支付宝 单笔转账到银行卡账户接口 调用失败");
return AjaxResult.error(HttpStatus.ERROR_MSG, response.getSubMsg());
}
} catch (AlipayApiException e) {
e.printStackTrace();
logger.error("支付宝 单笔转账到银行卡账户接口 调用异常,原因:{}", e.getMessage());
return AjaxResult.error(e.getMessage());
}
}
注意事项
值得注意的是,目前这个接口暂未全量开放,需要联系支付宝业务人员签约。准入条件仅针对已实名认证的支付宝企业账号才可以申请签约该产品,而且需要注册满90天。接口加签方式一定要选择公钥证书模式。
提升限额
涉及到转账,自然就有限额的问题,只要产品签约成功就有个默认限额,默认限额要以和支付宝业务人员实际签约后的结果为准。但按官方的文档来看,说是日转账、月转账额度可以更高。
对于大部分行业来说够用了。不过这个不是限定的,如果确实是很大的平台,这些额度不够用的话还可以申请提升额度,相对灵活。
您的一键三连,是我更新的最大动力,谢谢
山水有相逢,来日皆可期,谢谢阅读,我们再会
我手中的金箍棒,上能通天,下能探海