前言
记录一下支付功能的一些方法, 仅供学习参考,不涉及商业内容,一些基本环境先说一下,后面就不再说了
jdk1.8 springBoot2.0 maven
个人对接经验重要提醒:如果感觉所有配置点都搞好了, 还是报错,例如验签失败等, 那么我实际检查的方式如下:
1.appId是否正确
2.merchantPrivateKey秘钥是否正确
3.GATEWAY_URL网关是否正确, 正式环境和沙箱的区别就是, alipay和alipaydev, 沙箱多了个dev
4.证书文件名字,路径是否正确
5.签名方式,字符编码方式,json这些都检查是否一致
6.代码执行的方法注意一下, 证书方式的执行一般以certificateExecute开头
7.以上的检查完毕, 使用maven先clean下项目,然后重新打包运行
8.如果还是不行, 那就废除证书, 重新生成证书, 然后再重新填写一遍, 有时候可能是支付宝沙箱那边问题, 需要等待一会
支付宝支付对接流程
使用支付宝沙箱做演示
首先要登录支付宝开放平台-开发者中心-研发服务(沙箱)
- 设置RSA2(SHA256)密钥(推荐), 这里有公钥证书和公钥两种方式,选择不同的方式对调用alipay-sdk-java第三方sdk的方法也会不同,后面会区分标识.
- 下载支付宝沙箱app到手机,可以使用给你的沙箱账号登录支付宝沙箱app, 账号有商家和买家的两个账号,钱都可以自己设置
- 引入支付宝第三方jar包, 公钥证书文件放到项目目录下
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.8.73.ALL</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.62</version>
</dependency>
- 编写一个配置支付宝参数的类
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import org.springframework.util.ResourceUtils;
import java.io.File;
import java.io.IOException;
public class AlipayConfig {
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static final String APP_ID = "";
// 商户私钥,您的PKCS8格式RSA2私钥
public static final String MERCHANT_PRIVATE_KEY = "";
// 签名方式
public static final String SIGN_TYPE = "RSA2";
// 字符编码格式
public static final String CHARSET = "UTF-8";
// json
public static final String FORMAT = "json";
// 支付宝网关(开发环境)
public static final String GATEWAY_URL = "https://openapi.alipaydev.com/gateway.do";
public static final String APP_CERT_PATH = "/static/CRT/appCertPublicKey_2016102300744804.crt";
public static final String ALIPAY_CERT_PATH = "/static/CRT/alipayCertPublicKey_RSA2.crt";
public static final String ALIPAY_ROOT_CERT_PATH = "/static/CRT/alipayRootCert.crt";
private volatile static AlipayClient alipayClient = null;
// 使用"公钥证书"创建的阿里客户端对象实例
public static AlipayClient getInstance() throws AlipayApiException, IOException {
if (alipayClient == null) {
synchronized (AlipayClient.class) {
if (alipayClient == null) {
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
File file = new File(ResourceUtils.getURL("classpath:").