Spring Boot 对接支付宝实战

【2024】springboot支付宝沙箱支付详细步骤(一篇搞定) 进入最开始的沙箱管理界面,点击自定义密钥,点击设置并查看,我们选择的是公钥模式在这里将上一步骤生成的应用公钥填进来得到支付宝公钥这另一个密钥,记住并保存这个支付宝公钥至此,我们沙箱环境的配置和基本参数都已经获取到。 阅读详情

最近需要对接支付宝的支付接口,官方文档写得内容有点分散,整理了一下发布出来,用作记录,同时也希望对不了解情况的人有所帮助,这里以电脑端的网页支付为例。

开发主要分为四个步骤:

一、生成私钥公钥

二、建立应用

三、沙箱环境

四、接口开发

一、生成私钥公钥

生成密钥的官网文档:网页&移动应用学习路径 | 网页&移动应用

官方文档讲得已经很详细,按照步骤来即可,记得保存好公钥与私钥,下面需要用到

二、建立应用

1. 首先进入蚂蚁金服开放平台的首页,通过支付宝账户登录,登录的时候要选择一个身份,这个选自研开发者吧,反正后面可以拓展。

蚂蚁金服开放平台:open.alipay.com/platform/home.htm

2. 在蚂蚁金服的首页的头像旁边进入管理中心,然后点击“开发中心”:

然后选择网页和移动应用快速接入支付/行业,注意旁边的“研发服务”,接下来我们会用到:

进入之后选择 支付接入 创建一个用于接入支付的应用:

然后输入相关的信息后点击确认创建:

创建成功之后可以看到如下页面:

可以在功能列表选择自己需要的功能。

开发设置中可以填入自己需要的信息,其中加密方式建议选择RSA(SHA256)密钥,公钥填写之前生成的公钥。

注:输入公钥时验证会失败,但是对我们的开发没有影响,暂时可以不管

填写完之后,提交审核,审核按钮在页面上方= =,审核过程大概一个小时左右吧。实际生产环境的应用需要等待这个审核,但是我们开发可以运用沙箱环境来进行。

三、沙箱环境

什么是沙箱环境?

沙箱环境实际上跟真实的生产环境差不多,开发的时候我们用沙箱进行,测试bug,到了生产环境中,我们只要替换APPID和支付宝网关就可以了,非常方便。

1. 在网页上端,点击开发平台,进入沙箱:

在这里需要注意两个地方:

  • 沙箱环境下的支付宝网关

  • 配置好自己的公钥

2. 沙箱账号

这个账号用来模拟真实的支付宝账户,毕竟我们开发进行支付时不会使用自己的真实支付宝进行支付。后面还有什么沙箱账号以及沙箱工具什么的,就自己看了。

准备得差不多了,接下来说说怎么开发接口

四、接口开发

我用的开发语言是JAVA,工具为IDEA,一个简单的springboot工程

1. 构建一个普通的 Spring Boot 工程,引入支付宝 SDK 的 maven 依赖:

        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.0.0</version>
        </dependency>

2. 新建一个AlipayConfig类,用于配置支付的相关配置:

public class AlipayConfig {

    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号,开发时使用沙箱提供的APPID,生产环境改成自己的APPID
    public static String APP_ID = "你的沙箱APPID";

    // 商户私钥,您的PKCS8格式RSA2私钥
    public static String APP_PRIVATE_KEY = "你自己的私钥";

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String ALIPAY_PUBLIC_KEY = "你自己的支付宝公钥,注意是支付宝公钥,不是应用公钥";

    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问(其实就是支付成功后返回的页面)
    public static String return_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";

    // 签名方式
    public static String sign_type = "RSA2";

    // 字符编码格式
    public static String CHARSET = "utf-8";

    // 支付宝网关,这是沙箱的网关
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

    // 支付宝网关
    public static String log_path = "C:\\";


//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    /**
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @param sWord 要写入日志里的文本内容
     */
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
            writer.write(sWord);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

3. 新建一个controller包,用于存放Action,新建一个PayController类,编写一个用于支付的接口/pay

@RestController
public class PayController {


    @RequestMapping("/pay")
    public void payController(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.sign_type);

        //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
        //付款金额,必填
        String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");
        //订单名称,必填
        String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");
        //商品描述,可空
        String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");

        alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                + "\"total_amount\":\""+ total_amount +"\","
                + "\"subject\":\""+ subject +"\","
                + "\"body\":\""+ body +"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        //若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明
        //alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
        //      + "\"total_amount\":\""+ total_amount +"\","
        //      + "\"subject\":\""+ subject +"\","
        //      + "\"body\":\""+ body +"\","
        //      + "\"timeout_express\":\"10m\","
        //      + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        //请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节

