支付宝企业转账到个人账户
一、介绍
在日常项目中都会碰到支付功能需求,最近公司项目需要给用户退款,其实也就是公司账户转账到用户个人支付宝账号。
二、环境准备
1、蚂蚁金服开放平台开通
2、设置私钥和公钥
(1)、通过支付宝提供的签名验签工具生成商用应用私钥/公钥。私钥需要保存在项目配置信息中,公钥设置到支付宝,之后会生成一个支付宝公钥,你要复制该支付宝公钥到项目配置信息中去。
三、代码实现
1、官方资料
maven依赖信息:https://docs.open.alipay.com/54/103419/
支付宝转账API:https://docs.open.alipay.com/309/106237/
支付宝转账开发文档:https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer
2、代码实现
配置文件信息:
核心代码片段:
// service层
@Service("alipayServiceImpl")
@Slf4j
public class AlipayServiceImpl implements AliPayService{
// 支付宝AppID
@Value("${alipay.appid}")
private String appId;
// 支付宝公钥
@Value("${alipay.public_key}")
private String alipay_public_key;
// 支付宝私钥
@Value("${alipay.private_key}")
private String alipay_private_key;
@Override
// account:用户支付宝账户
// name:用户支付宝真实姓名
// remark:转账备注信息 参数根据实际需求进行动态提取或者写死
public String TransferUser(String account, String name, String amount, String remark){
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",appId,alipay_private_key,"json","GBK",alipay_public_key,"RSA2");
AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
String out_biz_no = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
request.setBizContent("{" +
"\"out_biz_no\":\""+out_biz_no+"\"," +
"\"payee_type\":\"ALIPAY_LOGONID\"," +
"\"payee_account\":\""+account+"\"," +
"\"amount\":\""+amount+"\"," +
"\"payer_show_name\":\"支付商户信息\"," +
"\"payee_real_name\":\""+name+"\"," +
"\"remark\":\""+remark+"\"" +
" }");
AlipayFundTransToaccountTransferResponse response;
try {
response = alipayClient.execute(request);
if(response.isSuccess()){
log.info("code:{}",response.getCode());
log.info("msg:{}",response.getMsg());
log.info("sub_msg:{}",response.getSubMsg());
log.info("支付宝调用成功.....");
return "success";
} else {
log.info("code:{}",response.getCode());
log.info("msg:{}",response.getMsg());
log.info("sub_msg:{}",response.getSubMsg());
log.info("支付宝调用失败.....");
return "fail";
}
} catch (AlipayApiException e) {
e.printStackTrace();
return "fail";
}
}
}
// controller层
@RequestMapping("/alipay")
public String alipay(){
// 这些参数都是需要从前台传递过来的,看你具体需求,我暂时是写死的
return aliPayServiceImpl.TransferUser("支付宝账户","真实姓名", "0.1", "备注");
}
日志信息:
成功案例:
失败案例:
注意事项:
以上环境一定要配置正确,具体支付环境要是正式的服务器环境,或者你也可以通过外网映射软件将自己的电脑网段发布到正式环境也就是外网,否则在本地测试是不会成功的。