SpringBoot+支付宝:实现沙箱支付全过程

简介: SpringBoot+支付宝:实现沙箱支付全过程

1、引入所需依赖

1. <!--支付依赖-->
2. <dependency>
3. <groupId>com.alipay.sdk</groupId>
4. <artifactId>alipay-sdk-java</artifactId>
5. <version>4.22.113.ALL</version>
6. </dependency>

2、登录支付宝开放平台,进入个人沙箱环境,这些信息需要填写在下面的配置类中。

3、查看密钥信息

 

4、编写一个工具类,相关信息在个人沙箱环境里面都有,自行修改(相关密钥可以点击系统默认密钥进行查看)

1. public class AlipayConfig {
2. /**
3.      * 支付宝网关地址
4.      */
5. public static String serverUrl = "https://openapi.alipaydev.com/gateway.do";
6. /**
7.      * appId
8.      */
9. public static String appId = "2021000119697439";
10. /**
11.      * 应用私钥 后期替换成自己的私钥
12.      */
13. public static String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC3PgI3lAW40dRwevBzwxdUkKGhjVIX9K4zuUmCeF5PhWo11LGTmhjrTpBEq/BiBa/v1yZl+3/3/eU14aGxwE86qMnUEiweNVIclp9Gh2o85RiB2EGXyAi5wvTdwziZ50P2s/5VFzyhjjU/Pj6XKg+SShc1gyFsEfttGnMsvP3tm44XsxtRFvTZBqGV90sZ61H9DzRVxHf4dfhnRLJvRFVYC+2XdGFwP+1+UOhCdjOJla6wkrz9B0kvXB1XdAdJHuXTvisTRgBDnc8lY2tyA9RIfAceqHFHub1x0Q0V2HDgYcd2EllGCDP/MLeLAKbGC4H+bh6w57h3NkhbhA/ER8adAgMBAAECggEAGpWgdLfA7MNkcr0jTWgsZlRlXq7GDjutWkuzYn5cEGVmt1CYQrXEj77iJ1Ral54DnGQ2ae1G74+iRWLq+4qpXV8Vj3xk4Ujo6q6Styr1l0DsozyeJ3UlWVcNSybGMXCDoYyxey7KgtZg9kVf5PVi0JypqKgjNfz0YLU6kdIUouYbmz7HPBRQSV3mLclAUiJmbiVa7g6luV/PyNJFh3c1PITvsXah6gvOmOuARn3ZadHvS546AbLYmerVI0c3/Y7HOW5XyLnR+EzzqA+PXtXAV/RV67ywhb9KSEJBevsbPe83ZQkzkoXhKZFNhQb5QdmDXmNA6cRZ1hW6ohuhcQKBgQDlwzuAA3MHpQ3MLfyuUUD1o2fvQ9hymURm4BGzHrPlSz+3yWIuNyUKCfbtslqdGeHPXTlOaKtBiS2wrVbv/JaNA/Elzl+BZgkNCcb3tnsha7e522syHdgapdPrXyGSDN69mIZsWoRJQlGpRISJnd75XClZf3nGlr4g4hV9+dS3rwKBgQDMKtJUSxlb8rf9NZ/xOmklcLxBgFGo39noVS+FDz5O1P1o3I1LSHF+vOTkkqLTO4TrEtr2q0Ijb/xj65wX42i0Av2t63fbMEAkYTatih8Pve9LtX1G6nv2Fw9U/ZDOUKRdhPO2GDG59SifXEgDI4eV29AZhh4oqwRH7wz5neitcwKBgQCg2SR2YfPNjkcygZ87ibaoQFUqs5x73cB9JLA/bWcTRrK8v0b0g7ZyaLdtgEbfZJcozGKp+ayqnJZX8YHDUFk1L2VKykciF4SOlCGumRlqNDbS7kEFPM9lGGJbjKW70Ta+FGFGybeCceMpVMZUcSj/+P0Zopxl4nIIIz5YiuXYEQKBgDmC8n6WLQ2OoK9uFKDiIE5QpGcbG2WjsQFWRa2IrreMHdoVDqQfQwE9eoi8matA/98sD4wej+HloMYQz4aXI55ZnVYJl1iiDd9xlvJpjvhjO24rMJ/yW3rl4gbB6rGDW9mQIwqvZAqK+adyWkKwFnhrVAJsmkBAdFNDDneeOLXrAoGBAOEsOJ76yaxY3RGrvWnGm7aA/tyVLNtpz3Hj0T/zTN24bsKm5TwuobVq5jVvQ2UagBQRlGAl3mP6XiVv0NclDPRupSCOjhkbLlMw+B6rE5uV7HkxtrtHsSFaruehRI94K6tbGNQJdImqWjHKBIjqoHr8snLk41vXxxwyK2G38puD";
14. /**
15.      * 发送数据的格式 目前只能为json
16.      */
17. public static String format = "json";
18. /**
19.      * 设置字符集编码 目前只能为utf-8
20.      */
21. public static String charset = "utf-8";
22. /**
23.      * 支付宝公钥 后期替换成自己的支付宝公钥
24.      */
25. public static String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh2yYUlCpO6tNqNa+svqMJfnl1Ax9LrOAf8bNxexVPIJh6LF77ca4qVPpuYTbvQNuGEMDSP35uZ3g+Vch3WasIaYy/D36NfOVjPzrB2b3cXKbUSEjgRawnx15oyBj687tOKEJcPO9okGUgYr2/HkVQPVU0IpFZVRfcRk8BbadS7AOz38RtRYteY1bu+YVFWqf0O0WTILHAZeDpLqENhgHjmj1ATKdCPel0K2US/uCSe6rPJgclFHplEBKI9ysfTKfhEKNhj56w6CrG7XQ1MQHZI1V7rR2busYRntoHh/DB6CZSiv/X5L8+TxZvAtUCn+z6Ns+8e3LfG1/bq59OU0wIDAQAB";
26. /**
27.      * 支付宝签名 目前是 RSA2
28.      */
29. public static String signType = "RSA2";
30. public static AlipayClient getAlipayClient() {
31. // 获得初始化的AlipayClient
32. return new DefaultAlipayClient(AlipayConfig.serverUrl, AlipayConfig.appId,
33.                 AlipayConfig.privateKey, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.publicKey,
34.                 AlipayConfig.signType);
35.     }
36. }

