api:
https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer
支付宝付款工具类:
package com.st.project.common;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayFundTransToaccountTransferRequest;
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import java.util.HashMap;
import java.util.Map;
/**
* 支付宝付款
*/
public class AlipayUtil {
// @Value("${alipay.url}")
// private String serverUrl; //HTTPS请求地址
// @Value("${alipay.app_id}")
// private String appId; //支付宝分配给开发者的应用ID
// @Value("${alipay.private_key}")
// private String privateKey; //应用私钥
// @Value("${alipay.alipay_public_key}")
// private String alipayPublicKey; //支付宝公钥
/**
* 单笔转账到支付宝账户
* @param out_biz_no 商户转账唯一订单号
* @param payee_type 收款方账户类型
* @param payee_account 收款方账户
* @param amount 转账金额,单位:元
* @param payer_show_name 付款方姓名
* @param payee_real_name 收款方真实姓名
* @param remark 转账备注
* @return
* @throws AlipayApiException
*/
public Map<String,String> balance_out_alipay(String out_biz_no,String payee_type,String payee_account,
String amount,String payer_show_name,String payee_real_name,String remark,Environment env) throws AlipayApiException {
Map<String,String> resultMap=new HashMap<String,String>();
//SDK调用前需要进行初始化
AlipayClient alipayClient = new DefaultAlipayClient(
env.getProperty("alipay.url"),
env.getProperty("alipay.app_id"),
env.getProperty("alipay.private_key"),
"json",
"utf-8",
env.getProperty("alipay.alipay_public_key"),
"RSA2");
//设置请求参数
Map<String,String> alipayMap=new HashMap<>();
alipayMap.put("out_biz_no",out_biz_no);
alipayMap.put("payee_type",payee_type);
alipayMap.put("payee_account",payee_account);
alipayMap.put("amount",amount);
alipayMap.put("payer_show_name",payer_show_name);
alipayMap.put("payee_real_name",payee_real_name);
alipayMap.put("remark",remark);
String json = new Gson().toJson(alipayMap);
AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
request.setBizContent(json);
//发起转账到支付宝请求
AlipayFundTransToaccountTransferResponse response =null;
try {
response=alipayClient.execute(request);
if(response.isSuccess()){
resultMap.put("success", "true");
resultMap.put("order_id", response.getOrderId());//支付宝转账单据号,成功一定返回,失败可能不返回也可能返回。
resultMap.put("msg", "转账成功");
} else {
resultMap.put("success", "false");
resultMap.put("order_id", response.getOrderId());//支付宝转账单据号,成功一定返回,失败可能不返回也可能返回。
resultMap.put("msg", response.getSubCode()+"("+response.getSubMsg()+")");
}
} catch (AlipayApiException e) {
resultMap.put("success", "false");
resultMap.put("msg", "转账失败!");
e.printStackTrace();
}
return resultMap;
}
}
设置参数实现付款:
//支付宝
AlipayUtil alipayUtil = new AlipayUtil();
String out_biz_no = getUUID(); //商户转账唯一订单号
String payee_type = "ALIPAY_USERID"; //收款方账户类型
String payee_account = customerEntity.getOpenId(); //收款方账户
String amount = (Double.parseDouble(blance) + Double.parseDouble(blance_distribution)) + ""; //转账金额,单位:元
String payer_show_name = "尚汤"; //付款方姓名
String payee_real_name = ""; //收款方真实姓名
String remark = "申请提现"; //转账备注
Map<String, String> alipayMap = alipayUtil.balance_out_alipay(out_biz_no, payee_type, payee_account, amount, payer_show_name, payee_real_name, remark, env);
if ("true".equals(alipayMap.get("success"))) {
orderRefunds.setCode(out_biz_no);
orderRefunds.setTradeNo(alipayMap.get("order_id"));
orderRefunds.setStatus(1);
orderRefundsRepository.save(orderRefunds);
//用户减去相应的余额或分销余额
customerEntity.setBalance(customerEntity.getBalance().subtract(BigDecimal.valueOf(Double.parseDouble(blance))));
customerEntity.setBalanceDistribut(customerEntity.getBalanceDistribut().subtract(BigDecimal.valueOf(Double.parseDouble(blance_distribution))));
customerRepository.saveAndFlush(customerEntity);
map.put("success", "true");
map.put("msg", "支付宝提现成功");
} else {
orderRefunds.setCode(out_biz_no);
orderRefunds.setTradeNo(alipayMap.get("order_id"));
orderRefunds.setStatus(2);
orderRefundsRepository.save(orderRefunds);
map.put("success", "false");
map.put("msg", "支付宝提现失败" + alipayMap.get("msg"));
}