SSM实现支付宝沙盒支付

文章目录

    • 沙盒支付
      • 准备
      • 配置
      • 测试

沙盒支付

这里用的支付宝的一个沙盒环境,是支付宝提供给开发者测试用的。

下面主要梳理一下,支付功能的实现,其实还是很简单的,因为支付宝都提供好了,我们只要调用接口去传入参数即可。

准备

导入依赖

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

进入支付包开方平台
https://auth.alipay.com/login/ant_sso_index.htm?goto=https%3A%2F%2Fopen.alipay.com%2Fdevelop%2Fsandbox%2Fapp

进入沙盒应用,可以看到一些参数,都是我们要用到的

在这里插入图片描述

接口价签方式我这里用的是自定义的密钥,也可以使用提供的默认密钥。

在这里插入图片描述
在这里插入图片描述

利用支付宝的工具可以生成应用公钥和私钥,公钥复制到自定义设置中,即可生成支付宝公钥。

在这里插入图片描述

配置

ssm项目中添加配置类。

然后将将你的appid,应用私钥,支付宝公钥,复制粘贴到对应参数上。

notify回调函数也就是支付成功的调用路径。

package com.qcby.controller.Config;import org.springframework.context.annotation.Configuration;@Configuration
public class AlipayConfig {// 应用IDpublic static String app_id = "";// 商户私钥public static String merchant_private_key = "";// 支付宝公钥public static String alipay_public_key = "";// 服务器异步通知页面路径,public static String notify_url = "";// 页面跳转同步通知页面路径, 成功跳转public static String return_url = "";// 签名方式public static String sign_type = "RSA2";// 字符编码格式public static String charset = "utf-8";// 支付宝网关public static String gatewayUrl = "";}

也可以写一个properties文件, 然后配置类中导入。

支付宝回调只能回调公网中的地址,所以这里我们需要用到一个工具。

natapp,用于内网穿透,把我们的端口号映射到公网上,可以访问到。

申请一个免费的,映射上你需要的端口号,复制authtoken。
在这里插入图片描述

下载app
在这里插入图片描述

创建一个bat在同目录下,配置上你的authtoken.
在这里插入图片描述

启动:
在这里插入图片描述

可以看到已经给你配置了一个地址映射你本地的端口。

我们将此地址复制,在回调函数中替换我们的端口。

注意:每次启动地址都不一样,所以每次需要重新配置。

然后编写接口即可。

