当前位置:

首页 > 编程开发 > Java Springboot整合支付宝接口的方法是什么

Java Springboot整合支付宝接口的方法是什么

一、创建支付宝沙箱跳转:支付宝沙箱平台1、进入控制台2、创建小程序,编写名称和绑定商家即可3、返回第一个页面,往下滑进入沙箱4、进行相关的配置,拿到AppID、应用公钥、应用私钥、支付宝公钥5、进入沙箱账号先提前给虚拟账号充值一些钱款(商家账号和普通账号)二、使用内网穿透natapp跳转:natapp1、注册并登陆这里不做展示2、申请一个免费隧道3、下载一个最新的客户端下载后解压到不需要管理员权限的盘符,比如说E盘4、打开所在目录5、在natapp中进行复制然后在创建的start.txt文件中进行修改复制

本文目录

    一、创建支付宝沙箱

    跳转 : 支付宝沙箱平台

    1、进入控制台

    Java Springboot整合支付宝接口的方法是什么

    2、创建小程序,编写名称和绑定商家即可

    Java Springboot整合支付宝接口的方法是什么

    3、返回第一个页面,往下滑进入沙箱

    Java Springboot整合支付宝接口的方法是什么

    4、进行相关的配置,拿到AppID、应用公钥、应用私钥、支付宝公钥

    Java Springboot整合支付宝接口的方法是什么

    5、进入沙箱账号先提前给虚拟账号充值一些钱款(商家账号和普通账号)

    Java Springboot整合支付宝接口的方法是什么

    二、使用内网穿透 nat app

    跳转 : nat app

    1、注册并登陆

    这里不做展示

    2、申请一个免费隧道

    Java Springboot整合支付宝接口的方法是什么

    Java Springboot整合支付宝接口的方法是什么

    3、下载一个最新的客户端

    下载后解压到不需要管理员权限的盘符,比如说E盘

    Java Springboot整合支付宝接口的方法是什么

    4、打开所在目录

    Java Springboot整合支付宝接口的方法是什么

    5、在nat app中进行复制然后在创建的start.txt文件中进行修改

    复制:

    Java Springboot整合支付宝接口的方法是什么

    修改:

    Java Springboot整合支付宝接口的方法是什么

    运行:

    将start.txt修改为bat后运行得到网址

    Java Springboot整合支付宝接口的方法是什么

    三、编写java程序

    1、引入依赖

    
    
        com.alipay.sdk
        alipay-sdk-java
        4.22.110.ALL
    
    
    
        cn.hutool
        hutool-all
        5.8.11
    

    2、编写配置文件

    ## 支付宝配置
    alipay:
      appId: 2021000122615995
      appPrivateKey: 这是在第一步中的应用私钥,在查看里面,特别长的一串
      alipayPublicKey: 这是第一步中的支付宝公钥
      notifyUrl: 这是第二步中运行start.bat后得到的网址 + /alipay/notify

    3、编写实体类(支付需要的参数)

    @Data
    public class AliPay {
        private String traceNo;   // 订单编号
        private double totalAmount; // 总金额
        private String subject;  // 商品名称
        private String alipayTraceNo;
    }

    4、编写支付的配置类

    @Data
    @Component
    @ConfigurationProperties(prefix = "alipay")
    public class AlipayConfig {
    	// 对应配置文件中的内容
        private String appId;
        private String appPrivateKey;
        private String alipayPublicKey;
        private String notifyUrl;
    
    }

    5、编写支付的Controller

    @RestController
    @RequestMapping("/alipay")
    public class AliPayController {
    
        private static final String GATEWAY_URL = "https://openapi.alipaydev.com/gateway.do";
        private static final String FORMAT = "JSON";
        private static final String CHARSET = "UTF-8";
        //签名方式
        private static final String SIGN_TYPE = "RSA2";
    
        @Resource
        private AlipayConfig aliPayConfig;
    
    
        @GetMapping("/pay") // &subject=xxx&traceNo=xxx&totalAmount=xxx
        public void pay(AliPay aliPay, HttpServletResponse httpResponse) throws Exception {
            // 1. 创建Client,通用SDK提供的Client,负责调用支付宝的API
            AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, aliPayConfig.getAppId(),
                    aliPayConfig.getAppPrivateKey(), FORMAT, CHARSET, aliPayConfig.getAlipayPublicKey(), SIGN_TYPE);
    
            // 2. 创建 Request并设置Request参数
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();  // 发送请求的 Request类
            request.setNotifyUrl(aliPayConfig.getNotifyUrl());
            JSONObject bizContent = new JSONObject();
            bizContent.set("out_trade_no", aliPay.getTraceNo());  // 我们自己生成的订单编号
            bizContent.set("total_amount", aliPay.getTotalAmount()); // 订单的总金额
            bizContent.set("subject", aliPay.getSubject());   // 支付的名称
            bizContent.set("product_code", "FAST_INSTANT_TRADE_PAY");  // 固定配置
            request.setBizContent(bizContent.toString());
    
            // 执行请求,拿到响应的结果,返回给浏览器
            String form = "";
            try {
                form = alipayClient.pageExecute(request).getBody(); // 调用SDK生成表单
            } catch (AlipayApiException e) {
                e.printStackTrace();
            }
            httpResponse.setContentType("text/html;charset=" + CHARSET);
            httpResponse.getWriter().write(form);// 直接将完整的表单html输出到页面
            httpResponse.getWriter().flush();
            httpResponse.getWriter().close();
        }
    
        @PostMapping("/notify")  // 注意这里必须是POST接口
        public String payNotify(HttpServletRequest request) throws Exception {
            if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
                System.out.println("=========支付宝异步回调========");
    
                Map params = new HashMap<>();
                Map requestParams = request.getParameterMap();
                for (String name : requestParams.keySet()) {
                    params.put(name, request.getParameter(name));
                    // System.out.println(name + " = " + request.getParameter(name));
                }
    
                String outTradeNo = params.get("out_trade_no");
                String gmtPayment = params.get("gmt_payment");
                String alipayTradeNo = params.get("trade_no");
    
                String sign = params.get("sign");
                String content = AlipaySignature.getSignCheckContentV1(params);
                boolean checkSignature = AlipaySignature.rsa256CheckContent(content, sign, aliPayConfig.getAlipayPublicKey(), "UTF-8"); // 验证签名
                // 支付宝验签
                if (checkSignature) {
                    // 验签通过
                    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"));
    
                }
            }
            return "success";
        }
    }
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Java
    相关文章 更多
    Java单元测试入门:使用JUnit 5编写第一个测试用例
    Java单元测试入门:使用JUnit 5编写第一个测试用例

    面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

    Java变量未初始化报错解析:局部变量与成员变量默认值差异
    Java变量未初始化报错解析:局部变量与成员变量默认值差异

    深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
    Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

    详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

    Java中final与static final常量的定义及初始化规则
    Java中final与static final常量的定义及初始化规则

    深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

    Java抽象方法与接口方法的区别及选型建议
    Java抽象方法与接口方法的区别及选型建议

    深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

    Java实现HTTP请求与JSON解析的完整代码示例
    Java实现HTTP请求与JSON解析的完整代码示例

    本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

    Java递归出现StackOverflowError的原因分析及栈空间优化方案
    Java递归出现StackOverflowError的原因分析及栈空间优化方案

    详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

    Java空指针异常(NPE)的代码排查与修复实例
    Java空指针异常(NPE)的代码排查与修复实例

    针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。