支付宝沙箱支付

1. 二维码

1.1 什么是二维码:

​ 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

​ 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

请添加图片描述

1.2 二维码的优势:

  • 信息容量大, 可以容纳多达1850个大写字母或2710个数字或500多个汉字
  • 应用范围广, 支持文字,声音,图片,指纹等等…
  • 容错能力强, 即使图片出现部分破损也能使用
  • 成本低, 容易制作

1.3 二维码容错级别:

L级(低) 7%的码字可以被恢复。

M级(中) 的码字的15%可以被恢复。

Q级(四分)的码字的25%可以被恢复。

H级(高) 的码字的30%可以被恢复。

1.4 二维码生成插件 qrious:

​ qrious是一款基于HTML5 Canvas的纯JS二维码生成插件。通过qrious.js可以快速生成各种二维码,你可以控制二维码的尺寸颜色,还可以将生成的二维码进行Base64编码。

​ 官网地址:https://github.com/neocotic/qrious

​ qrious.js二维码插件的可用配置参数如下:
在这里插入图片描述

下面的代码即可生成一张二维码:
<html><head><title>二维码入门小demo</title></head><body><img id="qrious"><!-- 引入二维码生成插件 qrious --><script src="qrious.min.js"></script><script>var qr = new QRious({element:document.getElementById('qrious'),size:250,level:'H',	value:'http://www.oracle.com'});</script></body>
</html>

运行效果:

在这里插入图片描述

1.5 二维码生成网站:

草料文本二维码生成器 (cli.im)

2. 支付宝扫码支付业务介绍及开发、环境配置流程

2.1 支付宝扫码支付业务流程

支付宝扫码支付是商户系统按支付宝支付协议生成支付二维码,用户再用支付宝“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

具体操作步骤:(了解)

**第一步:**创建应用

接入扫码支付能力,需要在开放平台创建一个应用,通过该应用来接入各种能力。

点击如下链接即可开始创建应用:https://openhome.alipay.com/platform/appManage.htm

第二步:添加应用功能

开发者在开发过程中,可以添加自己需要的功能到待申请功能列表。

给应用添加当面付功能,这样就可以在你的应用里使用扫码支付能力。

第三步:配置秘钥

为了保证交易双方的身份和数据安全,需要配置双方密钥。

第四步:沙箱环境调试使用

支付能力直接涉及到交易与资金,为了方便开放者调试支付能力,支付宝已经准备好沙箱环境,包括沙箱环境账号和沙箱版支付宝钱包,这样就可以在沙箱环境调试了。

第五步:签约

在正式使用这些能力的时候,需要在开放平台里进行签约,这时候约定的合同就生效了。也可以代替商户签约。

第六步:上线应用

上线:商户本身应用上线时候,也要把支付宝开放平台的应用上线。

验收:为了确保应用质量,开放平台提供了云验收平台,可以在线验收应用。

第七步:监控应用

在开放平台监控交易情况

应用上线后还可以在开放平台,查看应用运行情况以及交易状态。

2.2 扫码支付具体申请配置流程

2.2.1 登录支付宝开发者平台:

支付宝开放平台 (alipay.com)

在这里插入图片描述

【注意】用自己的支付宝,扫描右边的扫码登录,在支付宝确认登录,即可登录支付宝开发者平台。

2.2.2 登录开发者平台界面如下:

在这里插入图片描述

2.2.3 进入并开通沙箱支付:

点击上图中的控制台进入并下滑找到沙箱:
在这里插入图片描述

(我已经开通过了)点击进入:

查看自己的沙箱账号:
在这里插入图片描述

查看沙箱工具(在手机上下载沙箱工具):
在这里插入图片描述

2.2.4 配置沙箱环境,记录 appid、支付网关

记好自己的沙箱信息:
在这里插入图片描述

支付宝网关地址:https://openapi-sandbox.dl.alipaydev.com/gateway.do

websocket服务地址:openchannel-sandbox.dl.alipaydev.com

2.2.5 配置沙箱环境,配置RSA2公钥

(1)下载支付宝开放平台密钥工具,支付宝提供一键生成工具便于开发者生成一对RSA密钥,可通过下方链接下载密钥生成工具:

