1.payService
String alikey = aliPayService.unifiedorder(transaction, subject, amount);
System.out.println(alikey);
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("201809070000001");
//收款方账户类型。
//1、ALIPAY_USERID:pid ,以2088开头的16位纯数字组成。
//2、ALIPAY_LOGONID:支付宝登录号(邮箱或手机号)
model.setPayeeType("ALIPAY_LOGONID");
//收款方账户。与payee_type配合使用。付款方和收款方不能是同一个账户。
model.setPayeeAccount("***@sandbox.com");
//测试金额必须大于等于0.1,只支持2位小数,小数点前最大支持13位
model.setAmount("1.10");
//当付款方为企业账户且转账金额达到(大于等于)50000元,remark不能为空。
model.setRemark("转账备注");
request.setBizModel(model);
AlipayFundTransToaccountTransferResponse response = alipayClient.sdkExecute(request);
System.out.println(response.getBody());
if(response.isSuccess()){
System.out.println("调用成功");
incomeWithdrawuMapper.passUserWithdraw(id);
accountuMapper.updateEarningByWirhdrawu(userId,amount);
return 1;
}else {
System.out.println("调用失败");
return 0;
}
因为是实用沙箱进行支付,所以”alipayClient.sdkExecute”这个地方不可以写成”alipayClient.Execute”,后者是支付宝环境的支付
2.AliPayService
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import backStage.exception.SimpleException;
import backStage.exception.SystemException;
import backStage.module.Configuration;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Map;
@Service
public class AliPayService {
/**
* 支付宝支付
* @param transaction
* @param subject
* @param amount
* @return
*/
public String unifiedorder(String transaction,String subject, BigDecimal amount) {
String domain = Configuration.property(Configuration.PROJECT_DOMAIN);
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", Configuration.property(Configuration.ALIPAY_APP_ID) ,Configuration.property(Configuration.ALIPAY_APP_PRIVATE_KEY), "json", "UTF-8", Configuration.property(Configuration.ALIPAY_ALIPAY_PUBLIC_KEY), "RSA2");
AlipayTradeAppPayModel alipayTradeAppPayModel = new AlipayTradeAppPayModel();
alipayTradeAppPayModel.setSubject(subject);
alipayTradeAppPayModel.setOutTradeNo(transaction);
alipayTradeAppPayModel.setTotalAmount(amount.toPlainString());
alipayTradeAppPayModel.setProductCode("QUICK_MSECURITY_PAY");
AlipayTradeAppPayRequest alipayTradeAppPayRequest = new AlipayTradeAppPayRequest();
alipayTradeAppPayRequest.setBizModel(alipayTradeAppPayModel);
alipayTradeAppPayRequest.setNotifyUrl(domain + Configuration.SYSTEM_ALI_PAYMENT_NOTIFY_URI);
AlipayTradeAppPayResponse alipayTradeAppPayResponse = null;
try {
alipayTradeAppPayResponse = alipayClient.sdkExecute(alipayTradeAppPayRequest);
} catch (AlipayApiException e) {
throw new SystemException("支付宝支付异常:" + e.getErrCode() + "," + e.getErrMsg());
}
return alipayTradeAppPayResponse.getBody();
}
/**
* 支付宝支付回调,参数校验
* @param param
*/
public void verified(Map<String, String> param){
boolean signVerified = false;
try{
signVerified = AlipaySignature.rsaCheckV1(param, Configuration.property(Configuration.ALIPAY_ALIPAY_PUBLIC_KEY), "UTF-8", "RSA2");
} catch (AlipayApiException e) {
throw new SystemException("支付宝支付签名验证异常: " + e);
}
if(!signVerified){
throw new SimpleException("非法的参数签名");
}
}
}
3.AlipayConfig
注意红框的位置,还是同样的问题,使用沙箱环境进行测试,参数应该是“alipaydev”,而使用支付宝环境时,应该是“alipay”
欢迎大家补充
ps: