config 证书模式支付配置类
package com.ggba8.ggba.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class InitAlipayConfig {
@Value("${alipay.shop.private_key}")
private String privateKey;
@Value("${alipay.shop.gateway_url}")
private String serverUrl;
@Value("${alipay.shop.appid}")
private String appId;
@Value("${alipay.shop.app_cert_path}")
private String appCertPath;
@Value("${alipay.shop.alipay_public_cert_path}")
private String alipayPublicCertPath;
@Value("${alipay.shop.root_cert_path}")
private String rootCertPath;
@Bean
public com.alipay.api.AlipayConfig getAlipayConfig() {
com.alipay.api.AlipayConfig alipayConfig = new com.alipay.api.AlipayConfig();
alipayConfig.setPrivateKey(privateKey);
alipayConfig.setServerUrl(serverUrl);
alipayConfig.setAppId(appId);
alipayConfig.setCharset("UTF-8");
alipayConfig.setSignType("RSA2");
alipayConfig.setFormat("json");
alipayConfig.setAppCertPath(appCertPath);
alipayConfig.setAlipayPublicCertPath(alipayPublicCertPath);
alipayConfig.setRootCertPath(rootCertPath);
return alipayConfig;
}
}
小程序支付业务(证书授权模式)
类型是JSPAI_PAY
@Override
public String alipay(LogPay log,String passbackParams,String code) throws Exception {
// 构造请求参数以调用接口
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
AlipayTradeCreateModel model = new AlipayTradeCreateModel();//支付宝订单格式
request.setReturnUrl(return_url);
request.setNotifyUrl(notify_url);
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();//验签
certAlipayRequest.setServerUrl(alipayConfig.getServerUrl());
certAlipayRequest.setAppId(alipayConfig.getAppId()); //APPID 即创建应用后生成,详情见创建应用并获取 APPID
certAlipayRequest.setPrivateKey(alipayConfig.getPrivateKey()); //开发者应用私钥,由开发者自己生成
certAlipayRequest.setFormat("json"); //参数返回格式,只支持 json 格式
certAlipayRequest.setCharset("UTF-8"); //请求和签名使用的字符编码格式,支持 GBK和 UTF-8
certAlipayRequest.setSignType("RSA2"); //商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐商家使用 RSA2。
certAlipayRequest.setCertPath(alipayConfig.getAppCertPath()); //应用公钥证书路径(app_cert_path 文件绝对路径)
certAlipayRequest.setAlipayPublicCertPath(alipayConfig.getAlipayPublicCertPath()); //支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径)
certAlipayRequest.setRootCertPath(alipayConfig.getRootCertPath()); //支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径)
AlipayClient client = new DefaultAlipayClient(certAlipayRequest);
com.alibaba.fastjson.JSONObject json = alipayClientUtils2.getAuthToken(code);
if(json != null){
String aliOpenID = json.getString("user_id");
model.setBuyerId(aliOpenID);
}
model.setOutTradeNo(log.getOrderId()); //订单号
if(debug){
model.setTotalAmount("0.01");
}else{
model.setTotalAmount(log.getMoneyInit().floatValue()+""); //金额
}
model.setSubject(log.getTitle()); //订单名
model.setBody(log.getTitle()); //订单描述
// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下&#