密钥工具下载 - 支付宝文档中心 (alipay.com)

(2)启动支付宝开放平台密钥工具:

下载安装后打开:
在这里插入图片描述

(3)用支付宝开放平台密钥工具生成商户的应用公钥和应用私钥,拿商户的应用公钥去换支付宝的公钥,在使用时是用的是商户的应用私钥和支付宝的公钥

在这里插入图片描述

复制应用公钥进支付宝开放平台的沙箱支付内:

在这里插入图片描述

点击查看:
在这里插入图片描述

点击加签变更并将已经生成的商户应用公钥粘贴进入:

在这里插入图片描述

点击保存得到相应的支付宝公钥,然后复制支付宝公钥,记好:

在这里插入图片描述

2.3 支付宝支付SDK

<!-- 支付宝支付所需类库包 如果这个版本不好用请换 3.4.27.ALL 版本-->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.7.110.ALL</version>
</dependency>

2.4 工程搭建与准备工作

创建SpringBoot项目(略):

加入 pom 依赖:

<!-- SpringBoot 的父类依赖 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.14</version><relativePath /> <!-- lookup parent from repository -->
</parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.42</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.4</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><!-- 支付宝支付所需类库包 如果这个版本不好用请换 3.4.27.ALL 版本--><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.7.110.ALL</version></dependency></dependencies>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

创建 application.yml 和 application-dev.yml :

# application.yml
spring:profiles:active: dev # 表示开发环境
# application-dev.yml
server:port: 10086
spring:application:name: springboot-alipay
alipay:appId: 自己的APPIDserverUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.doprivateKey: 应用私钥 publicKey: 支付宝公钥format: jsoncharset: UTF-8signType: RSA2

创建 AlipayApplication 启动类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AlipayApplication {public static void main( String[] args ) {SpringApplication.run(AlipayApplication.class,args);}
}

创建Alipay 配置类 (AlipayConfig) :

import org.springframework.context.annotation.Configuration;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
@Configuration
public class AlipayConfig {@Value("${alipay.appId}")private String appId;@Value("${alipay.serverUrl}")private String serverUrl;@Value("${alipay.privateKey}")private String privateKey;@Value("${alipay.publicKey}")private String publicKey;@Value("${alipay.charset}")private String charset;@Value("${alipay.format}")private String format;@Value("${alipay.signType}")private String signType;@Beanpublic AlipayClient getAlipayClient() {return new DefaultAlipayClient(serverUrl, appId, privateKey, format, charset, publicKey, signType);}
}

AlipayClient创建关键参数说明:

配置参数示例值解释获取方式/示例值
URL支付宝网关(固定)https://openapi.alipay.com/gateway.do
APP_IDAPPID即创建应用后生成获取见上面创建应用并获取APPID
APP_PRIVATE_KEY开发者应用私钥,由开发者自己生成获取见上面配置密钥
FORMAT参数返回格式,只支持jsonjson(固定)
CHARSET请求和签名使用的字符编码格式,支持GBK和UTF-8开发者根据实际工程编码配置
ALIPAY_PUBLIC_KEY支付宝公钥,由支付宝生成获取详见上面配置密钥
SIGN_TYPE商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2RSA2

接下来,就可以用alipayClient来调用具体的API了。alipayClient只需要初始化一次,后续调用不同的API都可以使用同一个alipayClient对象。

沙箱支付环境 (安卓手机下载,无 ios 版)
在这里插入图片描述

3. 支付宝支付二维码生成

3.1 需求分析与实现思路

3.1.1 需求分析

在支付页面上生成支付二维码,并显示订单号和金额

用户拿出手机,打开支付宝扫描页面上的二维码,然后在支付宝中完成支付
在这里插入图片描述

3.1.2 实现思路

商户系统通过AlipayClient调用支付宝预下单接口alipay.trade.precreate,获得该订单二维码图片地址。

构建参数发送给预下单接口 ,返回的信息中有支付url,根据url生成二维码,显示的订单号和金额也在返回的信息中。

预下单接口说明:

关键入参:

