支付宝支付模块开发

生成二维码

使用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的方法有下:

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数码产品数码配件无线键盘等出口欧盟CE-RED认证测试办理

数码产品数码配件无线键盘CE-RED认证测试办理 无线产品CE-RED认证进入东欧市场规定&#xff1a; 在通信终端设备和无线产品在这些/地区合法销售之前&#xff0c;必须按照 RED 指令进行测试&#xff0c;并且还必须提供 CE 标志。无线远程控制产品必须符合 RED 指令的 REDEU 要…

华为云HECS云服务器docker环境下安装nginx

前提&#xff1a;有一台华为云服务器。 华为云HECS云服务器&#xff0c;安装docker环境&#xff0c;查看如下文章。 华为云HECS安装docker-CSDN博客 一、拉取镜像 下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) docker pull nginx查看镜像 dock…

JS对象数组去重

JS对象数组去重 一、数组去重1.使用 new Set()2.使用 indexOf 去重3.使用 includes 去重4.使用 hasOwnProperty5.使用 filter6.使用递归7.利用 Map 数据结构去重8.使用用 reduce includes9.使用 new Set() 的简化 二、对象数组去重1.使用 new Map() 和 filter2.使用reduce3.使…

【JVM】第四篇 垃圾收集器ParNewCMS底层三色标记算法详解

导航 一. 垃圾收集算法详解1. 分代收集算法2. 标记-复制算法3. 标记-清除算法4. 标记-整理算法二. 垃圾收集器详解1. Serial收集器2. Parallel Scavenge收集器3. ParNew收集器4. CMS收集器三. 垃圾收集底层三色标记算法实现原理1. 垃圾收集底层使用三色标记算法的原因?2. 垃圾…

计算机竞赛 深度学习图像分类算法研究与实现 - 卷积神经网络图像分类

