springboot调用支付宝沙箱扫码支付
2021/7/11 23:06:02
本文主要是介绍springboot调用支付宝沙箱扫码支付,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
springboot调用支付宝沙箱虚拟支付,测试版
1.在支付宝官网填写申请沙箱个人相关信息
支付宝官网:https://openhome.alipay.com/platform/home.htm
进入官网,找到沙箱,在这需要需要用到自己的APPID,密钥私钥,密钥私钥需要配置,还是很简单的
这个就是我们的虚拟支付宝沙箱,可以直接扫码下载
这里面就是自己的信息,金额可以随意充值,不过有最大限制,最大可充值9999999.99元
2.pom引入支付宝jar
<!--支付宝沙箱--> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.0.0</version> </dependency>
3.创新对象的支付页面以及类和方法
配置类
package com.wyh.config; import java.io.FileWriter; import java.io.IOException; /** * @program: SpringBoot_01 * @description: 支付宝沙箱配置 * @author: wyh * @createDate: 2021-06-14 20:17 **/ public class AlipayConfig { // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号,开发时使用沙箱提供的APPID,生产环境改成自己的APPID public static String APP_ID = ""; // 商户私钥,您的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:\\"; /* * @Author 魏一鹤 * @Description 写日志,方便测试(看网站需求,也可以改成把记录存入数据库) * @Date 20:18 2021/6/14 * @Param sWord 要写入日志里的文本内容 * @return */ 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(); } } } } }
控制器controller
package com.wyh.controller; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.wyh.config.AlipayConfig; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @program: SpringBoot_01 * @description: 支付宝沙箱控制器 * @author: wyh * @createDate: 2021-06-14 20:24 **/ @Controller public class PayController { @ResponseBody @RequestMapping("/pay") public static 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(); } @RequestMapping("/payJsp") public String toTest(){ return "pay"; } }
页面
<%-- @program: SpringBoot_01 @description: @author: wyh @createDate: 2021-06-14 20:26 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <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> </body> <script> </script> </html>
4.进行测试
启动项目,输入:http://localhost:8080/payJsp
下单后调整到支付页面如下
然后用我们下载的沙箱支付宝登录扫码支付
支付完成后会404,因为还没配置支付成功后的操作,今天先简单分享,后面如果测试出什么再来补充
这篇关于springboot调用支付宝沙箱扫码支付的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