    /*** 订单支付功能* @param request* @param response* @throws IOException*/@ResponseBody@RequestMapping("/pay")public void payController(HttpServletRequest request, HttpServletResponse response) throws IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_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 = getOrderNo();// 付款金额String total_amount = request.getParameter("money");// 订单名称String subject = request.getParameter("order_name");// 商品描述String body = request.getParameter("describe");alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount+ "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");System.out.println("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount + "\","+ "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//请求// String form = "";String s = "";try {// form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单//get方式请求,即生成url链接s = alipayClient.pageExecute(alipayRequest,"GET").getBody();} catch (AlipayApiException e) {e.printStackTrace();}// 将支付表单嵌入HTML并输出到页面// System.out.println(form);System.out.println(s);response.setContentType("text/html;charset=" + AlipayConfig.charset);response.getWriter().write(s);//直接将完整的表单html输出到页面response.getWriter().flush();response.getWriter().close();}

传入我们的订单信息,如订单编号,金额,描述等,可以查看支付宝给的参数解析,参数的规则, setBizContent配置我们的订单信息。

生成我们的表单直接返回或者生成连接,它会自动跳转我们的支付页面,这个页面也不需要我们写,都是支付宝提供好的,我们只需要支付即可。

在这里插入图片描述

测试

这里支付,我们用支付宝给我们提供的虚拟的账户和密码支付即可。
也可以用手机下载沙盒支付宝登录,扫码支付。

在这里插入图片描述

支付成功后,会等几秒自动调用回调函数,返回到我们要跳转的页面。

在这里插入图片描述

支付流程成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/679841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# EventHandler<T> 示例

新建一个form程序&#xff0c;在调试窗口输出执行过程&#xff1b; 为了使用Debug.WriteLine&#xff0c;添加 using System.Diagnostics; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using S…

写的太通透了!大模型自省式 RAG 与 LangGraph 的实践!

本文讲解了自省式 RAG 的基础原理以及基于 LangGraph 的实践演示 自省式 RAG 与 LangGraph 重要链接 关于 Self-RAG 和 CRAG 的教程手册 演示视频 研究背景 由于大多数大型语言模型&#xff08;LLMs&#xff09;通常只针对大量公共数据进行周期性训练&#xff0c;它们往往…

使用python绘制无边框ECG信号-可用于论文插图-小白版

用python绘制一个心电信号 最近在写大论文&#xff0c;由于自己做的是心电信号难免要做一些心电信号的插图&#xff0c;然后在写论文的时候有的时候要用真实信号有的时候需要用到示意图&#xff0c;这里面的其他部分使用Visio绘制的&#xff0c;但是前面的心电信号部分&#x…

视觉slam十四讲学习笔记(三)李群与李代数

1. 理解李群与李代数的概念&#xff0c;掌握 SO(3), SE(3) 与对应李代数的表示方式。 2. 理解 BCH 近似的意义。 3. 学会在李代数上的扰动模型。 4. 使用 Sophus 对李代数进行运算。 目录 前言 一、李群李代数基础 1 群 2 李代数的引出 3 李代数的定义 4 李代数 so(3…

HAproxy+Mycat集群+MySQL主从组成高可用性方案架构图

如果还担心 HAproxy 的稳定性和单点问题&#xff0c;则可以用 keepalived 的 VIP 的浮动功能&#xff0c;加以强化&#xff1a;https://blog.csdn.net/gaofenglxx/article/details/118883060

如何在项目初始化时就将数据字典中的数据加载到Redis中

要在项目初始化时将数据字典中的数据加载到Redis中&#xff0c;可以按照以下步骤进行操作&#xff1a; 引入Redis依赖&#xff1a; 在项目的构建文件&#xff08;比如pom.xml&#xff09;中添加Redis相关的依赖项&#xff0c;以便能够使用Redis客户端。 连接Redis服务器&#…

re:从0开始的CSS之旅 12. 轮廓、阴影、圆角

1. 轮廓 outline 设置元素的轮廓 使用方式与border一样。不同在于不影响盒子的大小 2. 阴影 box-shadow 设置元素的阴影 box-shadow: 30px 30px 50px 5px rgba(0, 0, 0, .5); 第一个值&#xff1a;设置阴影水平距离 第二个值&#xff1a;设置阴影垂直距离 第三个值&#xff…

推荐在线图像处理程序源码

对于喜爱图像编辑的朋友们来说&#xff0c;Photoshop无疑是处理照片的利器。然而&#xff0c;传统的Photoshop软件不仅需要下载安装&#xff0c;还对电脑配置有一定的要求&#xff0c;这无疑增加了使用的门槛。 现在&#xff0c;我们为您带来一款革命性的在线PS修图工具——基…

探索嵌入式系统的未来发展趋势

嵌入式系统是一种专门设计用于特定应用领域的计算机系统&#xff0c;它通常被嵌入到更大的设备中&#xff0c;以执行特定的任务。随着科技的不断发展&#xff0c;嵌入式系统的未来发展趋势将受到多方面的影响&#xff0c;包括技术进步、市场需求和应用场景的拓展等。以下将从多…

LeetCode每日一题——993. Cousins in Binary Tree

文章目录 一、题目二、题解 一、题目 Given the root of a binary tree with unique values and the values of two different nodes of the tree x and y, return true if the nodes corresponding to the values x and y in the tree are cousins, or false otherwise. Two…

交易中的胜率和盈亏比估算

交易中的胜率和盈亏比估算 1.定义 胜率是指交易者在一定时间内成功交易的次数占总交易次数的比例。例如&#xff0c;如果交易者在10次交易中成功了6次&#xff0c;那么他的胜率就是60%。 盈亏比是指交易者每笔成功交易的盈利与每笔失败交易的亏损之间的比例。例如&#xff0…

泽攸科技ZEM系列台扫助力环境科研创新:可见光催化抗生素降解的探索

环境污染和能源短缺是当今人类社会面临的最严重威胁之一。为了克服这些问题&#xff0c;特别是在污水处理过程中&#xff0c;寻找新的技术来实现清洁、高效、经济的发展显得尤为重要。在各种工业废水中&#xff0c;抗生素的过量排放引起了广泛关注。抗生素的残留会污染土壤、水…

深入探索Flex布局:从基础到实战,附带抖音解决方案案例分析

文章目录 简介盒子模型概念版心居中 Flex布局组成主轴对齐方式侧轴对齐方式修改主轴方向弹性伸缩比弹性盒子换行行对齐方式案例-抖音解决方案效果图案例分析参考代码 领取完整源码 简介 在阅读本文之前&#xff0c;请确保你已经掌握CSS基本语法、常用属性以及CSS选择器。 盒模…

itext中通过freemark生成的pdf时,居中样式text-align: center没有效果

itext不支持css3的语法&#xff0c;结果css2的部分语法也可能不支持&#xff0c;比如text-align: center&#xff0c;一直没有效果&#xff0c;后来想到用table的方式 原始的代码&#xff1a; css 的 container中添加 text-align: center; <div class"container&quo…

12.08 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 1、校招&#xff5c;极智嘉2024届秋招补录全面开启&#xff08;内推&#xff09; 校招&#xff5c;极智嘉2024届秋招补录全面开启&#xff08;内推&#xff09; 2、校招&#xff5c;零跑汽…

【力扣每日一题】力扣144二叉树的前序遍历

题目来源 力扣144二叉树的前序遍历 题目概述 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 思路分析 二叉树的前序遍历可以使用递归或迭代方式实现。 代码实现 java实现 java使用递归实现 public class Solution {List<Integer> res new A…

探索XGBoost:多分类与不平衡数据处理

导言 XGBoost是一种强大的机器学习算法&#xff0c;广泛应用于各种分类任务中。但在处理多分类和不平衡数据时&#xff0c;需要特别注意数据的特点和模型的选择。本教程将深入探讨如何在Python中使用XGBoost处理多分类和不平衡数据&#xff0c;包括数据准备、模型调优和评估等…

计算机视觉讲座PPT分享

最近在电子工业出版社做的《计算机视觉入门路线图》讲座的部分PPT。 主要介绍了计算机视觉的学习基本路线。

推荐系统|行为序列_用户行为序列建模、Din模型和SIM模型

文章目录 用户行为序列建模Din模型Din模型的缺点 用户行为序列建模 物品ID通过Embedding将会得到一个向量&#xff0c;性质差不多的向量在空间中也会处于差不多的位置&#xff0c;可以用取平均方式得到一个综合所有向量的向量。 取平均后可以作为代表用户的一个特征。 以上的…