springboot整合支付宝(沙箱)

1.登录支付宝沙箱

登录 - 支付宝

 点击控制台

滑到最下面点击沙箱

 

点击查看公钥模式并复制

 复制公钥和私钥,并编写配置类


# ID
alipay.appId=9021。。。
# 公钥
alipay.alipayPublicKey。。。
# 私钥
alipay.privateKey。。。

# 回调地址?# https://www.baidu.com/
alipay.notifyUrl=http://127.0.0.1:8081/paySuccess  

alipay.returnUrl=http://127.0.0.1:8081/paySuccess

alipay.charset=UTF-8

alipay.signType=RSA2
#  响应地址
alipay.gatewayUrl=https://openapi-sandbox.dl.alipaydev.com/gateway.do

alipay.logPath="F:\\alipay\\log"

所需要jar包

 <!--
                个人版本踩坑:
                不加这个依赖的话,当在配置类中
                使用@ConfigurationProperties(prefix = "aliyun")注解时,
                我这个版本的spring boot会提示有问题-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.10.1</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.3.0</version>
            </dependency>
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.31</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.3.3</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.74</version>
            </dependency>
            <dependency>
                <groupId>com.alipay.sdk</groupId>
                <artifactId>alipay-sdk-java</artifactId>
                <version>4.22.110.ALL</version>
            </dependency>

编写配置类

AliPay:

package com.cskt.springboot_aliyun.baen;

import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.cskt.springboot_aliyun.config.AliPayConfig;
import com.cskt.springboot_aliyun.domian.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author 26846
 */
@Component
public class AliPay {

    @Autowired
    private AliPayConfig aliPayConfig;

    public String pay(Order order) throws AlipayApiException {
        //支付网关
        String serverUrl = aliPayConfig.getGatewayUrl();
        // AppId
        String appId = aliPayConfig.getAppId();
        // 用户密钥(私钥),即PKCS8格式RSA2私钥
        String privateKey = aliPayConfig.getPrivateKey();
        //格式化为json格式
        String format = "json";
        //编码
        String charset = aliPayConfig.getCharset();
        //支付宝公钥,即对应Appid下的支付宝公钥
        String alipayPublicKey = aliPayConfig.getAlipayPublicKey();
        //签名方式
        String signType = aliPayConfig.getSignType();
        //页面跳转同步通知页面路径
        String returnUrl = aliPayConfig.getReturnUrl();
        //服务器异步通知页面路径
        String notifyUrl = aliPayConfig.getNotifyUrl();

        //1、获取初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(
                serverUrl, appId, privateKey, format, charset, alipayPublicKey, signType);
        //2、设置请求参数
        AlipayTradePagePayRequest alipayTradePagePayRequest = new AlipayTradePagePayRequest();
        // 页面跳转同步通知页面路径
        alipayTradePagePayRequest.setReturnUrl(returnUrl);
        alipayTradePagePayRequest.setNotifyUrl(notifyUrl);
        //封装参数(json格式)
        alipayTradePagePayRequest.setBizContent(JSON.toJSONString(order));

        //    3、请求支付宝进行付款,并获取支付结果
        String body = alipayClient.pageExecute(alipayTradePagePayRequest).getBody();
        //放回信息
        return body;
    }
}

AliPayConfig:

package com.cskt.springboot_aliyun.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

/**
 * @author 26846
 */
@Configuration
@PropertySource(value = "classpath:application-alipay.properties")
@ConfigurationProperties(prefix = "alipay") //前缀
@Data
public class AliPayConfig {
    private String appId;
    private String privateKey;
    private String alipayPublicKey;
    private String notifyUrl;
    private String returnUrl;
    private String charset;
    private String signType;
    private String gatewayUrl;
}

service层:

接口:

/**
     * 支付宝支付接口
     */
    String aliPay(Order order) throws AlipayApiException;

    /**
     * 查询订单信息
     * @return
     */
    List<Order> orderAll();

    /**
     * 新增订单信息
     * @param order
     * @return
     */
    int orderAdd(Order order);
    /**
     * 修改订单状态
     */
    int revise(String out_trade_no);

 实现类:

package com.cskt.springboot_aliyun.service.impl;

import com.alipay.api.AlipayApiException;

import com.cskt.springboot_aliyun.baen.AliPay;
import com.cskt.springboot_aliyun.domian.Order;
import com.cskt.springboot_aliyun.mapper.OrderMapper;
import com.cskt.springboot_aliyun.service.AliPayService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 26846
 * @date 2023/3/23 10:47
 */
@Service
public class AliPayServiceImpl implements AliPayService {

    @Autowired
    private AliPay aliPay;
    @Autowired
    private OrderMapper orderMapper;