参数名称参数说明
out_trade_no商户订单号,需要保证不重复
total_amount订单金额
subject订单标题
store_id商户门店编号
timeout_express交易超时时间

关键出参:

参数名称参数说明
qr_code订单二维码(有效时间2小时)的内容,开发者需要自己使用工具根据内容生成二维码图片

3.2 后端代码实现

3.2.1 生成二维码

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
@RestController
public class AlipayController {@AutowiredAlipayClient alipayClient;@GetMapping("/createNative")public Map createNative(String out_trade_no, String total_fee) {Map<String, String> map = new HashMap<String, String>();//创建预下单请求对象AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//转换下单金额按照元long total = Long.valueOf(total_fee);BigDecimal bigTotal = BigDecimal.valueOf(total);BigDecimal cs = BigDecimal.valueOf(100d);BigDecimal bigYuan = bigTotal.divide(cs);System.out.println("预下单金额:" + bigYuan.doubleValue());request.setBizContent("{" +"    \"out_trade_no\":\"" + out_trade_no + "\"," +"    \"total_amount\":\"" + bigYuan.doubleValue() + "\"," +"    \"subject\":\"【12期免息】华为/HUAWEI P60 Pro 超聚光长焦昆仑玻璃学生补贴双向北斗卫星消息鸿蒙智能手机华为官方旗舰店\"," +"    \"store_id\":\"xa_001\"," +"    \"timeout_express\":\"90m\"}");//设置业务参数//发出预下单业务请求try {AlipayTradePrecreateResponse response = alipayClient.execute(request);//从相应对象读取相应结果String code = response.getCode();System.out.println("响应码:" + code);//全部的响应结果String body = response.getBody();System.out.println("返回结果:" + body);if (code.equals("10000")) {map.put("qrcode", response.getQrCode());map.put("out_trade_no", response.getOutTradeNo());map.put("total_fee", total_fee);System.out.println("qrcode:" + response.getQrCode());System.out.println("out_trade_no:" + response.getOutTradeNo());System.out.println("total_fee:" + total_fee);} else {System.out.println("预下单接口调用失败:" + body);}} catch (AlipayApiException e) {e.printStackTrace();}return map;}
}

3.2.2 接口测试:

http://127.0.0.1:10086/createNative?order_num=LOGTS202311301013019148&total_fee=100

在这里插入图片描述

在这里插入图片描述

3.3前端代码实现

