springboot+vue 支付宝支付(沙箱方式,测试环境使用)
准备工作:
1 支付宝沙箱环境的公钥,私钥配置,查询等使用,如果是用自定义的方式,需要下生成公钥,私钥的工具,否则不需要
登录 - 支付宝
小程序文档 - 支付宝文档中心

2 本地测试时,需要内网穿透的工具(如natApp,内网穿透还要配域名,默认的域名不支持外网访问),不然支付宝不能通知本地的程序接口
后端开发
1 pom.xml
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.15</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--支付宝相关--><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.35.79.ALL</version></dependency><!--支付宝SDK的依赖--><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-easysdk</artifactId><version>2.2.0</version></dependency>
</dependencies>
2 yml 配置,特别注意几个公钥,私钥,不要搞叉了
#支付宝配置
alipay:#支付宝应用id,识别应用appId: 2021000148621214#应用私钥,用于对请求进行签名,确保请求的真实性和完整性#appPrivateKey: xxxxx#支付宝的公钥,用于验证支付宝返回的数据的签名,确保数据的真实性和完整性并alipayPublicKey: xxxxxxxx# 支付宝支付结果通知的回调地址,当支付完成后,支付宝会向这个地址发送支付结果通知。(内网穿透配置的地址)notifyUrl: http://lingling.mynatapp.cc/payment/notify# 支付宝支付成功后的页面跳转地址,当支付完成后,支付宝会跳转到这个地址,并携带支付结果参数。returnUrl: http://localhost:8080/payment/index#支付宝沙箱网关地址,开发者在沙箱环境调用 0penAPI 发送 http(s)请求的目标地址,需配置在Alipayclient中并gatewayUrl: http://openapi-sandbox.dl.alipaydev.com/gateway.do#返回数据格式,仅支持jsonformat: json#编码格式,如UTF-8, GBK, GB2312charSet: UTF-8#签名方式signType: RSA2logging:level:root: info
3 yml文件的属性读取配置
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** 支付宝配置类*/
@Component
@ConfigurationProperties(prefix = "alipay")
@Data
public class AlipayConfig {/*** 支付宝应用 ID,用于识别应用*/private String appId;/*** 应用私钥,用于对请求进行签名,确保请求的真实性和完整性*/private String appPrivateKey;/*** 支付宝公钥,用于验证支付宝返回的数据的签名,确保数据的真实性和完整性*/private String alipayPublicKey;/*** 支付宝支付结果通知的回调地址*/private String notifyUrl;/*** 支付宝支付结果的同步回调地址,用户支付成功后,支付宝会向该地址发送一个 GET 请求,开发者需要处理该请求,并根据请求参数中的 out_trade_no 查询订单状态,确认订单是否支付成功。*/private String returnUrl;/*** 支付宝沙箱网关地址,开发者在沙箱环境调用 OpenAPI 发送 http(s) 请求的目标地址*/private String gatewayUrl;/*** 请求和响应的格式,目前只支持 JSON*/private String format;private String charSet;/*** 签名方式*/private String signType;
}
4 订单请求的pojo
import lombok.Data;@Data
public class AliPay {private String traceNo; // 商户订单号private double totalAmount; // 支付总金额private String subject; // 商品名称//private String alipayTraceNo; // 支付宝流水号
}
5 核心类,支付,回调,查询支付状态的接口类
import cn.hutool.json.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.boot.config.AlipayConfig;
import com.boot.entity.AliPay;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** PayController 类用于处理与支付宝支付相关的请求*/
@RestController
@RequestMapping("/payment")
@Slf4j
public class PayController {/*** 注入支付宝配置信息*/@Autowiredprivate AlipayConfig alipayConfig;/*** 模拟 这是 产品页面,个人中心页面,用于支付成功后跳转的页面** @return*/@RequestMapping("/index")public String indexui() {return "产品页面,个人中心页面";}/*** 处理支付请求** @param aliPay 支付信息* @param httpResponse HTTP 响应* @throws IOException 当输出响应出错时抛出*/@RequestMapping("/pay")public void pay(@RequestBody AliPay aliPay, HttpServletResponse httpResponse) throws IOException {System.out.println("alipayConfig = " + alipayConfig);System.out.println("aliPay = " + aliPay);// 1. 创建 Client,通用 SDK 提供的 Client,负责调用支付宝的 APIAlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.getGatewayUrl(),alipayConfig.getAppId(),alipayConfig.getAppPrivateKey(),alipayConfig.getFormat(),alipayConfig.getCharSet(),alipayConfig.getAlipayPublicKey(),alipayConfig.getSignType());// 2. 创建 Request 并设置 Request 参数AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 发送请求的 Request 类request.setNotifyUrl(alipayConfig.getNotifyUrl());request.setReturnUrl(alipayConfig.getReturnUrl());JSONObject bizContent = new JSONObject();bizContent.put("out_trade_no", aliPay.getTraceNo()); // 我们自己生成的订单编号bizContent.put("total_amount", aliPay.getTotalAmount()); // 订单的总金额bizContent.put("subject", aliPay.getSubject()); // 支付的名称bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY"); // 固定配置request.setBizContent(bizContent.toString());// 执行请求,拿到响应的结果,返回给浏览器String form = "";try {form = alipayClient.pageExecute(request).getBody(); // 调用 SDK 生成表单} catch (AlipayApiException e) {e.printStackTrace();}httpResponse.setContentType("text/html;charset=UTF-8");httpResponse.getWriter().write(form); // 直接将完整的表单 HTML 输出到页面httpResponse.getWriter().flush();httpResponse.getWriter().close();}/*** 支付宝异步通知接口,外网要能访问,测试时可以用内网穿透工具的方式* 注意这里必须是POST接口** @param request HTTP 请求* @return 通知处理结果* @throws Exception 当处理通知出错时抛出*/@PostMapping("/notify")public String payNotify(HttpServletRequest request) throws Exception {System.out.println("=========支付宝异步回调========");if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {Map<String, String> params = new HashMap<>();Map<String, String[]> requestParams = request.getParameterMap();for (String name : requestParams.keySet()) {params.put(name, request.getParameter(name));System.out.println(name + "=" + request.getParameter(name));}String tradeNo = params.get("out_trade_no");String gmtPayment = params.get("gmt_payment");String alipayTradeNo = params.get("trade_no");String sign = params.get("sign");System.out.println("tradeNo = " + tradeNo);System.out.println("gmtPayment = " + gmtPayment);System.out.println("alipayTradeNo = " + alipayTradeNo);System.out.println("sign = " + sign);String content = AlipaySignature.getSignCheckContentV1(params);System.out.println("content = " + content);boolean checksignature = AlipaySignature.rsa256CheckContent(content, sign, alipayConfig.getAlipayPublicKey(), "UTF-8");// 支付宝验签if (checksignature) {System.out.println("交易名称:" + params.get("subject"));System.out.println("交易状态:" + params.get("trade_status"));System.out.println("文付宝交易凭证号:" + params.get("trade_no"));System.out.println("商户订单号:" + params.get("out_trade_no"));System.out.println("交易金额:" + params.get("total_amount"));System.out.println("买家在文付宝唯一id:" + params.get("buyer_id"));System.out.println("买家付款时间:" + params.get("gmt_payment"));System.out.println("买家付款金额:" + params.get("buyer_pay_amount"));}// TODO 业务处理 ,如 修改订单状态return "sucess";}return "fail";}/*** 查询支付状态** @param outTradeNo 商户订单号* @return 查询结果*/@GetMapping("/query")public String queryPaymentStatus(@RequestParam("outTradeNo") String outTradeNo) {try {// 1. 创建 AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.getGatewayUrl(),alipayConfig.getAppId(),alipayConfig.getAppPrivateKey(),alipayConfig.getFormat(),alipayConfig.getCharSet(),alipayConfig.getAlipayPublicKey(),alipayConfig.getSignType());// 2. 创建请求对象com.alipay.api.request.AlipayTradeQueryRequest request = new com.alipay.api.request.AlipayTradeQueryRequest();// 3. 设置请求参数JSONObject bizContent = new JSONObject();bizContent.put("out_trade_no", outTradeNo); // 商户订单号request.setBizContent(bizContent.toString());// 4. 执行请求并获取响应com.alipay.api.response.AlipayTradeQueryResponse response = alipayClient.execute(request);// 5. 处理响应结果if (response.isSuccess()) {System.out.println("查询成功");System.out.println("订单号: " + response.getOutTradeNo());System.out.println("交易状态: " + response.getTradeStatus());System.out.println("交易金额: " + response.getTotalAmount());System.out.println("买家支付宝账号: " + response.getBuyerLogonId());System.out.println("交易时间: " + response.getSendPayDate());return "查询成功: 订单号=" + response.getOutTradeNo() +", 状态=" + response.getTradeStatus() +", 金额=" + response.getTotalAmount();} else {System.out.println("查询失败");System.out.println("错误码: " + response.getCode());System.out.println("错误信息: " + response.getMsg());return "查询失败: 错误码=" + response.getCode() + ", 错误信息=" + response.getMsg();}} catch (Exception e) {e.printStackTrace();return "查询异常: " + e.getMessage();}}}
前端随便写的一个测试页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>旅游产品页面</title><script src="https://cdn.jsdelivr.net/npm/vue@2"></script><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><style>body {font-family: Arial, sans-serif;margin: 20px;}.product {border: 1px solid #ccc;padding: 20px;margin-bottom: 20px;border-radius: 5px;width: 300px;}.product h2 {margin-top: 0;}.buy-button {background-color: #4CAF50;color: white;padding: 10px 15px;border: none;border-radius: 5px;cursor: pointer;}.buy-button:hover {background-color: #45a049;}</style>
</head>
<body>
<div id="app"><h1>旅游产品列表</h1><div v-for="(product, index) in products" :key="index" class="product"><h2>{{ product.name }}</h2><p>价格: ¥{{ product.price }}</p><button class="buy-button" @click="buyProduct(product)">购买</button></div>
</div><script>new Vue({el: '#app',data: {products: [{ name: '泰国普吉岛五日游', price: 250 },{ name: '日本东京六日深度游', price: 356 },{ name: '法国巴黎浪漫七日游', price: 129 },{ name: '意大利文艺复兴之旅八日游', price: 500 },{ name: '希腊圣托里尼岛度假四日游', price: 450 },// 更多产品...{ name: '瑞士阿尔卑斯山滑雪之旅十日游', price: 600 },{ name: '埃及金字塔探秘七日游', price: 780 },{ name: '澳大利亚大堡礁潜水探险九日游', price: 156 },{ name: '巴西里约热内卢狂欢节体验六日游', price: 360 },{ name: '加拿大落基山脉自驾游十二日游', price: 98 },]},methods: {buyProduct(product) {const order = {traceNo: `ORDER_${Math.floor(Math.random() * 1000000)}`, // 随机生成订单号totalAmount: product.price, // 产品价格subject: product.name // 产品名称};// 发起 POST 请求到后端 /payment/pay 接口,并发送 JSON 数据axios.post('http://localhost:8080/payment/pay', order, {headers: {'Content-Type': 'application/json' // 设置请求头为 JSON 格式},responseType: 'text' // 确保返回的内容是 HTML 表单}).then(response => {// 将返回的表单直接插入到页面中并提交const formHtml = response.data;const div = document.createElement('div');div.innerHTML = formHtml;document.body.appendChild(div);document.forms[0].submit();}).catch(error => {console.error('支付请求失败:', error);alert('支付请求失败,请稍后再试!');});}}});
</script>
</body>
</html>
相关文章:
springboot+vue 支付宝支付(沙箱方式,测试环境使用)
准备工作: 1 支付宝沙箱环境的公钥,私钥配置,查询等使用,如果是用自定义的方式,需要下生成公钥,私钥的工具,否则不需要 登录 - 支付宝 小程序文档 - 支付宝文档中心 2 本地测试时&…...
安装win11自带linux是报错:WslRegisterDistribution failed with error: 0x800701bcErr
确保系统设置中的“打开win11的子系统”已打钩 管理员身份运行cmd,并输入如下 然后再重启ubantu...
面试经历(一)雪花算法
uid生成方面 1:为什么用雪花算法 分布式ID的唯一性需要保证,同时需要做到 1:单调递增 2:确保安全,一个是要能体现出递增的单号,二一个不能轻易的被恶意爬出订单数量 3:含有时间戳 4&#…...
docker底层原理简述
前言 平时用docker很多,今天深入了解下docker原理层面的实现,包括docker核心概念,文件系统,资源隔离,网络通信等 参考文章: Docker底层原理(图解秒懂史上最全) - 疯狂创客圈 - 博…...
【6D位姿估计】Foundation Pose复现
主要参考 项目仓库README站内其他博文 注意事项 容器化部署不难,主要是部署docker本身会存在一些环境问题,重点关注访问外网的端口需要手动调整至与魔法相同,可以参考: docker部署在启动容器镜像后,需要注意镜像当前…...
TDengine 数据订阅设计
简介 数据订阅作为 TDengine 的一个核心功能,为用户提供了灵活获取所需数据的能力。通过深入了解其内部原理,用户可以更加有效地利用这一功能,满足各种实时数据处理和监控需求。 基本概念 主题 与 Kafka 一样,使用 TDengine 数…...
VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程
Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!࿰…...
高并发下单库存扣减异常?飞算 JavaAI 自动化生成分布式事务解决方案
在电商、旅游等行业业务量激增,高并发下单场景中,传统库存扣减方式弊端尽显。超卖问题因缺乏有效并发控制机制频发,多个订单同时访问库存数据,导致同一商品多次售出,订单无法履约引发客户投诉;同时…...
crictl 遇到报错 /run/containerd/containerd.sock: connect: permission denied
报错内容 crictl --runtime-endpoint unix:///run/containerd/containerd.sock logs CONTAINERID FATA[0000] validate service connection: validate CRI v1 runtime API for endpoint "unix:///run/containerd/containerd.sock": rpc error: code Unavailable de…...
CSS外边距合并现象
外边距合并(Margin Collapsing)是指在文档流中,两个或多个相邻元素的外边距(margin)会合并为一个外边距,其大小会取其中最大的外边距值 当两个相邻的兄弟元素之间没有其他内容(如边框、内边距、…...
《深度神经网络之数据增强、模型保存、模型调用、学习率调整》
文章目录 前言一、数据增强1、什么是数据增强?2、数据增强的实现方法(1)几何变换翻转:旋转:平移: (2)颜色变换亮度调整:对比度调整:色彩抖动: (3&…...
【Java学习笔记】random的使用
random使用方法 使用说明:返回的是(0<n<1)这个范围中的任意带正号的double值 代码实例 public class helloworld{public static void main(String[] args){System.out.println(Math.random());} }生成0-100中的任意数代码示例 public class Main {public …...
Redis的string类型使用
第一步:添加缓存 以若依岗位代码为例 一:首先从redis中查询岗位信息,如果查询到了则直接返回。 二:如果redis中没有数据,则直接从数据库中查询。查询后放到redis并返回 package com.ruoyi.system.service.impl;imp…...
AIGC架构与原理
AIGC(AI Generated Content,人工智能生成内容)的架构与原理 AIGC通过整合数据采集、模型训练、推理服务等模块,结合深度学习与生成对抗网络(GAN)等技术,实现从数据到内容的自动化生成。 一、AIG…...
安全复健|windows常见取证工具
写在前面: 此博客仅用于记录个人学习内容,学识浅薄,若有错误观点欢迎评论区指出。欢迎各位前来交流。(部分材料来源网络,若有侵权,立即删除) 取证 01系统运行数据 使用工具:Live-F…...
Oracle EBS R12.2 汉化
一、前言 在使用oracle ebs时,使用中文会更好的理解整个ebs流程,以下介绍oracle r12中文补丁的方式 如果你的系统除了支持英语外,还支持其他语言,比如中文,那你在下载补丁的时候除了下载Generic Platform版本外&#…...
【Java面试笔记:基础】12.Java有几种文件拷贝方式?哪一种最高效?
在 Java 中,文件拷贝可以通过多种方式实现,不同方式的性能和适用场景有所差异。 1. Java 文件拷贝方式 传统 IO 方式 使用 FileInputStream 和 FileOutputStream,通过循环读取和写入数据实现文件拷贝。 示例代码: try (InputStream is = new FileInputStream("sou…...
互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析
互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析 面试场景 面试官:马架构,您好!欢迎参加我们的面试。今天我们将围绕消息中间件展开讨论,尤其是RocketMQ、RabbitMQ和Kafka。您有十年的Java研发和架构设计经…...
kali安装切换jdk1.8.0_451java8详细教程
kali安装切换jdk1.8.0_451java8详细教程 下载链接: jdk-8u451-linux-i586.tar.gz 链接: https://pan.baidu.com/s/1lpgI0JMfHpZ__RxsF8UoBw?pwdx3z2 提取码: x3z2 解压jdk 首先将下载好的压缩包放在kali虚拟机中,一般是直接拖到桌面 然后cd到压缩包…...
众趣科技X世界读书日丨数字孪生技术赋能图书馆空间智慧化运营
4月23日,是第30个“世界读书日”,不仅是庆祝阅读的日子,更是思考知识传播未来的契机。 图书馆作为主要传播图书的场所,在科技的发展中,图书馆正面临前所未有的挑战,联合国数据显示,全球近30%的…...
Python内置函数-aiter()
Python内置函数 aiter() 用于获取异步可迭代对象的异步迭代器,是异步编程中的核心工具之一。 1. 基本概念 异步可迭代对象:实现了 __aiter__() 和 __anext__() 方法的对象,支持 async for 循环。 异步迭代器:通过 aiter() 获取的…...
Java 实现单链表翻转(附详细注释)
1. 引言 单链表(Singly Linked List)是一种常见的数据结构,在算法和数据结构的学习中占有重要地位。翻转单链表是一道经典的面试题,本文将介绍几种常见的 Java 实现方法,并详细讲解关键步骤的含义。 2. 单链表定义 …...
基于HPC的气候模拟GPU加速实践全流程解析
基于HPC的气候模拟GPU加速实践全流程解析 关键词:气候模型、GPU加速、CUDA编程、性能优化、分布式训练 摘要: 本文针对全球气候模拟中10^12级网格点实时计算需求,提出基于CUDA的并行计算架构。通过改进WRF模式的分块矩阵乘法算法,…...
【初级】前端开发工程师面试100题(一)
本题库共计包含100题,考察html,css,js,以及react,vue,webpack等基础知识掌握情况。 HTML基础篇 说说你对HTML语义化的理解? 语义化就是用合适的标签表达合适的内容,比如<header>表示页眉,<nav>表示导航。这样不仅代码更清晰,对SEO也友好,屏幕阅读器也能…...
大模型框架技术演进与全栈实践指南
一、大模型框架概述 大模型框架是支撑大规模语言模型(LLM)训练、推理和应用开发的核心技术体系,涵盖分布式训练、高效推理、应用编排等全流程。从AlphaGo到GPT-4,大模型框架的进化推动AI从实验室走向工业化落地。据IDC预测…...
【Bug】 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
当你在进行深度学习相关操作时,若因缺少本地的 CA 证书而无法下载资源,下面为你介绍几种解决办法: 方法一:更新 CA 证书 在大多数 Linux 发行版中,你可以使用包管理器来更新 CA 证书。例如,在基于 Debian…...
第七章:Workspace Security
Chapter 7: Workspace Security 从变形金刚到安全防护罩:如何为代理设置权限边界? 在上一章多后端配置,我们学会了让代理像变形金刚一样切换不同环境。但就像超级英雄需要遵守法律一样,代理也需要一个“安全防护罩”来限制它的操…...
【论文阅读】Hierarchical Group-Level Emotion Recognition
【论文阅读】Hierarchical Group-Level Emotion Recognition 摘要1.介绍2.相关工作3.方法4.实验5.分析 摘要 本篇博客参考IEEE于2021年收录的论文Hierarchical Group-Level Emotion Recognition,对其主要内容进行总结,以便加深理解和记忆 1.介绍 1&am…...
(2025最新版)CUDA安装及环境配置
CUDA安装 文章目录 CUDA安装检查本地环境下载CUDA安装包CUDA安装检查是否安装成功 学习深度学习的小伙伴在配置环境的时候必不可少的一件事就是安装CUDA,在这个过程中也是容易踩很多坑,所以这里写一篇教程来帮助新入门的小伙伴快速安装CUDA,减…...
ODC 4.3.4 发布:三大核心功能升级,打造更好的数据开发体验
ODC 是OceanBase提供的企业级数据库协同开发平台,提供了团队协作开发的基础框架,和14种工单任务类型。此次升级的 ODC 4.3.4版本,重点优化了30余项功能,主要聚焦快速上手、配置管理和核心功能中的改进,来为用户打造更高…...
JavaFX 第一篇 Hello World
1、简介 JavaFX 是一个用于构建客户端应用程序的 Java 库,作为 Java 标准库的一部分(JDK 8 到 10),从 JDK 11 开始,JavaFX 将以独立模块发布,将不再包含在 JDK标准库中,他是 Java 应用程序开发的…...
es的range失效
es的range失效的解决方法 问题描述 当我们es使用keyword类型存储数字时,当我们使用range时我们发现range失效的问题,例如以下的用例: 我们创建一个test1的索引test1: 使用_bulk进行批量导入数据: 进行查询我们发现我…...
gem5-gpu教程03 当前的gem5-gpu软件架构(因为涉及太多专业名词不知道该如何翻译所以没有汉化)
Current gem5-gpu Software Architecture 这是当前gem5-gpu软件架构的示意图。 CudaCore (src/gpu/gpgpu-sim/cuda_core.*, src/gpu/gpgpu-sim/CudaCore.py) Wrapper for GPGPU-Sim shader_core_ctx (gpgpu-sim/gpgpu-sim/shader.h) Sends instruction, global and const m…...
【C++】vector扩容缩容
vector扩容缩容 1 扩容 一般来说,主要是重新分配内存 2 缩容 resize 缩小后,vector 的容量(capacity())可能保持不变,需要显式调用 shrink_to_fit() 来释放内存。 验证代码: #include <vector>…...
【鸿蒙HarmonyOS】深入理解router与Navigation
5. 路由 1.页面路由(router模式) 1.概述 页面路由指的是在应用程序中实现不同页面之间的跳转,以及数据传递。 我们先明确自定义组件和页面的关系: 自定义组件:Component 装饰的UI单元,页面:即应用的UI…...
手机端touch实现DOM拖拉功能
touch实现DOM拖拉功能 1、面板交互流程图 [ 用户触摸拖动手柄 ]↓ [ 记录起始位置、偏移量 ]↓ [ 实时更新面板 translateY ]↓ [ 手指松开 → 判断释放位置 ]↓ [ 达到恢复条件? → 复位 ]2、详细实现步骤 2.1 初始面板位置 const initialPosition () > tr…...
Discuz!与DeepSeek的AI融合:打造智能网址导航新体验——以“虎跃办公”为例
在数字化办公需求日益增长的今天,高效获取优质资源成为职场人士的核心痛点。传统网址导航网站往往面临信息过载、个性化不足、交互体验单一等问题,难以满足用户精准触达目标资源的需求。本文将深入剖析“虎跃办公”这一基于Discuz!系统构建的网址导航网站…...
【AI】Windows环境安装SPAR3D单图三维重建心得
效果一览 左图为原始单个图像,右图为通过SPAR3D重建后的三维建模,可以看出效果还是不错的。 本地环境配置 系统:Windows 11 专业版CPU:i5-13400F内存:32GBGPU:RTX3060 12GBcuda:11.8conda&…...
关于Agent的简单构建和分享
前言:Agent 具备自主性、环境感知能力和决策执行能力,能够根据环境的变化自动调整行为,以实现特定的目标。 一、Agent 的原理 Agent(智能体)被提出时,具有四大能力 感知、分析、决策和执行。是一种能够在特定环境中自主行动、感…...
【C/S通信仿真】
文章目录 一、实验背景与目的二、实验设计与实现思路1. 设计思想2. 核心代码实现 总结 一、实验背景与目的 在网络编程中,TCP 协议是实现可靠通信的核心。本次实验基于 Windows 平台,使用 WinSock2 库实现客户端与服务器的双向数据传递,模拟…...
Tomcat 8 启动闪退解决方案:版本差异与调试技巧详解
在使用 Tomcat 8 时,启动闪退是常见问题,核心原因多与 JAVA_HOME 环境变量配置、版本特性及启动脚本逻辑相关。本文结合官方文档与专家实践,提供分版本解决方案及调试技巧,适用于开发与运维场景。 一、核心问题:JAVA_…...
【Project】基于spark-App端口懂车帝数据采集与可视化
文章目录 hadoop完全分布式部署hdfs-site.xmlcore-site.xmlmarpred-site.xmlyarn-site.xml spark集群部署spark-env.sh mongodb分片模式部署config 服务器初始化config 副本集 shard 服务器初始化shard 副本集 mongos服务器添加shard设置chunk大小 启动分片为集合 user 创建索引…...
基于ARM+FPGA+DSP的储能协调控制器解决方案,支持国产化
储能协调控制器的作用与设计方案 一、核心作用 实时监测与协调控制 实时采集储能系统电压、电流、温度等参数,监测电池电量状态及充放电功率,动态调整储能与电网、负载的功率交互,保障能源供需平衡15。支持一次调频(AGC&a…...
将天气查询API封装为MCP服务
下面我将展示如何将一个天气查询API封装为符合MCP协议的服务。我们将使用Python实现,包括服务端和客户端。 ## 1. 服务端实现 python # weather_mcp_server.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import Di…...
JSON实现动态按钮管理的Python应用
在开发桌面应用程序时,动态生成用户界面元素并根据配置文件灵活管理是一项常见需求。本文将介绍如何使用Python的wxPython库结合JSON配置文件,开发一个支持动态按钮创建、文件执行和配置管理的桌面应用程序。该应用允许用户通过设置界面配置按钮名称和关…...
基于GA遗传优化TCN-BiGRU注意力机制网络模型的时间序列预测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b(提供软件版本下载) 3.部分核心程序 (完整版代码包…...
MongoDB(docker版)备份还原
docker启动MongoDB docker run -d -p 27017:27017 --name my-mongo -v /mongodb/db:/data/db mongo备份MongoDB 使用mongodump备份数据库时,默认会将备份数据保存在当前工作目录下的dump文件夹中。 docker容器中默认备份在当前工作目录,所以此处指定当…...
[蓝桥杯 2025 省 Python B] 异或和
暴力(O(n^2)): def xor_sum(n, arr):total 0for i in range(n):for j in range(i 1, n):total (arr[i] ^ arr[j]) * (j - i)return total# 主函数 if __name__ "__main__":n int(input())arr list(map(int, input().split()…...
HTTP代理基础:网络新手的入门指南
目录 一、为什么需要了解HTTP代理? 二、HTTP代理的“中间人”角色 三、代理的三大核心类型 四、HTTP代理的5大实用场景 五、设置代理的三种方式 六、代理的优缺点分析 七、如何选择代理服务? 八、安全使用指南 九、未来趋势 结语 一、为什么需要…...
GRE 多层级网络数据处理系统
一、整体架构 多层级网络数据处理系统,从底层硬件中断到上层协议处理,涵盖了数据包的接收、转发、解封装、路由决策和发送全流程。系统采用分层处理和模块化设计,结合了传统Linux网络协议栈与快速路径(Fast Path࿰…...