    @Override
    public String aliPay(Order order) throws AlipayApiException {
        System.out.println("order----service--:"+order);
        return aliPay.pay(order);
    }

    /**
     * 查询信息
     * @return
     */
    @Override
    public List<Order> orderAll() {
        return orderMapper.orderAll();
    }

    @Override
    public int orderAdd(Order order) {
        return orderMapper.orderAdd(order);
    }

    @Override
    public int revise(String out_trade_no) {
        return orderMapper.revise(out_trade_no);
    }
}

控制层:

package com.cskt.springboot_aliyun.controller;

import com.alipay.api.AlipayApiException;

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.cskt.springboot_aliyun.domian.Order;
import com.cskt.springboot_aliyun.service.AliPayService;
import com.cskt.springboot_aliyun.service.impl.AliPayServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@RestController
public class AliPayController {

    @Autowired
    private AliPayService aliPayService;
    @Autowired
    private AliPayServiceImpl aliPay;
    /**
     * 进入支付主页
     * @return
     */
    @GetMapping("/")
    public ModelAndView index(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("testAliPay");
        return modelAndView;
    }
    /**
     * 提交订单
     * @param outTradeNo
     * @param subject
     * @param totalAmount
     * @return
     * @throws AlipayApiException
     */
    @PostMapping("/order/alipay")
    public String aliPay(String outTradeNo,String subject,
                         String totalAmount) throws AlipayApiException {
        System.out.println("--------进入提交支付----------");
        Order order = new Order();
        order.setOut_trade_no(outTradeNo);
        order.setSubject(subject);
        order.setTotal_amount(totalAmount);
        order.setState("支付成功");
        System.out.println("order-----:"+order);
        if (order.getOut_trade_no()!=null){
            int i = aliPay.orderAdd(order);
        }
        return aliPayService.aliPay(order);
    }
    /**
     * 查询信息
     */
    @GetMapping("/paySuccess")
    public ModelAndView All(){
        //如果支付成功,订单就要新增到数据库
        //如果取消支付,也要新增订单到数据库,取消订单-状态
        //订单查询能够查出订单状态 信息
        ModelAndView modelAndView = new ModelAndView();
        List<Order> orders = aliPay.orderAll();
        modelAndView.addObject("ordersList",orders);
        modelAndView.setViewName("success");
        return modelAndView;
    }
    /**
     * 退款订单
     * @param outTradeNo
     * @param subject
     * @return
     * @throws AlipayApiException
     */
        @GetMapping("/refund")
    public ModelAndView refund( String outTradeNo, String subject) {
        System.out.println("--------进入提交退款----------");
        // 支付宝沙箱环境的gateway和appid
        String gateway = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
        String appId = "9021000129651143";
        // 应用私钥和支付宝公钥
        // 商户私钥,您的PKCS8格式RSA2私钥
        String merchant_private_key ="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCWjBTeJqomgK19q8x17V2CpovMIz/kXf4ejack43RLvG4+DCzKAtDrBLd62WbqXvj5A5pLBOveBQH/I8PxTDOZCJfh3R1f2Qjz19vavhujf76nSowpaNWL9IAd29pAE2RuM3w4brCktkB7TMnfPv+kowcWIf5h2SFabC6l1tPh7l5XBvwz9A6qEJW+Rflc81WvqAvUBKJWZ1VEmH2oiy1eeLnm6ZV2Boop3YjZrNCs0qvfKcKG6kRXZCuDDCkosHfYJwaMc8a8Bn6HbB3iRuaHuBfMCcbfe6Zb9zx5DbE5PsLazNX2a+0TfpUZGMemr3L52Q3UfW6hlTPtKCdeS0YlAgMBAAECggEAJuUiLxMGOtRb/m/4by9YTX0B+UfSJgoysWofmOQ7E6YnRViX6ck4eL/LN64bbMoEwTExF9i5p67biTOQWDM70Xnq46vg/vZv3bATWTxsn51NgKM9+yTepz4QK6a1iIB6Hg6nNV1DvgpoNnLsZQU9vydvmURHGLikaVwx4R7TtzccSzkPaAgnqGI/69yfZQoU9au5NebfilGYhBSUQrr/b1Wj0mBX1UAg14Z+Cz9AOjG6of2HnvQ4sNSQskdKCyh2QD+MfdzSAffY3YCiFpo3XnMpoFp4qrVSCNFh99/ccucTsVg9mhTXGfSWnZ0ZiFUDJUVjFzm+goArS3IcUnlSsQKBgQDgIzq3ScvqoxCSH27Z/AZ9c/lGznsjQBn6yiiam6/ZdYDZlZLRL+b8cHzYDAjQRpK2iLms3gDc7fX8o/orsuYkwP108uuJ28SQlQbY96R75okiKR+5dKR1CVMkYzcsv7mGg5OeqEa50un+ffH/e9DnTzqN4L5E7cNR0jier+4v/wKBgQCr8sOzwLyOdYYG6i/LG9Z/k8mjbqUsVhajoV4pdMSOPDqn5GrAUZ1QhsSyOnrij/MUTmRT4i+flEotExS06TQT8QjW4qEYjCqK3WMon/DD4kdzniKVSrJ4xkg/YGDx5Yo3UJJvkw1qLwv2L+4BuFj1lohcFHPINZ+4cTckdifJ2wKBgD6heYHIDEQnhrTeNbKR2xppMsnXXs9N1TSgEtKJGI1SaUvjoN/1W71EjY4tZrUUU2DQOdoVOvaBRBBxnbFiTy8MAocQbkLad0XTbtNn971rgPxbs3K2JlJR5bqwQrWtaWEuGSznZsP8LMihVuMGLSzFld4ZY/GM4txVOt8U2CDvAoGAZs/HOGmb1MpskyHf5eAFR08El9YGqRXof3pzJPKOvEVDBTRMqCWknIuYfMD+zQ0pWRDuaEGsHAy8tWrdTLbLzsimcmYb0OOuZE2vhpDrkxRviLAbGY0KXbChblOgY8LN+/kPNeuFb+IlktRhyWGCv4V8jyIjgKifkdcQE5sae1UCgYEA2UL67oEe3cvDCKoQZeu28ieinRxPuqK+4f3eVQuR81rnvoN7RHcmTLWnd3Zjl8H4SnWBrODWRDX7UjTobchMsYDG33Wxxk3iX02V0QuwJM9uFd2mrGBD42wK0sESQVz/rbp88FVAcX5Or2U+0X+ex0CKhX36NBOSRrxJyB6LxZg=";

        // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
        String alipay_public_key ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoNhWdNjR75qo3F/FnTyCEEDnmoUy7TX2Si0L0vMURfbdDAKtg7q8kO2GZnEANluqED2yf6zdXc0soiuSfMSN3GC+8nVRmBpxVJvVTXs8dkxdqEByWSS8qFB+tE2eYtd7A8D0EWzYeZZHVc5PZaqGsUz9QeFqgW/XGpgLokAzzb0rVQKq8o5cQ0HxvRcVZoHOr6/WZlPSko31MXzzr2mhH6aci+I3ofdrDexwwOC6qM4zt7Usz7gTtgU0dzu5pwvNrF+yCpcjPX2d6nAz78OMi8K8xHQYdYL5d34ecbrfjt1bq3j4zFJIRr54xdOjFIjKBC/Ye2Gp3joRvoFW8qRnuwIDAQAB";
        // 创建AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(gateway, appId, merchant_private_key, "json", "UTF-8", alipay_public_key, "RSA2");

        // 创建退款请求
        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        request.setBizContent("{" +
                "\"out_trade_no\":\""+outTradeNo+"\"," +  // 商户订单号
                "\"refund_amount\":\""+subject+"\"," +  // 退款金额
                "\"refund_reason\":\"没有原因\"," +  // 退款原因
                "\"out_request_no\":\"your_out_request_no\"" +  // 退款请求号,保证唯一性
                "}");

        try {
            // 发送退款请求,并获取响应
            AlipayTradeRefundResponse response = alipayClient.execute(request);
            System.out.println( response.getOutTradeNo());
            // 判断退款是否成功
            if(response.isSuccess()){
                int revise = aliPay.revise(outTradeNo);
                if (revise>0){
                    System.out.println("退款成功");
                }
            } else {
                System.out.println("退款失败:" + response.getSubMsg());
            }
        } catch (AlipayApiException e) {
            System.out.println("退款请求异常:" + e.getErrMsg());
        }
        ModelAndView modelAndView = new ModelAndView();
        List<Order> orders = aliPay.orderAll();
        modelAndView.addObject("ordersList",orders);
        modelAndView.setViewName("success");
        return modelAndView;
    }
}

实体类:

package com.cskt.springboot_aliyun.domian;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author 26846
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true) //链式
public class Order {
    /**
     * 商户订单号
     */
    private String out_trade_no;
    /**
     * 订单名称
     */
    private String subject;
    /**
     * 付款金额
     */
    private String total_amount;
    /**
     * 状态
     */
    private String state;
    /**
     * 超时时间参数
     */
    private String timeout_express = "10m";
    /**
     * 产品编号
     */
    private String product_code = "FAST_INSTANT_TRADE_PAY";
}

项目结构:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值