        //请求
        String form="";
        try {
            form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);
        response.getWriter().write(form);//直接将完整的表单html输出到页面
        response.getWriter().flush();
        response.getWriter().close();
    }

4. 新建一个JSP页面,用于模拟提交订单,首先要添加JSP的相关依赖:

 <!-- tomcat 依赖包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <!-- servlet 依赖包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>

配置文件添加 Spring MVC 的映射路径

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

新建一个页面:

页面所在的目录

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>

<form action="/pay" method="post">
    订单号:<input type="text" name="WIDout_trade_no" required><br/>
    订单名称:<input type="text" name="WIDsubject" required><br/>
    付款金额:<input type="text" name="WIDtotal_amount" required><br/>
    WIDbody:<input type="text" name="WIDbody"><br/>
    <input type="submit" value="下单"> <input type="reset" value="重置">
</form>

required保证提交的时候这两项内容非空

5. controller类添加跳转到jsp页面的映射:

    @RequestMapping("/")
    public String toTest(){
        return "index";
    }

6. 测试运行,启动项目,在浏览器输入:http://localhost:8080/

输入订单号,订单名称,金额,就可以跳转到支付宝的支付页面了:

由于这个是沙箱环境,所以这个二维码无法识别,我们选择右边的登录支付宝账户付款

在这里我们输入的是之前沙箱账号和支付密码,输入之后就可以进入到支付页面,与实际中的操作是一样的:

这里跳转回去的页面就是之前AlipayConfig类中的return_url 在这之前需要进入notify_url 接口进行验签,这两个接口就不演示了,先知道这回事,实际开发的时候再进行开发。

微信小程序里怎么用支付宝付款?一个web-view的实战踩坑与完整配置流程 本文详细介绍了在微信小程序中实现支付宝支付的技术方案与避坑指南。通过web-view组件嵌入H5页面的方式,开发者可以绕过微信生态限制,利用支付宝H5支付接口完成交易。文章涵盖后端配置、前端实现、常见问题解决方案及用户体验优化,为开发者提供了一套完整的实战流程。 阅读详情

相关推荐

Spring Boot集成支付宝(最新版SDK)—— H5/网页支付

闲言碎语 最近有朋友咨询第三方支付相关的开发,心血来潮想疾书一番。 正好支付宝有提供沙箱环境,我们个人开发者也可以进行开发、测试,不需要你有企业资质,降低了学习门槛。支付宝的Java SDK换成了较新的版本,我个人觉得新版本的SDK和旧版本相比很简洁,值得更换。 但是现在网上大量的教程,普遍都是老版本SDK,这是因为新版本才刚出来没多久。所以笔者也想趁这个时机,写下此文,希望后来者集成支付宝的时候能少走弯路。 一些重要的网址或文档 1、支付宝支付官网:https://www.alipay.c.

wzy18210825916的博客 1万+

springboot对接支付宝支付接口(详细开发步骤总结)

最近需要对接支付宝的支付接口,官方文档写得内容有点分散,整理了一下发布出来,用作记录,同时也希望对不了解情况的人有所帮助,这里以电脑端的网页支付为例。 开发主要分为三个步骤:一、生成私钥公钥。二、建立应用。三、沙箱环境。四、接口开发 一、生成私钥公钥 生成密钥的官网文档:官网文档 官方文档讲得已经很详细,按照步骤来即可,记得保存好公钥与私钥,下面需要用到 二、建立应用 1.首先进入蚂蚁金服开放平台的首页,通过支付宝账户登录,登录的时候要选择一个身份,这个选自研开发者吧,反正后面可以拓展 2.在

weixin_42023748的博客 5637

Spring Boot 集成支付宝支付功能

内网穿透是一种技术手段,它允许外部网络的用户访问内部网络中的设备或服务。因为本质上调用人家的服务,当请求以后,支付宝需要返回给你信息,这就需要你的地址。这样才能找到我们的接口,我们才能根据他返回的信息做出一些业务处理。这个API接口会返回一个表单页面,让用户去输入帐号密码(也就是谁来支付),成功显示金额等等信息,填写支付密码进行转账。创建支付客户端 设定appid 公钥密钥等等信息,用于知道这个订单谁发出的,钱给到谁的账户。将请求的订单号等等写入支付的请求对象中 并且请求对象设置回调接口以及支付后的接口。

tangjieqing的博客 1094

response.setContentType()的作用及参数

response.setContentType()的作用及参数 response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。 文件扩展名 Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*( 二进制流,不知道下载文件类型) application/octet-stream .tif image/

分享不仅为了他人,同时也为了自己 906

​基于stm32的智能空气加湿器设计(含源代码和Proteus仿真)

课程设计分享

LoongSTUDIO的博客 2929

基于Opencv+Mediapipe的头部姿态检测

在学生课堂专注度检测项目中,可以通过学生头部姿态来确定学生注意力方向,从而判断其是否专注于课堂。

weixin_67879842的博客 2339

springboot实现支付宝支付功能

SpringBoot整合支付宝支付功能

qq_44654974的博客 3701

EMC案例:解决千兆网口RTL8211F EMI问题

摘要:本文分析了Amlogic S812平台OEM项目中RTL8211F-CG千兆网卡EMI辐射超标问题。发现百兆测试时25MHz时钟有3dB余量,但千兆125MHz时钟导致超标。问题根源包括:未关闭PHY芯片悬空CLKOUT引脚、TX/RXCLK端RC位置错误、包地不完整及参考地缺失。解决方案涉及软件关闭无用时钟、优化RC布局、加强包地与打孔、调整共模电感位置,并在HDMI 3.3V加磁珠。关键结论指出千兆网125MHz时钟需严格包地打孔,且RC取值需平衡EMI与通信性能。

电子绿洲的博客 1284

SpringBoot+支付宝支付(沙箱)

SpringBoot实现支付宝沙箱支付

qq_45779998的博客 5785

适配adv7280m相机到rk3588的安卓平台

Kernel-5.10/arch/arm64/configs/firefly_defconfig里面增加配置CONFIG_VIDEO_ADV7180=y。出现一次开不了机器的情况,接调试口发现,在set_fmt里面用s_ctrl对mipi的频率进行设置会出现异常。设备树修改kernel-5.10/arch/arm64/boot/dts/rockchip/13.dts。把MEDIA_ENT_F_ATV_DECODER改回MEDIA_ENT_F_CAM_SENSOR。第二次编译,仅仅刷新boot.img。

chenyq14的专栏 2449

ATR2660:卫星导航高增益低噪声放大器芯片数据手册

中国BDS(北斗卫星导航系统),美国的GPS,俄罗斯的GLONASS和欧盟的GALILEO导航系统应用而专门设计。芯片支持3.3V至5V宽电源供电。采用2级放大器的结构设计,具有28dB高增益和0.85dB的低噪声系数。支持BDS、GPS、GALILEO、GLONASS等L。典型功率增益:30dB@5V;典型输入P1dB:-18dBm@3.3V;典型工作电流:12.7mA@3.3V;宽供电电压范围:3.3V~5V;典型噪声系数:0.85dB;频段的多个卫星导航系统;ATR2660是一颗。

YHPsophie的博客 562

Spring Boot 对接支付宝实战!

最近需要对接支付宝的支付接口,官方文档写得内容有点分散,整理了一下发布出来,用作记录,同时也希望对不了解情况的人有所帮助,这里以电脑端的网页支付为例。开发主要分为三个步骤:一、生成私钥公钥...

公众号:Java后端 660

Cadence SPB16. 6 安装流程

1.首先下载CadenceAllegroSPBorCAD16.6安装包 下载之后运行其中的setup.exe,然后先安装第一项LicenseManager 一直按next或install, 直到被询问license时,单击cancel,然后选是和finish。 2,安装Product Installtion 直接点next跳过这一步 安装完成后,点Exit退出 3.按ctrl+alt+delete打开任务管...

wangjie36的博客 5153

java ,springboot 对接支付宝支付,实现生成付款二维码,退款,查询订单状态等接口

点击查看 才能看钥匙截图写错了。问号可以看默认加密方式。创建配置文件,将沙箱内的信息填写到配置文件。点击沙箱帐号 这里我们就具备所有条件了。根据键值获取配置文件内容方法。

test1372965955的博客 487

OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南——原生“龙虾”OpenClaw快速部署、问题速查与避坑指南

至此,你已经完成了从选购服务器到配置AI大脑的全过程。无论是想在云上养一只7x24小时的“龙虾”,还是在本地体验AI Agent的魅力,上述指南都提供了明确的路径。下一步,就是接入飞书、钉钉或QQ,让你的OpenClaw真正开始“干活”赚钱了 [citation:6]。

冯·诺依曼 991

095、PCIE物理层测试模式:从信号眼图到误码率实战

本文介绍了PCIe物理层测试模式的调试方法和实战经验。重点解析了环回测试、合规性测试和静默模式的应用场景及配置要点,分享了信号眼图分析、误码率测试和接收端验证的实用技巧。作者结合自身调试经历,强调物理层测试对排查信号完整性问题的重要性,建议在量产前进行基础测试,并提醒注意芯片勘误和测试模式切换等易错点。通过合理使用测试模式,可显著提高PCIe链路调试效率,确保物理层稳定可靠。

z534437748的博客 62

Spring Boot 接入支付宝完整流程实战

????推荐大家关注一个公众号????点击上方 "编程技术圈"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!每日英文It has not been the time yet to give ...

程序员小乐 192

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring Boot使用支付宝支付

一、准备工作 我们先做测试版本的,线上的需要注册商家账号 注册地址 https://openhome.alipay.com/platform/appDaily.htm?tab=info 在这里登上自己支付宝账号就行。 设置自己的APPID 设置支付宝网关 设置RSA2秘钥 可以下载沙箱支付宝,功能跟支付宝差不多,就负责支付功能,里面的金额可以随便充值,可以享受一下千万富翁的感觉。 在沙箱账...

qq_42005257的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Spring Boot + Vue实现支付宝扫码支付(沙箱环境)

1. 什么是支付宝扫码支付?        现如今,手机支付已相当普遍,而作为开发人员应该对手机支付操作有所了解。而支付宝接口是支付宝提供的一个接口,用来对接软件应用程序在进行金钱交易使用。然后对于编程爱好者而言,想学习这一点就有点难,因为要想使用支付宝接口,必须前提是使用软件应用程序,软件应用程序需要向支付宝申请,提交一系列资料,这一点是实现不了的。这就对开发者增加了一定的难度,因为产品没有上线,然后需要对接支付宝接口就是很大的问题,所

weixin_46178852的博客 5929

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring Boot 对接支付宝支付

文章目录1. 前期准备2. 编码1.配置类, 也可以写到Spring boot配置文件中进行加更灵活2.支付业务Service3. Controller 省略4. 前端小朋友请求获取到返回的脚本直接执行 1. 前期准备 1.1 注册支付宝开发者账号登录 —> 注册 拉到网站下面自行了解文档: ps : 在手机网站支付文档中官方提供了demo代码下载, 可以下载下来跑跑看 1.2 进入沙箱说明文档 因为我们没有商户资格, 因此要借助沙箱环境模拟一个实际上的测试环境, 待项目上线直接将密钥替换即可

阿锦的博客 677

支付宝沙箱版(什么是支付宝沙箱、配置支付宝沙箱、配置内网穿透、在SpringBoot项目中对接支付宝沙箱、前端代码、支付宝沙箱的退款操作、可能遇到的问题、完整的示例代码)

支付宝沙箱版(什么是支付宝沙箱、配置支付宝沙箱、配置内网穿透、在SpringBoot项目中对接支付宝沙箱、前端代码、支付宝沙箱的退款操作、可能遇到的问题、完整的示例代码)

聂可以的博客 7853

SpringBoot对接支付宝支付

沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境,开发者在沙箱环境中调用接口无需具备所需的商业资质,无需绑定和开通产品,同时不会对生产环境中的数据造成任何影响。可以看到,调用成功后会返回支付链接,下面需要将支付链接转成二维码的形式,下面通过。对接支付宝的扫码支付,需要使用到支付宝提供的SDK,SDK有两种,分别是。(交易关闭),如果未退完所有交易金额,超过有效退款时间后交易状态转为。(交易成功),如果一直部分退款退完所有交易金额则交易状态转为。注意:交易成功后部分退款,交易状态仍为。

小钟不想敲代码 2324

spring boot 支付宝沙箱接口测试

调用支付宝第三方支付接口@TOC 1.蚂蚁金服账号申请及其配置 蚂蚁金服官网:https://open.alipay.com/platform/home.htm 支付包账号登录就好,然后正常注册就可以 注册完成后会跳到一个页面,选择研发服务 沙箱应用:要设置一个应用公钥 用到一个工具叫RSA签名验签工具windows版本的,这个网上一搜全是,也可以找我要,QQ:1391895252 然后打开是...

xnyyh的博客 1257

支付宝沙箱对接完整指南

支付宝沙箱环境,java

qq_51784644的博客 770

spring boot对接支付宝支付

一、准备工作 首先要到蚂蚁金服开发者中心https://openhome.alipay.com/platform/home.htm注册商家账户,并认证。 下载java版的sdk和demosdk&demohttps://docs.open.alipay.com/270/106291/下载地址 将sdk加入到项目中,在项目根路径下新建libs文件夹,将jar包复制进去,我使用...

hui_ss的博客 1539

Java spring boot 实现支付宝支付

一、准备工作: 1、登陆支付宝开发者中心,申请一个开发者账号。 地址:https://openhome.alipay.com/ 2、进入研发服务: 3、点击链接进入工具下载页面: 4、点击下载对应版本的RSA公钥生成器: 5、生成公钥密钥(记录你的应用私钥): 6、在支付宝配置公钥(点击保存): 二、搭建demo 1、引入jia包: <dependency> <groupId>com.alipay.sdk</groupId&gt

风雪留客 1万+
上一篇: 如何防止你的 jar 被反编译?
下一篇: 面试官:讲下Tomcat 组成与工作原理?
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值