目录
提问的时候,直接转人工客服,要表述清楚是哪个功能接口,出现啥问题;
一、支付宝SDK依赖:有新,老两种SDK
1、代码中会使用hutool工具包,生成json串
<!--阿里支付 新版本 SDK-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.2.0</version>
</dependency>
<!--阿里支付 老版本 SDK-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.13.50.ALL</version>
</dependency>
<!--引入hutool工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.3</version>
</dependency>
二、官方SDK API地址:
1、https://opendocs.alipay.com/open/54/00y8k9
三、新版本SDK ,初始化配置类代码如下:
package com.dbzq.config.alipay;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 阿里支付公共参数配置类(新版SDK)
* @author
* @date 2021-6-7 10:56:55
*/
@Configuration
@Slf4j
public class AliPayConfig {
/**应用ID*/
@Value("${aliPay.appId}")
private String appId;
/**请填写您的应用私钥*/
@Value("${aliPay.merchantPrivateKey}")
private String merchantPrivateKey;
/**请填写您的支付宝公钥*/
@Value("${aliPay.aliPayPublicKey}")
private String aliPayPublicKey;
/**
* 支付宝支付,配置类
* @return
*/
@Bean
public Config getOptions() {
log.info("-------------------------AliPayConfig.getOptions()------------------------------");
Config config = new Config();
config.protocol = "https";
config.gatewayHost = "openapi.alipay.com";
config.signType = "RSA2";
/**<-- 请填写您的AppId,例如:2019091767145019 -->*/
config.appId = appId;
// 请填写您的应用私钥
config.merchantPrivateKey = merchantPrivateKey;
//注:证书文件路径支持设置为文件系统中的路径或CLASS_PATH中的路径,优先从文件系统中加载,加载失败后会继续尝试从CLASS_PATH中加载
//config.merchantCertPath = "<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->";
//config.alipayCertPath = "<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->";
//config.alipayRootCertPath = "<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt -->";
//注:请填写您的支付宝公钥: 如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
config.alipayPublicKey = aliPayPublicKey;
//可设置异步通知接收服务地址(可选):<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->
config.notifyUrl = "";
//可设置AES密钥,调用AES加解密相关接口时需要(可选)
config.encryptKey = "";
return config;
}
@Bean
public void initPay(){
log.info("-------------------------AliPayConfig.initPay()------------------------------");
// 1. 设置支付宝支付参数(全局只需设置一次)
Factory.setOptions(getOptions());
}
}
四、旧版本SDK配置类代码,如下:
package com.dbzq.config.alipay;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 阿里支付公共参数配置类(老版本)
* @author
* @date 2021-6-7 10:56:55
*/
@Configuration
@Slf4j
public class OldAliPayConfig {
/**应用ID*/
@Value("${aliPay.appId}")
private String appId;
/**请填写您的应用私钥*/
@Value("${aliPay.merchantPrivateKey}")
private String merchantPrivateKey;
/**请填写您的支付宝公钥*/
@Value("${aliPay.aliPayPublicKey}")
private String aliPayPublicKey;
@Bean
public AlipayClient initAliPayClient() {
log.info("-------------------------OldAliPayConfig.initAliPayClient()------------------------------");
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",appId,merchantPrivateKey,"json","utf-8",aliPayPublicKey,"RSA2");
return alipayClient;
}
}
五、友情提示
1、以上,就是使用支付宝,新老版本的初实话过程,根据需要,灵活切换新老版本的实现方式(初期我是使用新版本SDK的,但是有的接口使用新版本出现了很脑裂的问题,问官方后,推荐我使用老版本接口实现方式,很难受:当时接口是查询用户签约结果接口【AlipayUserAgreementQueryResponse response = alipayClient.execute(request); 后续会贴出,周期扣款,整条流程业务代码】)
2、在做支付宝支付的时候,一定要信心阅读官方接口文档,接入说明,遇到问题一定要首先找官方人工技术支持,别再网上找帖子,很浪费时间!!!