文章目录 0 前言1 常用的分类网络介绍1.1 CNN1.2 VGG1.3 GoogleNet 2 图像分类部分代码实现2.1 环境依赖2.2 需要导入的包2.3 参数设置(路径&#xff0c;图像尺寸&#xff0c;数据集分割比例)2.4 从preprocessedFolder读取图片并返回numpy格式(便于在神经网络中训练)2.5 数据预…

1.centos7 安装显卡驱动、cuda、cudnn

安装conda 参考 python包 2.安装conda python库-CSDN博客 1.安装显卡驱动 步骤1&#xff1a;安装依赖 yum -y install kernel-devel yum -y install epel-release yum -y install gcc 步骤2&#xff1a;查询显卡版本 lspci | grep VGA 找到2230号码&#xff0c;进入如下网…

Swift data范围截取问题

文章目录 一、截取字符串的几种方法1. 截取前几位2. 截取后几位3. subData4. 下标截取 二、subData(in:) 报错 EXC_BREAKPOINT 一、截取字符串的几种方法 1. 截取前几位 mobileID.prefix(32)2. 截取后几位 mobileID.suffix(3)3. subData data.subdata(in: 0..<4)4. 下标…

大学生登记国家证书软件著作权提升就业资质

大学生登记国家证书软件著作权提升就业资质 随着信息技术的快速发展&#xff0c;软件行业成为了许多大学生就业的热门选择之一。然而&#xff0c;在竞争激烈的就业市场中&#xff0c;除了掌握专业知识和技能外&#xff0c;如何提升自己的就业资质也显得尤为重要。其中&#xff…

postman接口测试系列: 时间戳和加密

在使用postman进行接口测试的时候&#xff0c;对于有些接口字段需要时间戳加密&#xff0c;这个时候我们就遇到2个问题&#xff0c;其一是接口中的时间戳如何得到&#xff1f;其二就是对于现在常用的md5加密操作如何在postman中使用代码实现呢&#xff1f; 下面我们以一个具体的…

selenium不定位元素直接使用键盘操作(如弹框操作)

今天在使用selenium进行定位时&#xff0c;发现直接定位不了chrome的弹框&#xff0c;如这种弹框&#xff1a; 使用的是下面这行代码 driver.switch_to.alert.accept() 运行报错&#xff0c;说是没有 alert windown。。。。 啊&#xff1f;难道chrome的弹框不是用alert写的&…

冲刺十五届蓝桥杯P0001阶乘求和

文章目录 题目描述思路分析代码解析 题目描述 思路分析 阶乘是蓝桥杯中常考的知识。 首先我们需要知道 int 和long的最大值是多少。 我们可以知道19的阶乘就已经超过了long的最大值&#xff0c;所以让我们直接计算202320232023&#xff01;的阶乘是不现实的。 所以我们需要…

WhatsOnChain中的sCrypt合约验证插件

我们很高兴地宣布在 WhatsOnChain 上集成了 sCrypt 智能合约验证插件。该插件允许任何人为已部署的智能合约提交和验证 sCrypt 代码。 智能合约验证 在与智能合约交互之前&#xff0c;用户需要确保智能合约按照其声称的方式行事。理论上&#xff0c;每个人都可以查看合约并验…

链表oj题2(Leetcode)(牛客)——合并两个有序链表;判断回文链表;链表分割

链表oj题2&#xff08;Leetcode&#xff09;&#xff08;牛客&#xff09; 一&#xff0c;合并两个有序链表1.1分析2.2代码 二&#xff0c;链表的回文结构2.1分析2.2代码 三&#xff0c;链表分割3.1分析3.2代码 四&#xff0c;小结 一&#xff0c;合并两个有序链表 合并两个有…

苹果曾考虑基于定位控制AirPods Pro自适应音频

在一次最近的采访中&#xff0c;苹果公司的高管Ron Huang和Eric Treski透露&#xff0c;他们在开发AirPods Pro自适应音频功能时&#xff0c;曾考虑使用GPS信号来控制音频级别。这个有趣的细节打破了我们对AirPods Pro的固有认知&#xff0c;让我们对苹果的创新思维有了更深的…

趣解设计模式之《小王的糖果售卖机》

〇、小故事 小王最近一直在寻找商机&#xff0c;他发现商场儿童乐园或者中小学校周围&#xff0c;会有很多小朋友喜欢吃糖果&#xff0c;那么他想设计一款糖果售卖机&#xff0c;让后将这些糖果售卖机布置到商场和学校旁边&#xff0c;这样就能获得源源不断的收益了。 想到这里…

关闭手机广告的步骤

关闭手机广告的步骤 小米 1.设置→小米账号→声明与条款→系统广告→系统工具广告→关闭 2.设置→应用设置→应用管理→右上角三个点→设置→关闭“应用升级提醒”&“资源推荐” 3.桌面左滑打开负一屏→划到底部→设置→服务管理→选择关闭项目 4.桌面→打开任意文件夹…

工厂与观察者模式

工厂模式介绍 通过一个加工厂&#xff0c;在这个工厂中添加对应材料&#xff0c;我们就可以得到想要的东西&#xff0c;在程序设计中&#xff0c;这种模式就叫做工厂模式&#xff0c;工厂生成出的产品就是某个类的实例&#xff0c;也就是对象。 关于工厂模式一共有三种&#…

【zookeeper】基于Linux环境安装zookeeper集群

前提&#xff0c;需要有几台linux机器&#xff0c;我们可以准备好诸如finalshell来连接linux并且上传文件&#xff1b; 其次Linux需要安装上ssh&#xff0c;并且在/etc/hosts文件中写好其他几台机器的名字和Ip 127.0.0.1 localhost localhost.localdomain localhost4 localh…

【精彩回顾】 用sCrypt在Bitcoin上构建智能合约(2)

2023年3月30日&#xff0c;sCrypt首席执行官刘晓晖在英国伦敦nChain做了题为“用sCrypt在Bitcoin上构建智能合约”的演讲&#xff0c;并与现场来宾进行了深入交流、互动。这次课程着重讲解了 BSV 智能合约的基础概念&#xff0c;以及如何利用 sCrypt 的相关工具构建应用。 ▲英…

MATLAB 多信号显示方案

效果示例 重要参考资料 MATLAB官方资料 matlab plot3 函数说明 利用for循环和plot函数画多条曲线时如何添加图例&#xff1f; x1:100; krandperm(20)‘; A{‘aa’,‘bb’,‘ccc’,‘ddd’}; y(k*x)’ for i1:20 plot(x,y(:,i)) STRsprintf(‘曲线%d’,i); A(i)cellstr(STR); …