Springboot整合支付宝沙箱支付

2.配置说明

要记住这几个重要的配置

appId 这个是appId
privateKey 商户私钥
publicKey 支付宝公钥, 即对应APPID下的支付宝公钥
notifyUrl 支付成功后异步回调地址(注意是必须是公网地址)
returnUrl #支付后回调地址
signType 签名类型 一般写 RSA2
charset utf-8
format json

#网关地址 在支付宝开发平台复制拷贝下来
gatewayUrl : https://openapi.alipaydev.com/gateway.do
logPath: F:\ 日志路径

(1)在官网注册账户,获取appId,公钥,私钥等信息

(2)引入依赖

(3)编写支付宝配置类

(4)复制官网的生成订单信息代码,导入到自己的项目中

(5)编写支付的业务代码,调用controller接口实现支付

java 复制代码
@RequestMapping(value = "/pay", method = RequestMethod.GET)
    // http://localhost:8888/alipay/pay?subject=支付&totalAmount=1&traceNo=1758852777989246976
    public String pay(AliPayDTO aliPayDTO) throws AlipayApiException {
        // 随机一个订单id
//        Random random = new Random();
//        int tradeNo = random.nextInt(1000000);
        //获取订单id
        Long tradeNo = Long.parseLong(aliPayDTO.getTraceNo());
        // 设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        // 同步回调地址
         alipayRequest.setReturnUrl(returnUrl);
        // 异步回调地址
        alipayRequest.setNotifyUrl(notifyUrl);
        // 订单过期时间
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime plusOneMinute = now.plusMinutes(1L);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String expireTime = plusOneMinute.format(formatter);

        alipayRequest.setBizContent("{\"out_trade_no\":\"" + tradeNo + "\","
                + "\"total_amount\":\"" + aliPayDTO.getTotalAmount() + "\","
                + "\"subject\":\"" + aliPayDTO.getSubject() + "\","
                + "\"body\":\"" + aliPayDTO.getBody() + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\","
                + "\"timeout_express\":\"1m\","                 // 设置订单过期时间为1分钟
                + "\"time_expire\":\"" + expireTime + "\"}");   // 设置订单过期时间
        return alipayClient.pageExecute(alipayRequest).getBody();
    }

    @PostMapping("/notifyUrl")  // 注意这里必须是POST接口
    public String payNotify(HttpServletRequest request) throws MQClientException {
        if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
            System.out.println("=========支付宝异步回调========");



            Map<String, String> params = new HashMap<>();
            Map<String, String[]> requestParams = request.getParameterMap();
            for (String name : requestParams.keySet()) {
                params.put(name, request.getParameter(name));
            }
            System.out.println("交易名称: " + params.get("subject"));
            System.out.println("交易状态: " + params.get("trade_status"));
            System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
            System.out.println("商户订单号: " + params.get("out_trade_no"));
            System.out.println("交易金额: " + params.get("total_amount"));
            System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
            System.out.println("买家付款时间: " + params.get("gmt_payment"));
            System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
            Long orderId = Long.parseLong(params.get("out_trade_no"));
            //修改订单状态
            orderService.updateOrder(orderId);

            Order order = ordermapper.queryById(orderId);
            //扣减数据库库存
            productMapper.updateStock(order.getProduct_id(), order.getQuantity());
            //增加积分,自动执行
            //释放锁  redison

        }
        return "success";
    }
相关推荐
儿时可乖了12 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
ruleslol13 分钟前
java基础概念37:正则表达式2-爬虫
java
xmh-sxh-131430 分钟前
jdk各个版本介绍
java
XINGTECODE43 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
天天扭码1 小时前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶1 小时前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺1 小时前
Spring Boot框架Starter组件整理
java·spring boot·后端
小曲程序1 小时前
vue3 封装request请求
java·前端·typescript·vue
凡人的AI工具箱1 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
陈王卜1 小时前
django+boostrap实现发布博客权限控制
java·前端·django