支付宝支付模块开发
生成二维码
使用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。
- 签名:使用私钥加密,公钥解密。用于让所有公钥所有者验证私钥所有者的身份,并且用来防止私钥所有者发布的内容被篡改,但是不用来保证内容不被他人获得。
- 加密:用公钥加密,私钥解密。用于向公钥所有者发布信息,这个信息可能被他人篡改,但是无法被他人获得。
应用请求三方中私钥公钥的使用
三方返回信息给应用中私钥公钥的使用:
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内核模块:Netfilter。Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供…...
从0开始python学习-29.selenium 通过cookie信息进行登录
1. 手动输入cookie信息保持登录状态 url https://test.com/login driver.get(url) # 手动将cookie信息写入(有多个的情况需要分开写入)--弊端为需要每次都手动输入,很麻烦不适用 driver.add_cookie({"name": "SIAM_IMAGE_…...
CentOS安装OpenNebula(二)
被控端部署: 先要配置好yum源: [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,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的…...
华为云云耀云服务器L实例评测|华为云云耀云服务器docker部署srs,可使用HLS协议
华为云云耀云服务器L实例评测|华为云云耀云服务器docker部署srs,可使用HLS协议 什么是华为云云耀云L实例 云耀云服务器L实例,面向初创企业和开发者打造的全新轻量应用云服务器。提供丰富严选的应用镜像,实现应用一键部署&#x…...
jira流转issue条目状态transitions的rest实用脚本,issue状态改变调整
官方文档链接地址: 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(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation 对象,然后通过该 An…...
C++面试题准备
文章目录 一、线程1.什么是进程,线程,彼此有什么区别?2.多进程、多线程的优缺点3.什么时候用进程,什么时候用线程4.多进程、多线程同步(通讯)的方法5.父进程、子进程的关系以及区别6.什么是进程上下文、中断上下文7.一…...
使用Java操作Redis
要在Java程序中操作Redis可以使用Jedis开源工具。 一、jedis的下载 如果使用Maven项目,可以把以下内容添加到pom中 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId>…...
VRRP配置案例(路由走向分析,端口切换)
以下配置图为例 PC1的配置 acsw下行为access口,上行为trunk口, 将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代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
05. 机器学习入门 - 动态规划
文章目录 从一个案例开始动态规划 Hi, 你好。我是茶桁。 咱们之前的课程就给大家讲了什么是人工智能,也说了每个人的定义都不太一样。关于人工智能的不同观点和方法,其实是一个很复杂的领域,我们无法用一个或者两个概念确定什么是人工智能&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框架组成: BCM(body control module)-车身控制模块: 如英飞凌tc265芯片: 车身控制单元(BCM)适合应用于12V和24V两种电压工作环境,可用于轿车、大客车和商用车的车身控制。输入模块通过采集电路采集各路开关量和…...
用AI原生向量数据库Milvus Cloud 搭建一个 AI 聊天机器人
搭建聊天机器人 一切准备就绪后,就可以搭建聊天机器人了。 文档存储 机器人需要存储文档块以及使用 Towhee 提取出的文档块向量。在这个步骤中,我们需要用到 Milvus。 安装轻量版 Milvus Lite,使用以下命令运行 Milvus 服务器: (chatbot_venv) [egoebelbecker@ares milvus_…...
【OpenCV-Torch-dlib-ubuntu】Vm虚拟机linux环境摄像头调用方法与dilb模型探究
前言 随着金秋时节的来临,国庆和中秋的双重喜庆汇聚成一片温暖的节日氛围。在这个美好的时刻,我们有幸共同迎来一次长达8天的假期,为心灵充电,为身体放松,为未来充实自己。今年的国庆不仅仅是家国团聚的时刻ÿ…...
(二)详解观察者模式
一.使用场景 当我们需要一个类,在他的内部元素发生变化的时候可以主动通知其他类的时候,同时要保持良好的可拓展性,可以采用观察者模式。 二.核心 观察者模式出版者订阅者 我们拥有一个主题对象,和一些其他对象,包…...
嵌入式Linux应用开发-基础知识-第十九章驱动程序基石④
嵌入式Linux应用开发-基础知识-第十九章驱动程序基石④ 第十九章 驱动程序基石④19.7 工作队列19.7.1 内核函数19.7.1.1 定义 work19.7.1.2 使用 work:schedule_work19.7.1.3 其他函数 19.7.2 编程、上机19.7.3 内部机制19.7.3.1 Linux 2.x的工作队列创建过程19.7.3…...
2023 彩虹全新 SUP 模板,卡卡云模板修复版
2023 彩虹全新 SUP 模板,卡卡云模板,首页美化,登陆页美化,修复了 PC 端购物车页面显示不正常的问题。 使用教程 将这俩个数据库文件导入数据库; 其他的直接导入网站根目录覆盖就好; 若首页显示不正常&a…...
【AI视野·今日NLP 自然语言处理论文速览 第四十一期】Tue, 26 Sep 2023
AI视野今日CS.NLP 自然语言处理论文速览 Tue, 26 Sep 2023 Totally 75 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Physics of Language Models: Part 3.1, Knowledge Storage and Extraction Authors Zeyuan Allen Zhu, Yuanz…...
【iptables 实战】05 iptables设置网络转发实验
一、网络架构 实验效果,通过机器B的转发功能,将机器A的报文转发到机器C 本实验准备三台机器分别配置如下网络 机器A ip:192.168.56.104 机器C ip:10.1.0.10 机器B 两张网卡,分别的ip是192.168.56.106和10.1.0.11 如图所示 如下图所示 二、…...
pygame - 贪吃蛇小游戏
蛇每吃掉一个身体块,蛇身就增加一个长度。为了统一计算,界面的尺寸和游戏元素的位置都是身体块长度的倍数 1. 上下左右方向键(或者ASDW键)控制蛇的移动方向 2. 空格键暂停和继续蛇的身体图片文件,复制到项目的asset\im…...
基于 QT 实现 Task Timer,高效利用时间
一、开发环境 Ubuntu 20.04 QT6.0 二、新建 Qt Wigets Application 这里的基类选择 Wigets, pro 配置文件添加 sql 模块,需要用到 sqlite, QT sql 三、添加数据库连接头文件 // connection.h #ifndef CONNECTION_H #define CONNECTION_…...
图像处理与计算机视觉--第五章-图像分割-霍夫变换
文章目录 1.霍夫变换(Hough Transform)原理介绍2.霍夫变换(Hough Transform)算法流程3.霍夫变换(Hough Transform)算法代码4.霍夫变换(Hough Transform)算法效果 1.霍夫变换(Hough Transform)原理介绍 Hough Transform是一种常用的计算机视觉图形检验方法,霍夫变换一…...
linux下文件操作命令
title: linux下文件操作命令 createTime: 2020-10-29 18:05:52 updateTime: 2020-10-29 18:05:52 categories: linux tags: Linux下文件操作命令 tar命令 使用tar命令一般打包分为两种*.tar ,*.tar.gz 相信大家也使用过tar -zcvf test.tar test/tar -zcvf test.tar.gz test/…...
Golang语法、技巧和窍门
Golang简介 命令式语言静态类型语法标记类似于C(但括号较少且没有分号),结构类似Oberon-2编译为本机代码(没有JVM)没有类,但有带有方法的结构接口没有实现继承。不过有type嵌入。函数是一等公民函数可以返…...
Grander因果检验(格兰杰)原理+操作+解释
笔记来源: 1.【传送门】 2.【传送门】 前沿原理介绍 Grander因果检验是一种分析时间序列数据因果关系的方法。 基本思想在于,在控制Y的滞后项 (过去值) 的情况下,如果X的滞后项仍然有助于解释Y的当期值的变动,则认为 X对 Y产生…...
了解营销型企业网站建设/软文交易平台
jquery 旋转jQuery代码段显示网页的其他语言链接(例如在页脚中)。 它会随机显示其他可用语言,并带有更改网站语言的链接。 设置为每5秒更改一次,但这可以进行优化以及显示的语言数组。 jQuery代码 (function (b) {var c [<s…...
证券网站怎么做/百度广告公司联系方式
       预备知识 Matlab 的函数程序调试图 1:在行首设置 Breakpoint若要调试程序,可选择一行代码并单击该行前面的横线,这时会出现红色圆点 Breakpoint(图 1),程序运行…...
做网站界面用什么软件/免费的网站推广方法
第14章 I2C总线与EEPROM前几章我们学了一种通信协议叫做UART异步串行通信,这节课我们要来学习第二种常用的通信协议I2C。I2C总线是由PHILIPS公司开发的两线式串行总线,多用于连接微处理器及其外围芯片。I2C总线的主要特点是接口方式简单,两条…...
专业商城网站制作/外包网站有哪些
Remove K Digits题目:给出一个非负的整数num, 用字符串表示,去掉k个digits之后得到一个最小的新数字 思路: Zuo-生成窗口最大值数组 - 239. Sliding Window Maximum 给出一个整型数组arr和一个大小为w的窗口,从左向右滑动窗口&…...
太原seo代理商/哈尔滨推广优化公司
最近脑子比较乱,一直昏昏沉沉的。昨天加班,突然想吃葡萄。我(可能,其实我忘了。)跟我对面的同事嘀咕了一句: 我让阿姨去买点葡萄。然后就一溜小跑的到阿姨房间跑去。回来后。我:喂,*…...
做网站 php asp.net jsp/网络营销企业培训
苹果app开发好后,放到公司网站以供下载,结果需要利用 itms-services 协议,需要开通HTTPS 首先要把/etc/apache2/sites-available/default-ssl 做个软连接到 /etc/apache2/sites-enabled/000-default-ssl !!&#x…...