4、编写controller,模拟请求接口

1. package com.lili.controller;
2. 
3. import com.alipay.api.AlipayClient;
4. import com.alipay.api.domain.AlipayTradePayModel;
5. import com.alipay.api.request.AlipayTradePagePayRequest;
6. import com.lili.util.AlipayConfig;
7. import org.springframework.web.bind.annotation.PathVariable;
8. import org.springframework.web.bind.annotation.RequestMapping;
9. import org.springframework.web.bind.annotation.RequestParam;
10. import org.springframework.web.bind.annotation.RestController;
11. 
12. import javax.servlet.http.HttpServletResponse;
13. import java.io.IOException;
14. 
15. /**
16.  * @author QiJingJing
17.  * @since 2022/12/31
18.  */
19. @RestController
20. @RequestMapping("alipay")
21. public class PayController {
22. /**
23.      * 支付请求接口
24.      */
25. @RequestMapping("pay/{orderId}/{cost}") // 订单id(不能重复)和消费金额
26. public void pay(@PathVariable String orderId,@PathVariable String cost, HttpServletResponse response){
27. try {
28. AlipayClient alipayClient = AlipayConfig.getAlipayClient();
29. // 设置请求参数
30. AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
31. AlipayTradePayModel model = new AlipayTradePayModel();
32. // 设定订单号 必须要写,且订单号不能重复,目前已经只是做测试,已经写死
33.             model.setOutTradeNo(orderId);
34. // 设置订单金额
35.             model.setTotalAmount(cost);
36. // 订单名字
37.             model.setSubject("书籍订单");
38. // 订单描述
39.             model.setBody("这是一本书籍的消费订单");
40. // 产品码
41.             model.setProductCode("FAST_INSTANT_TRADE_PAY");
42. // 设置参数
43.             alipayRequest.setBizModel(model);
44. // 设置回调地址
45. String url = "http://localhost:8080/alipay/success?orderId="+orderId+"";
46.             System.out.println(url);
47.             alipayRequest.setReturnUrl(url);
48. String result = alipayClient.pageExecute(alipayRequest).getBody();
49.             response.setContentType("text/html;charset=utf-8");
50.             response.getWriter().println(result);
51.         } catch (Exception e) {
52.             e.printStackTrace();
53.         }
54.     }
55. /**
56.      * 支付成功后,回调页面
57.      */
58. @RequestMapping("success")
59. public void success(@RequestParam("orderId") String orderId, HttpServletResponse response) throws IOException {
60.         response.setContentType("text/html;charset=utf-8");
61.         response.getWriter().println("订单Id为"+orderId+"的订单已经成功支付");
62.     }
63. }

