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

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

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

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

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

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

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

计算机视觉讲座PPT分享

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

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

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

数据分析基础之《pandas(8)—综合案例》

一、需求 1、现在我们有一组从2006年到2016年1000部最流行的电影数据 数据来源&#xff1a;https://www.kaggle.com/damianpanek/sunday-eda/data 2、问题1 想知道这些电影数据中评分的平均分&#xff0c;导演的人数等信息&#xff0c;我们应该怎么获取&#xff1f; 3、问题…

SpringCloud-高级篇(二十二)

前面解决了消息的可靠性、消息的延迟问题&#xff0c;消息的堆积的问题&#xff0c;下面研究mq可用性、并发能力问题&#xff0c;这就需要mq集群来实现了 一&#xff1a;集群分类 &#xff08;1&#xff09;普通集群 创建一个节点&#xff1a; 8082、8083也可以看到这个队列&…

红队打靶练习:DEVGURU: 1

目录 信息收集 1、arp 2、nmap 3、dirsearch WEB web信息收集 8585端口 漏洞利用 提权 系统信息收集 横向渗透 get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:50:56:20:80:1b, IPv4: 192.168.10…

14.盔甲?装甲?装饰者模式!

人类的军工发展史就是一场矛与盾的追逐&#xff0c;矛利则盾坚&#xff0c;盾愈坚则矛愈利。在传统的冶金工艺下&#xff0c;更坚固的盾牌和盔甲往往意味着更迟缓笨重的运动能力和更高昂的移动成本。从战国末期的魏武卒、秦锐士&#xff0c;到两宋之交的铁浮图、重步兵&#xf…

HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-时间管理

目录 一、时间管理1.1、时间接口1.2、代码分析&#xff08;待续...&#xff09; 一、时间管理 时间管理以系统时钟为基础&#xff0c;给应用程序提供所有和时间有关的服务。系统时钟是由定时器/计数器产生的输出脉冲触发中断产生的&#xff0c;一般定义为整数或长整数。输出脉…

关于推挽电路的说明

推挽电路,是一个我们时常遇到的一种电路,或者听过的一种电路,比如设置单片机的输出模式时,就有推挽输出这种选项。 由双极型晶体管即三极管组成的推挽电路基本上就是下图所示。 而推完的路径无非就是两种,如图示: 具体的输入输出原理就不说了,这里有一个及其关键的问题…

【JavaScrpt 漫游】【015】JSON 对象简记

文章简介 本文为【JavaScript 漫游】专栏的第 015 篇文章&#xff0c;主要是对 JS 语言中的 JSON 对象的知识点进行了简要记录。 JSON 格式JSON 对象JSON.stringify()JSON.parse() JSON 格式 JSON 格式&#xff08;JavaScript Object Notation 的缩写&#xff09;是一种用于…

【原创 附源码】Flutter安卓及iOS海外登录--Google登录最详细流程

最近接触了几个海外登录的平台&#xff0c;踩了很多坑&#xff0c;也总结了很多东西&#xff0c;决定记录下来给路过的兄弟坐个参考&#xff0c;也留着以后留着回顾。更新时间为2024年2月8日&#xff0c;后续集成方式可能会有变动&#xff0c;所以目前的集成流程仅供参考&#…

Linux第49步_移植ST公司的linux内核第1步_获取linux源码

已知ST公司的linux源码路径&#xff1a; /home/zgq/linux/atk-mp1/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0 1、创建“my_linux”目录 打开第1个终端 输入“ls回车” 输入“cd linux/回车”&#xff0c;切换…