当前位置: 首页 > news >正文

支付宝支付模块开发

生成二维码

使用Hutool工具类生成二维码

引入对应的依赖

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.5</version>
</dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version>
</dependency>

生成二维码的代码为下:

    @Testpublic void createCode() {
//generate方法需要传入的参数有: 需要被生成二维码的链接,宽,高, 对应的文件名QrCodeUtil.generate("https://hutool.cn/", 300, 300, FileUtil.file("D:/qrcode.jpg"));}

生成对应的链接的二维码,存到到D盘且名字为qrcode.jpg。

如果我们需要生成的二维码要传给前端,这时我们需要生成Base64格式。

对应的代码为下:

    @Testpublic void createBase64() {//generateAsBase64方法需要传入的参数有:需要生成二维码的链接,QrConfig对象(用于存储宽和高),对应的图片格式String base64 = QrCodeUtil.generateAsBase64("https://hutool.cn/", new QrConfig(300, 300), "png");System.out.println(base64);}

对应的效果为下:

面试考点

问:你们公司是怎么生成二维码的?

答:在刚开始的时候我们将对应的支付链接通过hutool工具类生成对应的二维码图片,但是后续的高并发的场景下服务器非常的卡,因为服务器要同时处理大量的二维码生成业务。以在后续我们直接将链接传给前端,通过前端的js工具类生成对应的二维码。

支付宝沙盒环境准备 

 支付宝沙盒地址

下载支付宝沙盒安卓软件

 该软件的账号为下:

扫码支付的流程

 

流程的步骤为下:

1.商户系统调用alipay.trade.precreate方法设置二维码的有效时间,此时调用到支付宝系统,支付宝系统返回二维码链接

2.商户系统通过方法将二维码链接生成对应的二维码,发送到支付宝app。

3.用户通过打开支付宝app扫描对应的二维码,进行支付,商户会通过获取支付宝系统返回的信息处理支付结果。

4.并不是每次支付都会返回结果,如果出现网络问题就不会返回对应的结果,所以我们需要是设置定时任务,轮询查询交易的状态。(我们会使用xxl-job)

公钥和私钥

目前的加密算法可以分为:对称加密,非对称加密。

对称加密:也叫传统加密,加密和解密都使用相同的密钥,它要求发送方和接收方在安全通信之前,要设定好一个密钥,如果要密钥被非法人员获取,其就可以进行加密和解密,所以该密钥的安全性十分的重要。

目前存在的对称加密的算法为下:

  • AES (默认AES/ECB/PKCS5Padding)
  • ARCFOUR
  • Blowfish
  • DES (默认DES/ECB/PKCS5Padding)
  • DESede
  • RC2
  • PBEWithMD5AndDES
  • PBEWithSHA1AndDESede
  • PBEWithSHA1AndRC2_40

非对称加密:使用私钥进行加密,使用公钥进行加密,私钥是私有的不会对外暴露,而公钥是共有的,公钥的所有者可以对私钥的所有者进行验证。最常用的就是RSA和DSA。

  1. 签名:使用私钥加密公钥解密。用于让所有公钥所有者验证私钥所有者的身份,并且用来防止私钥所有者发布的内容被篡改,但是不用来保证内容不被他人获得。
  2. 加密:用公钥加密,私钥解密。用于向公钥所有者发布信息,这个信息可能被他人篡改,但是无法被他人获得。

应用请求三方中私钥公钥的使用

三方返回信息给应用中私钥公钥的使用:

EasySDK 

引入对应的依赖

<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-easysdk</artifactId><version>2.2.0</version>
</dependency>

创建参数类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@ConfigurationProperties(prefix = "ali.pay")
@Configuration
public class AliProperties {//请求协议private String protocol;// 请求网关private String gatewayHost;// 签名类型 RSA2private String signType;// 应用IDprivate String appId;// 应用私钥private String merchantPrivateKey;// 支付宝公钥private String alipayPublicKey;// 异步通知接收服务地址private String notifyUrl;// 设置AES密钥private String encryptKey;}

创建配置类

import com.alipay.easysdk.kernel.Config;
import com.example.alipaydemo.entity.AliProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class aliPayConfig {@Beanpublic Config getOptions(AliProperties aliProperties) {Config config = new Config();config.protocol = aliProperties.getProtocol();config.gatewayHost = aliProperties.getGatewayHost();config.signType = aliProperties.getSignType();//设置对应的appIdconfig.appId = aliProperties.getAppId();//设置私钥config.merchantPrivateKey = aliProperties.getMerchantPrivateKey();config.alipayPublicKey = aliProperties.getAlipayPublicKey();//可设置异步通知接收服务地址(可选)config.notifyUrl = "";//可设置AES密钥,调用AES加解密相关接口时需要(可选) <-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->config.encryptKey = "";return config;}
}

创建对应的Controller层

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.kernel.util.ResponseChecker;
import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class easyAliPayController {@AutowiredConfig config;@GetMapping("/createOrder")public AlipayTradePrecreateResponse Create(String orderId) {//设置对应的参数Factory.setOptions(config);//设置项目名,对应的订单号,对应的金额try {AlipayTradePrecreateResponse response = Factory.Payment.FaceToFace().preCreate("餐掌柜-餐饮消费",orderId, "0.01");// 3. 处理响应或异常if (ResponseChecker.success(response)) {System.out.println("调用成功");System.out.println(response.getHttpBody());return response;} else {System.err.println("调用失败,原因:" + response.msg + "," + response.subMsg);}} catch (Exception e) {e.printStackTrace();}return null;}

在application.yml中配置对应的信息

ali:pay:protocol: httpsgatewayHost: openapi.alipay.comsignType: RSA2appId: 9021000128687668merchantPrivateKey: alipayPublicKey: encryptKey: zgJr83uwsyEHG5LCh63d4Q==notifyUrl:

最终完成测试。

easySDK的方法有下:

相关文章:

支付宝支付模块开发

生成二维码 使用Hutool工具类生成二维码 引入对应的依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.5</version> </dependency><dependency><groupId>com.go…...

12、Kubernetes中KubeProxy实现之iptables和ipvs

目录 一、概述 二、iptables 代理模式 三、iptables案例分析 四、ipvs案例分析 一、概述 iptables和ipvs其实都是依赖的一个共同的Linux内核模块&#xff1a;Netfilter。Netfilter是Linux 2.4.x引入的一个子系统&#xff0c;它作为一个通用的、抽象的框架&#xff0c;提供…...

从0开始python学习-29.selenium 通过cookie信息进行登录

1. 手动输入cookie信息保持登录状态 url https://test.com/login driver.get(url) # 手动将cookie信息写入&#xff08;有多个的情况需要分开写入&#xff09;--弊端为需要每次都手动输入&#xff0c;很麻烦不适用 driver.add_cookie({"name": "SIAM_IMAGE_…...

CentOS安装OpenNebula(二)

被控端部署&#xff1a; 先要配置好yum源&#xff1a; [rootmaster yum.repos.d]# vim opennebula.repo[rootmaster yum.repos.d]# cat opennebula.repo [opennebula] nameopennebula baseurlhttps://downloads.opennebula.org/repo/5.6/CentOS/7/x86_64 enabled1 gpgkeyhttps…...

力扣第239题 c++滑动窗口经典题 单调队列

题目 239. 滑动窗口最大值 困难 提示 队列 数组 滑动窗口 单调队列 堆(优先队列) 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的…...

华为云云耀云服务器L实例评测|华为云云耀云服务器docker部署srs,可使用HLS协议

华为云云耀云服务器L实例评测&#xff5c;华为云云耀云服务器docker部署srs&#xff0c;可使用HLS协议 什么是华为云云耀云L实例 云耀云服务器L实例&#xff0c;面向初创企业和开发者打造的全新轻量应用云服务器。提供丰富严选的应用镜像&#xff0c;实现应用一键部署&#x…...

jira流转issue条目状态transitions的rest实用脚本,issue状态改变调整

官方文档链接地址&#xff1a; POST Transition issue Performs an issue transition and, if the transition has a screen, updates the fields from the transition screen. sortByCategory To update the fields on the transition screen, specify the fields in the fiel…...

JAVA 注解

1 概念 Annotation&#xff08;注解&#xff09;是 Java 提供的一种对元程序中元素关联信息和元数据&#xff08;metadata&#xff09;的途径和方法。Annatation(注解)是一个接口&#xff0c;程序可以通过反射来获取指定程序中元素的 Annotation 对象&#xff0c;然后通过该 An…...

C++面试题准备

文章目录 一、线程1.什么是进程&#xff0c;线程&#xff0c;彼此有什么区别?2.多进程、多线程的优缺点3.什么时候用进程&#xff0c;什么时候用线程4.多进程、多线程同步&#xff08;通讯&#xff09;的方法5.父进程、子进程的关系以及区别6.什么是进程上下文、中断上下文7.一…...

使用Java操作Redis

要在Java程序中操作Redis可以使用Jedis开源工具。 一、jedis的下载 如果使用Maven项目&#xff0c;可以把以下内容添加到pom中 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId>…...

VRRP配置案例(路由走向分析,端口切换)

以下配置图为例 PC1的配置 acsw下行为access口&#xff0c;上行为trunk口&#xff0c; 将g0/0/3划分到vlan100中 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname acsw [acsw] Sep 11 2023 18:15:48-08:00 acsw DS/4/DATASYNC_CFGCHANGE:O…...

【图像处理】【应用程序设计】加载,编辑和保存图像数据、图像分割、色度键控研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

05. 机器学习入门 - 动态规划

文章目录 从一个案例开始动态规划 Hi, 你好。我是茶桁。 咱们之前的课程就给大家讲了什么是人工智能&#xff0c;也说了每个人的定义都不太一样。关于人工智能的不同观点和方法&#xff0c;其实是一个很复杂的领域&#xff0c;我们无法用一个或者两个概念确定什么是人工智能&a…...

【JVM】第五篇 垃圾收集器G1和ZGC详解

导航 一. G1垃圾收集算法详解1. 大对象Humongous说明2. G1收集器执行一次GC运行的过程步骤3. G1垃圾收集分类4. G1垃圾收集器参数设置5. G1垃圾收集器的优化建议6. 适合使用G1垃圾收集器的场景?二. ZGC垃圾收集器详解1. NUMA与UMA2. 颜色指针3. ZGC的运作过程4. ZGC垃圾收集器…...

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石⑤

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石⑤ 第十九章 驱动程序基石⑤19.9 mmap19.9.1 内存映射现象与数据结构19.9.2 ARM架构内存映射简介19.9.2.1 一级页表映射过程19.9.2.2 二级页表映射过程 19.9.3 怎么给APP新建一块内存映射19.9.3.1 mmap调用过程19.9.3.2 cach…...

数据分析技能点-独立性检验拟合优度检验

在这个数据驱动的时代,数据分析已经成为了一个不可或缺的工具,无论是在商业决策、医疗研究还是日常生活中。然而数据分析并不仅仅是一堆数字和图表;它是一个需要严谨的科学方法和逻辑推理的过程。 本文将重点介绍两种广泛应用于数据分析的统计检验方法:独立性检验和拟合优…...

了解汽车ecu组成

常用ecu框架组成&#xff1a; BCM(body control module)-车身控制模块: 如英飞凌tc265芯片&#xff1a; 车身控制单元&#xff08;BCM&#xff09;适合应用于12V和24V两种电压工作环境&#xff0c;可用于轿车、大客车和商用车的车身控制。输入模块通过采集电路采集各路开关量和…...

用AI原生向量数据库Milvus Cloud 搭建一个 AI 聊天机器人

搭建聊天机器人 一切准备就绪后,就可以搭建聊天机器人了。 文档存储 机器人需要存储文档块以及使用 Towhee 提取出的文档块向量。在这个步骤中,我们需要用到 Milvus。 安装轻量版 Milvus Lite,使用以下命令运行 Milvus 服务器: (chatbot_venv) [egoebelbecker@ares milvus_…...

【OpenCV-Torch-dlib-ubuntu】Vm虚拟机linux环境摄像头调用方法与dilb模型探究

前言 随着金秋时节的来临&#xff0c;国庆和中秋的双重喜庆汇聚成一片温暖的节日氛围。在这个美好的时刻&#xff0c;我们有幸共同迎来一次长达8天的假期&#xff0c;为心灵充电&#xff0c;为身体放松&#xff0c;为未来充实自己。今年的国庆不仅仅是家国团聚的时刻&#xff…...

(二)详解观察者模式

一.使用场景 当我们需要一个类&#xff0c;在他的内部元素发生变化的时候可以主动通知其他类的时候&#xff0c;同时要保持良好的可拓展性&#xff0c;可以采用观察者模式。 二.核心 观察者模式出版者订阅者 我们拥有一个主题对象&#xff0c;和一些其他对象&#xff0c;包…...

Linux 数据链路层

1.数据链路层的作用简单来说。TCP协议实现的是数据传输的可靠性&#xff0c;IP协议实现的是数据能跨主机送达目标主机的能力&#xff0c;数据链路层保证相邻的两台设备进行数据交互的问题。2.以太网以太网的帧格式如下所示&#xff1a;目的地址和源地址都是 mac 地址&#xff0…...

MATLAB GUI界面设计与图像处理的奇妙融合

MATLAB gui界面设计 MATLAB图像处理 gui界面开发 傅立叶变换&#xff0c;灰度图&#xff0c;二值化&#xff0c;直方图均衡&#xff0c;高通滤波器&#xff0c;低通滤波器&#xff0c;巴特沃斯滤波器&#xff0c;噪声处理&#xff0c;边缘检测在图像处理的领域中&#xff0c;MA…...

Qwen3-32B-Chat私有化部署案例:金融研报摘要生成服务API封装

Qwen3-32B-Chat私有化部署案例&#xff1a;金融研报摘要生成服务API封装 1. 项目背景与价值 在金融行业&#xff0c;每天都会产生大量研究报告&#xff0c;分析师需要花费大量时间阅读和提炼关键信息。传统的人工摘要方式效率低下&#xff0c;且难以保证一致性。Qwen3-32B作为…...

避坑指南:Jetson上GStreamer硬编码H.264常见的5个错误(附解决方案)

Jetson平台GStreamer硬编码H.264实战避坑指南 1. 硬件编码环境准备 在Jetson平台上使用nvv4l2h264enc进行硬件编码前&#xff0c;必须确保系统环境配置正确。不同型号的Jetson设备&#xff08;如Orin、Xavier、Nano&#xff09;在硬件编码能力上存在差异&#xff0c;但基本配置…...

手把手教你用Python实现机械臂手眼标定(附开源代码)

Python实战&#xff1a;机械臂手眼标定算法实现与效果对比 在工业自动化与机器人研究领域&#xff0c;手眼标定是连接视觉系统与机械臂运动控制的关键技术。想象一下&#xff0c;当机械臂需要精准抓取传送带上的零件&#xff0c;或者在高精度装配任务中与视觉引导配合时&#x…...

ArcMap正射影像切片缓存实战:从配准到geoWebCache发布的完整流程

ArcMap正射影像切片缓存实战&#xff1a;从配准到geoWebCache发布的完整流程 正射影像是地理信息系统中不可或缺的基础数据&#xff0c;其高精度和真实感特性使其在城市规划、土地管理、环境监测等领域发挥着重要作用。然而&#xff0c;面对海量的影像数据&#xff0c;如何高效…...

xHCI1.1架构解析:从寄存器到数据传输的完整流程

1. xHCI1.1架构全景概览 第一次拆开USB3.0移动硬盘盒时&#xff0c;我盯着主控芯片上"xHCI"的标识发愣——这个藏在硬件深处的控制器&#xff0c;到底是如何让数据在电脑和设备间流畅穿梭的&#xff1f;经过多年在嵌入式系统领域的实战&#xff0c;终于摸清了xHCI1.1…...

进程间通信——信号量篇

1.同步、互斥、临界资源、临界区的概念1.1临界区通过代码访问临界区的这部分代码叫做临界区&#xff1b;1.2临界资源多个进程能看到的同一份公共资源叫做共享资源&#xff0c;被保护起来的资源叫做临界资源&#xff1b;所谓的会共享资源的保护&#xff0c;本质是对访问共享资源…...

quill富文本表格进阶:用better-table插件实现合并单元格与图片拖拽(避坑指南)

Quill富文本表格进阶&#xff1a;用Better-Table插件实现合并单元格与图片拖拽&#xff08;避坑指南&#xff09; 在当今内容创作和文档编辑的数字化浪潮中&#xff0c;富文本编辑器已成为开发者不可或缺的工具。Quill作为一款轻量级、模块化的现代富文本编辑器&#xff0c;因其…...

YAYI 2与Yi对比:逻辑推理能力终极测评

YAYI 2与Yi对比&#xff1a;逻辑推理能力终极测评 【免费下载链接】YAYI2 YAYI 2 是中科闻歌研发的新一代开源大语言模型&#xff0c;采用了超过 2 万亿 Tokens 的高质量、多语言语料进行预训练。(Repo for YaYi 2 Chinese LLMs) 项目地址: https://gitcode.com/gh_mirrors/y…...