5、浏览器访问http://localhost:8080/alipay/pay/23232/509

订单号为23232,金额为509元,回车后可以看到出现以下页面

点击订单详情可以看到我们订单的信息:

6、我们需要登录买家账号进行登录即可

7、登录完成后,会出现以下页面(余额不够的话,可以在上面页面进行充值即可)

8、支付完成后,即可成功跳入我们设置的回调地址

 

 

目录
相关文章
|
3月前
|
安全 Java API
SpringBoot + 事务钩子函数,打造高效支付系统!
【8月更文挑战第9天】在当今快速发展的数字支付时代,构建一个稳定、高效且安全的支付系统是企业数字化转型的关键一步。SpringBoot以其简洁的配置、快速的开发速度以及强大的生态支持,成为了构建支付系统的热门选择。而结合事务钩子函数(Transaction Hooks),则能进一步确保支付流程的完整性、一致性和可维护性。以下,我将分享如何利用SpringBoot与事务钩子函数来打造高效支付系统的技术实践。
101 15
SpringBoot + 事务钩子函数,打造高效支付系统!
|
4月前
|
Java 测试技术 Spring
支付系统15-----支付宝支付,引入支付参数,如何使支付宝的配置信息变成SpringBoot相关的配置信息
支付系统15-----支付宝支付,引入支付参数,如何使支付宝的配置信息变成SpringBoot相关的配置信息
|
5月前
|
测试技术 数据安全/隐私保护 Java
基于SpringBoot+Vue+uniapp的金融支付终端管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的金融支付终端管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
4月前
|
JSON Java 数据格式
支付系统---微信支付15------创建SpringBoot项目
支付系统---微信支付15------创建SpringBoot项目
|
6月前
|
消息中间件 JSON Java
Springboot支付宝沙箱支付---完整详细步骤
Springboot支付宝沙箱支付---完整详细步骤
1338 0
|
6月前
|
Java 开发工具
Springboot接入微信支付、支付宝支付
Springboot接入微信支付、支付宝支付
352 0
|
6月前
|
消息中间件 数据库 RocketMQ
Springboot+RocketMQ通过事务消息优雅的实现订单支付功能
RocketMQ的事务消息,是指发送消息事件和其他事件需要同时成功或同时失败。比如银行转账, A银行的某账户要转一万元到B银行的某账户。A银行发送“B银行账户增加一万元”这个消息,要和“从A银 行账户扣除一万元”这个操作同时成功或者同时失败。RocketMQ采用两阶段提交的方式实现事务消息。
253 0
|
6月前
|
Java 关系型数据库 MySQL
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
143 1
|
17天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
95 62