注意:

一、支付宝准备工作

1.登陆支付宝开发者中心(没有登入的直接用支付宝登入)

https://openhome.alipay.com/

2. 进入研发服务

java springboot 对接支付宝 springboot整合支付宝_支付

3. 点击设置RSA2(密钥)注:这个APPID待会项目会用到

java springboot 对接支付宝 springboot整合支付宝_支付_02

4.点击使用支付宝密钥生成器

java springboot 对接支付宝 springboot整合支付宝_html_03

5.点击开发者助手简介,我们在这里面生成密钥

java springboot 对接支付宝 springboot整合支付宝_服务器_04

6.点击web在线加密生成密钥,没必要下载

java springboot 对接支付宝 springboot整合支付宝_支付_05

7.点击生成密钥(注:这个应用私钥项目中会用到)

java springboot 对接支付宝 springboot整合支付宝_html_06

8.我们把上面的应用公钥复制到沙箱应用中(下面红框中),点击保存设置,这时候就会生成支付宝公钥(注:这个支付宝公钥项目中会用到)

java springboot 对接支付宝 springboot整合支付宝_支付_07

二、开始搭建项目

1.使用idea搭建快速搭建springboot项目,项目结构如下:

java springboot 对接支付宝 springboot整合支付宝_支付宝_08

2.支付界面

java springboot 对接支付宝 springboot整合支付宝_支付宝_09

3.添加pom
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
		<!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- 支付SDK-->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.9.9</version>
        </dependency>
4.配置yml
app:
  #appId
  appId: #上面注 有提到appId
  #商户私钥
  privateKey: #上面注 有提到就是应用私钥
  #支付宝公钥
  publicKey: #上面注 有提到就是支付宝公钥
  #服务器异步通知页面路径,需要公网能访问到
  notifyUrl: http://localhost:8080/app/success
  #服务器同步通知页面路径,需要公网能访问到
  returnUrl: http://localhost:8080/app/success
  #签名方式
  signType: RSA2
  #字符编码格式
  charset: utf-8
  #支付宝网关
  gatewayUrl: https://openapi.alipaydev.com/gateway.do
5.新建bean包主要放实体类,创建AlipayApp类读取yml配置信息
@Data
@Component
@ConfigurationProperties(prefix = "app")
public class AlipayApp {

    /**
     * appId
     */
    private String appId;
    /**
     * 商户私钥
     */
    private String privateKey;
    /**
     * 支付宝公钥
     */
    private String publicKey;
    /**
     * 服务器异步通知页面路径,需要公网能访问到
     */
    private String notifyUrl;
    /**
     * 服务器同步通知页面路径,需要公网能访问到
     */
    private String returnUrl;
    /**
     * 签名方式
     */
    private String signType;
    /**
     * 字符编码格式
     */
    private String charset;
    /**
     * 支付宝网关
     */
    private String gatewayUrl;
}
6.在bean包下创建订单实体类AliPayBean
@Data
public class AliPayBean {

    /**
     * 商户订单号
     */
    private String out_trade_no;

    /**
     * 订单名称
     */
    private String subject;

    /**
     * 付款金额
     */
    private String total_amount;

    /**
     * 商品描述
     */
    private String body;

    /**
     * 超时时间参数
     */
    private String timeout_express = "10m";

    /**
     * 产品编号
     */
    private String product_code = "FAST_INSTANT_TRADE_PAY";
}
7.新建一个component包,创建Alipay,集成支付接口
@Component
public class Alipay {

    @Autowired
    private AlipayApp app;

    public String pay(AliPayBean aliPayBean) throws AlipayApiException {
        //1.初始化AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(app.getGatewayUrl(),
                app.getAppId(),
                app.getPrivateKey(),
                "json",
                app.getCharset(),
                app.getPublicKey(),
                app.getSignType());
        //2.设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(app.getReturnUrl());
        alipayRequest.setNotifyUrl(app.getNotifyUrl());
        alipayRequest.setBizContent(JSON.toJSONString(aliPayBean));
        //3.请求支付宝进行付款,并获取支付结果
        String result = alipayClient.pageExecute(alipayRequest).getBody();
        //4.返回付款结果
        return result;
    }
}
8.创建service包,编写支付接口PayService
public interface PayService {

    String aliPay(AliPayBean aliPayBean) throws AlipayApiException;
}
9.在创建service包下创建impl包,实现支付接口PayServiceImpl
@Service
public class PayServiceImpl implements PayService {

    @Autowired
    private Alipay alipay;

    @Override
    public String aliPay(AliPayBean aliPayBean) throws AlipayApiException {
        return alipay.pay(aliPayBean);
    }
}
10.创建controller包,创建OrderController订单控制层接口
@RestController
@RequestMapping(value = "/app/")
public class OrderController {

    @Autowired
    private PayService payService;

    @RequestMapping(value = "aliPay")
    public String alipay(String outTradeNo, String subject, String totalAmount, String body) throws AlipayApiException {
        AliPayBean alipayBean = new AliPayBean();
        alipayBean.setOut_trade_no(outTradeNo);
        alipayBean.setSubject(subject);
        alipayBean.setTotal_amount(totalAmount);
        alipayBean.setBody(body);
        return payService.aliPay(alipayBean);
    }

    @RequestMapping(value = "success")
    public void success(){
        System.out.println("支付成功!");
    }
}
11.在static包下编写支付页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/app/aliPay" method="post">
        订单号:<input type="text" name="outTradeNo" required><br/>
        订单名称:<input type="text" name="subject" required><br/>
        付款金额:<input type="text" name="totalAmount" required><br/>
        商品描述:<input type="text" name="body"><br/>
        <input type="submit" value="下单"> <input type="reset" value="重置">
    </form>
</body>
</html>
12.编写PayCoinController来跳转支付界面
@Controller
@RequestMapping(value = "/paycoin/")
public class PayCoinController {

    @RequestMapping(value = "index")
    public String payCoin(){
        return "index.html";
    }
}
13.启动项目,访问http://localhost:8080/,填写数据,提交支付

java springboot 对接支付宝 springboot整合支付宝_html_10

14.成功进入扫码界面

java springboot 对接支付宝 springboot整合支付宝_支付宝_11

15.输入沙箱的买家账户密码即可支付成功

java springboot 对接支付宝 springboot整合支付宝_服务器_12

16.查看沙箱的商家账户余额

java springboot 对接支付宝 springboot整合支付宝_支付宝_13

可能存在的问题

1.点击支付提示支付存在钓鱼风险(目前谷歌会有这样子的问题,建议可以尝试IE和360浏览器试一下)
2.二维码失效(建议把实体类的超时时间timeout_express设置长一点)