SpringBoot 接入支付宝支付-证书模式
满足一下条件
1、注册支付宝商户,实名认证,获取APPID
2、申请支付宝公钥证书
3、有些复杂具体还是按照官方引导进行操作
产品大全
https://b.alipay.com/signing/productSetV2.htm
目前已对接:转账到支付宝账户
https://b.alipay.com/signing/productDetailV2.htm?productId=I1012000291000001000
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.11.54.ALL</version>
</dependency>
package com.b2c.common.alipay.domain;
import java.math.BigDecimal;
public class AlipayRequest {
private String outBizNo;
private BigDecimal transAmount;
private String productCode = "TRANS_ACCOUNT_NO_PWD";
private String bizScene = "DIRECT_TRANSFER";
private String identity;
private String identityType = "ALIPAY_LOGON_ID";
private String name;
private String orderTitle;
private String remark;
private String orderId;
public String getOutBizNo() {
return outBizNo;
}
public void setOutBizNo(String outBizNo) {
this.outBizNo = outBizNo;
}
public BigDecimal getTransAmount() {
return transAmount;
}
public void setTransAmount(BigDecimal transAmount) {
this.transAmount = transAmount;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
public String getBizScene() {
return bizScene;
}
public void setBizScene(String bizScene) {
this.bizScene = bizScene;
}
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getIdentityType() {
return identityType;
}
public void setIdentityType(String identityType) {
this.identityType = identityType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOrderTitle() {
return orderTitle;
}
public void setOrderTitle(String orderTitle) {
this.orderTitle = orderTitle;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
}
package com.b2c.common.alipay;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayFundTransOrderQueryRequest;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransOrderQueryResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.b2c.common.alipay.domain.AlipayRequest;
import com.b2c.common.utils.StrUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.ResourceUtils;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
public class AlipayUtils {
private static Logger logger = LoggerFactory.getLogger(AlipayUtils.class);
private static final String APPID = "应用ID-60766";
private static final String PRIVATE_KEY = "应用私钥-3me6BgkDXjad16dEFoI=";
private static String appCertPublicKey = "/www/server/nginx/conf/cert/appCertPublicKey_2021002114607966.crt";
private static String alipayCertPublicKey = "/www/server/nginx/conf/cert/alipayCertPublicKey_RSA2.crt";
private static String alipayRootCert = "/www/server/nginx/conf/cert/alipayRootCert.crt";
public static AlipayFundTransUniTransferResponse transUniTransferRequest(AlipayRequest alipayRequest) throws IOException, AlipayApiException {
DefaultAlipayClient alipayClient = AlipayUtils.createDefaultAlipayClient();
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
JSONObject object = new JSONObject();
object.put("out_biz_no",alipayRequest.getOutBizNo());
object.put("trans_amount",alipayRequest.getTransAmount().setScale(2,BigDecimal.ROUND_HALF_DOWN));
object.put("product_code",alipayRequest.getProductCode());
object.put("biz_scene",alipayRequest.getBizScene());
JSONObject payeeInfo = new JSONObject();
payeeInfo.put("identity",alipayRequest.getIdentity());
payeeInfo.put("identity_type",alipayRequest.getIdentityType());
payeeInfo.put("name",alipayRequest.getName());
object.put("payee_info",payeeInfo.toJSONString());
object.put("order_title",alipayRequest.getOrderTitle());
object.put("remark",alipayRequest.getRemark());
request.setBizContent(object.toJSONString());
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
if(StrUtils.isNull(response)){
return null;
}
return response;
}
public static AlipayFundTransOrderQueryResponse rransOrderQueryRequest(AlipayRequest alipayRequest) throws IOException, AlipayApiException {
DefaultAlipayClient alipayClient = AlipayUtils.createDefaultAlipayClient();
AlipayFundTransOrderQueryRequest request = new AlipayFundTransOrderQueryRequest();
JSONObject object = new JSONObject();
if(StrUtils.isNull(alipayRequest.getOutBizNo()) && StrUtils.isNull(alipayRequest.getOrderId())){
throw new RuntimeException("商户订单号、支付宝转账订单号 不能同时为空!至少有一个不为空即可!");
}
if(StrUtils.isNotNull(alipayRequest.getOutBizNo())){
object.put("out_biz_no",alipayRequest.getOutBizNo());
}
if(StrUtils.isNotNull(alipayRequest.getOrderId())){
object.put("order_id",alipayRequest.getOrderId());
}
request.setBizContent(object.toJSONString());
AlipayFundTransOrderQueryResponse response = alipayClient.certificateExecute(request);
if(StrUtils.isNull(response)){
return null;
}
return response;
}
protected static DefaultAlipayClient createDefaultAlipayClient() throws IOException, AlipayApiException {
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
certAlipayRequest.setAppId(APPID);
certAlipayRequest.setPrivateKey(PRIVATE_KEY);
certAlipayRequest.setFormat("json");
certAlipayRequest.setCharset("GBK");
certAlipayRequest.setSignType("RSA2");
certAlipayRequest.setCertPath(appCertPublicKey);
certAlipayRequest.setAlipayPublicCertPath(alipayCertPublicKey);
certAlipayRequest.setRootCertPath(alipayRootCert);
DefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
return alipayClient;
}
}