  • A方案:在项目的 resources 下建 static(SpringBoot+vue单体项目)
  • B方案:前后端分离导入页面

我这里用的是单体项目模式

引入插件 qrious.min.js vue.global.js axios.min.js

引入页面及样式

在这里插入图片描述

页面中引入插件:

<!--	 二维码生成插件-->
<script type="text/javascript" src="js/qrious.min.js"></script>
<script src="js/vue.global.js"></script>
<script src="js/axios.min.js"></script>

编写vue异步请求代码:

<script type="text/javascript">const {createApp,toRefs,reactive,computed,toRef} = Vue;createApp({setup(){const data = reactive({out_trade_no : '',total_fee : ''})const createNative = () =>{axios.get('http://127.0.0.1:10086/createNative?order_num=LOGTS202311291501189159&total_fee=100',{}).then(function (res) {data.out_trade_no = res.data.out_trade_nodata.total_fee = res.data.total_fee//二维码qr = new QRious({element:document.getElementById('qrious'),size:250,level:'H',value:res.data.qrcode});})}createNative()return {...toRefs(data),createNative}}}).mount('#app');
</script>

html 页面声明:

<body id="app" ><img id="qrious"/>

前后端联调:

浏览器访问页面,可以取得数据

在这里插入图片描述

4 检测支付状态

4.1 需求分析及实现思路

4.1.1 需求分析

当用户支付成功后跳转到成功页面:
在这里插入图片描述

当返回异常时跳转到错误页面:

在这里插入图片描述

4.1.2 实现思路

我们通过AlipayClient实现对交易查询接口(alipay.trade.query)的调用。

交易查询接口具体参数:

关键入参:

参数名称参数说明
out_trade_no支付时传入的商户订单号,与trade_no必填一个
trade_no支付时返回的支付宝交易号,与out_trade_no必填一个

关键出参:

参数名称参数说明
trade_no支付宝28位交易号
out_trade_no支付时传入的商户订单号
trade_status交易当前状态

我们在controller方法中轮询调用交易查询指定订单号(间隔3秒),当返回状态为success时,我们会在controller方法返回结果。前端代码收到结果后跳转到成功页面。

4.2检测支付状态

4.2.1 后端代码实现

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.entity.ResponseApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
@RestController
public class AlipayController {@AutowiredAlipayClient alipayClient;@RequestMapping("/queryPayStatus")public ResponseApi queryPayStatus(String out_trade_no) {//计数器int x = 0;ResponseApi result = null;while (true) {//调用查询接口Map<String, String> map = null;try {map = queryPayStatus2(out_trade_no);} catch (Exception e1) {/*e1.printStackTrace();*/System.out.println("调用查询服务出错");}if (map == null) {//出错result =  ResponseApi.FAILED("支付出错" + map.get("tradestatus"));}if (map.get("tradestatus") != null && map.get("tradestatus").equals("TRADE_SUCCESS")) {//如果成功result = ResponseApi.SUCCESS("支付成功");//修改订单状态
//                orderService.updateOrderStatus(out_trade_no, map.get("trade_no"));break;}if (map.get("tradestatus") != null && map.get("tradestatus").equals("TRADE_CLOSED")) {//如果成功result = ResponseApi.SUCCESS("未付款交易超时关闭,或支付完成后全额退款");break;}if (map.get("tradestatus") != null && map.get("tradestatus").equals("TRADE_FINISHED")) {//如果成功result = ResponseApi.SUCCESS( "交易结束,不可退款");break;}try {Thread.sleep(3000);//间隔三秒} catch (InterruptedException e) {e.printStackTrace();}//为了不让循环无休止地运行,我们定义一个循环变量,如果这个变量超过了这个值则退出循环,设置时间为5分钟x++;if (x >= 100) {result = ResponseApi.FAILED("二维码超时");break;}}return result;}public Map<String, String> queryPayStatus2(String out_trade_no) {Map<String, String> map = new HashMap<String, String>();AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();request.setBizContent("{" +"    \"out_trade_no\":\"" + out_trade_no + "\"," +"    \"trade_no\":\"\"}"); //设置业务参数//发出请求try {AlipayTradeQueryResponse response = alipayClient.execute(request);String code = response.getCode();System.out.println("返回值1:" + response.getBody());if (code.equals("10000")) {//System.out.println("返回值2:"+response.getBody());map.put("out_trade_no", out_trade_no);map.put("tradestatus", response.getTradeStatus());map.put("trade_no", response.getTradeNo());}} catch (AlipayApiException e) {e.printStackTrace();}return map;}
}

4.2.2 前端代码实现

<!-- total_fee 是以分为单位的总金额 -->
<script type="text/javascript">const {createApp, toRefs, reactive, computed, toRef} = Vue;createApp({setup() {const data = reactive({out_trade_no: '',total_fee: ''})const createNative = () => {axios.get('http://127.0.0.1:10086/createNative?order_num=LOGTS202311291501189155&total_fee=1000000', {}).then(function (res) {data.out_trade_no = res.data.out_trade_nodata.total_fee = res.data.total_fee//二维码qr = new QRious({element: document.getElementById('qrious'),size: 250,level: 'H',value: res.data.qrcode});//检测当前订单的支付状态queryPayStatus();})}createNative()//订单支付状态检测const queryPayStatus = () => {axios.get('http://127.0.0.1:10086/queryPayStatus?out_trade_no=LOGTS202311291501189155', {}).then(function (res) {console.log(res);// alert("resp code : "+res.data.data.code);if (res.data.code == 200) {location.href = "paysuccess.html";} else {if (res.data.message == '二维码超时') {document.getElementById("timeout").innerHTML = '二维码已过期,刷新页面重新获取二维码。';} else {location.href = "payfail.html";}}})}return {...toRefs(data), createNative}}}).mount('#app');
</script>

4.2.3 支付宝沙箱支付成功回调结果

在这里插入图片描述

5. 项目代码在 Gitee 仓库

Gitee 仓库地址:https://gitee.com/shizp2000/springboot-alipay.git

6. 微信支付

6.1 注册商户号

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

网上商超为0.6%
在这里插入图片描述

申请网址

https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_miniapp.shtml

申请成功返回首页扫码登陆

登录后点账户中心查看登陆账号(商户号)

6.2 注册微信公众号

注册网址

https://mp.weixin.qq.com/

1、注册服务号

2、登录后点击设置与开发 基本配置 查看开发者ID(appID)

3、绑定商户号与开发者ID

登录https://pay.weixin.qq.com/

进入产品中心appID账号管理 点击关联APPID

完成操作后账号管理显示绑定

4、来到账户中心
在这里插入图片描述

点击左侧安全中心的API安全
在这里插入图片描述
申请API证书 设置API密钥

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

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

相关文章

HNU-电路与电子学-2017期末B卷(不含解析)

【写在前面】 电路与电子学好像是从2020级开设的课程&#xff0c;故实际上目前只有2020与2021两个年级考过期末考试。 这门课程主要由所谓的“数电”与“模电”组成。而且先学的“模电”后学的“”数电&#xff0c;故期中考试主要以“模电”为主&#xff0c;期末考试主要以“…

04数据平台Flume

Flume 功能 Flume主要作用&#xff0c;就是实时读取服务器本地磁盘数据&#xff0c;将数据写入到 HDFS。 Flume是 Cloudera提供的高可用&#xff0c;高可靠性&#xff0c;分布式的海量日志采集、聚合和传输的系统工具。 Flume 架构 Flume组成架构如下图所示&#xff1a; A…

编译原理:NFA转DFA(原理+完整代码+可视化实现)

NFA转换为DFA 【本文内容摘要】 什么是DFA通过子集构造法将NFA转换为DFA生成DFA的dot文件并且形成可视化。 如果本文对各位看官有用的话&#xff0c;请记得给一个免费的赞哦&#xff08;收藏也不错&#xff09;&#xff01; 文章目录 NFA转换为DFA一、什么是DFA二、NFA转换为…

【GO】protobuf在golang中的测试用例

上篇文章介绍了如何安装protobuf环境&#xff0c;文章链接如下 【Go】protobuf介绍及安装-CSDN博客 本节介绍protobuf在gRPC中具体如何使用&#xff0c;并编写测试用例 一、Protobuf是如何工作的 .proto文件是protobuf一个重要的文件&#xff0c;它定义了需要序列化数据的结…

企业微信配置可信域名

首先去申请一个域名&#xff0c;然后将域名绑定到有公网ip的云服务器上&#xff0c;绑定到具体的网站&#xff1b;然后再企业微信&#xff0c;管理后台&#xff0c;点击具体的应用&#xff0c;进【网页授权及JS-SDK】&#xff1b;点击底部的【申请校验域名】点击下载文件&#…

postgresql pg_hba.conf 配置详解

配置文件之pg_hba.conf介绍 该文件用于控制访问安全性&#xff0c;管理客户端对于PostgreSQL服务器的访问权限&#xff0c;内容包括&#xff1a;允许哪些用户连接到哪个数据库&#xff0c;允许哪些IP或者哪个网段的IP连接到本服务器&#xff0c;以及指定连接时使用的身份验证模…

第73讲:深入理解MySQL数据库InnoDB存储引擎:内存结构、磁盘结构与后台线程全面解析

文章目录 1.InnoDB存储引擎的架构2.InnoDB存储引擎的内存结构2.1.Buffer Pool缓冲池2.2.Change Buffer更改缓冲区2.3.自适应Hash索引2.4.Log Buffer日志缓冲区 3.InnoDB存储引擎的磁盘结构3.1.System Tablespace系统表空间3.2.File-Per-Table Tablespaces每个表都有单独的表空间…

红警For Mac(RAM芯片可玩)

1、文件损坏解决版本&#xff01; 执行以下命令&#xff0c;&#xff08;注意&#xff1a;命令2应用路径根据实际情况修改&#xff09; sudo spctl --master-disable sudo xattr -r -d com.apple.quarantine /Applications/红警2尤里复仇M芯片.app2、新系统14&#xff0c;第一…

孩子都能学会的FPGA:第二十一课——用线性反馈移位寄存器实现伪随机序列

&#xff08;原创声明&#xff1a;该文是作者的原创&#xff0c;面向对象是FPGA入门者&#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门&#xff0c;作者不光让大家知其然&#xff0c;还要让大家知其所以然&#xff01;每个工程作者都搭建了全自动化的仿…

腾讯云轻量应用服务器怎么使用宝塔面板?

腾讯云轻量应用服务器宝塔面板怎么用&#xff1f;轻量应用服务器如何安装宝塔面板&#xff1f;在镜像中选择宝塔Linux面板腾讯云专享版&#xff0c;在轻量服务器防火墙中开启8888端口号&#xff0c;然后远程连接到轻量服务器执行宝塔面板账号密码查询命令&#xff0c;最后登录和…

采集伪原创洗稿,实现文章创作的方法

各位写手小伙伴们&#xff0c;今天要和大家分享一些关于伪原创的方法和经验&#xff0c;希望这些建议能够在你们的写作之旅中派上用场。 首先我们需要明确一下&#xff0c;伪原创并不是鼓励抄袭&#xff0c;而是一种在保留原文核心思想的同时&#xff0c;通过巧妙的方式改写&a…

Qt应用开发(Quick篇)——布局类与布局模块

一、前言 实际 应用中&#xff0c;布局是常用的功能&#xff0c;布局最直观的就是提供空间使用率&#xff0c;改善空间的流动和模块之间的重叠&#xff0c;让界面更加的美观。 二、布局类Layout 2.1 介绍 将Layout类型的对象附加到布局的子元素上&#xff0c;提供有关该项的特…

在AWS Lambda上部署标准FFmpeg工具——自定义层的方案

大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 打包FFmpeg3 创建Lambda的Layer4 测试4.1 创建Lambda函数4.2 附加FFmpeg层4.3 添加测试代码4.4 运行测试 参考文献 FFmpeg被广泛应用于音/视频流处理领域。对于简单的需求&#…

阿里云Arthas使用——在日志没有输出异常情况下,如何进行线上bug定位 stack命令 和 trace命令

前言 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类…

FreeRTOS-Plus-CLI移植

FreeRTOS-Plus-CLI移植 Fang XS.1452512966qq.com如果有错误&#xff0c;希望被指出&#xff0c;学习技术的路难免会磕磕绊绊量的积累引起质的变化 介绍 FreeRTOS-Plus-CLI是FreeRTOS的组件之一。FreeRTOS-Plus-CLI提供了一种简单、小巧、可扩展且RAM高效的启用方法方便Free…

分享67个节日PPT,总有一款适合您

分享67个节日PPT&#xff0c;总有一款适合您 67个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1oU-UUCV_69e8Gp5Y6zrzVA?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

uniapp-hubildx配置

1.配置浏览器 &#xff08;1&#xff09;运行》运行到浏览器配置》配置web服务器 &#xff08;2&#xff09;选择浏览器安装路径 &#xff08;3&#xff09;浏览器安装路径&#xff1a; &#xff08;3.1&#xff09; 右键点击图标》属性 &#xff08;3.2&#xff09;选择目标&…

FutureTask

1. 作用 异步操作获取执行结果取消任务执行&#xff0c;判断是否取消执行判断任务执行是否完毕 2. demo public static void main(String[] args) throws Exception {Callable<String> callable () -> search();FutureTask<String> futureTasknew FutureTask&…

Java多线程技术二:线程间通信——ThreadLocal的使用

1 概述 变量值的共享可以使用public static 的声明方式&#xff0c;所有的线程都是用同一个public static变量&#xff0c;那如果想实现每一个线程都有自己的变量该如何解决呢&#xff1f;JDK提供的ThreadLocal就派上用场了。 ThreadLocal类主要的作用就是将数据放入当前线程对…

web前端开发HTML/css用户登录界面

代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equi…