自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 【WeChatPayment】基础支付API(4)-生成订单、支付通知

而在 API 文档中,二维码有效期为 2 小时,因此在有效期内,可以在存储订单的同时把二维码地址也缓存起来,需要时直接使用,就不用重复调用 api 了。原本的下单方法中,每次生成或获取订单后都需要调用统一下单的 api,若用户频繁操作,那么 api 也会被频繁调用。而在每次生成订单后,先判断该订单二维码是否已保存,若是,则直接返回二维码,不需要再调用统一下单接口和后续操作了。该方法中的后续步骤就可以从生成的订单 orderInfo 中,获取调用统一下单 api 过程中需要的各种信息。

2025-02-25 15:37:08 587

原创 Ngrok内网穿透教程

现在的开发机器(电脑)大多是基于局域网的内网地址的,我们在开发项目时服务器不能直接通过内网地址找到我们使用的开发机器因此我们必须要做内网穿透,获取一个固定的外网地址,这样服务器就可以通过这个外网地址访问到开发机器。

2025-02-22 15:00:07 359

原创 【WeChatPayment】基础支付API V3(3)

② 前端点击确认支付后,首先会来到 controller 层的 nativePay 方法,接下来会调用 service 层的 nativePay。⑤ 在 executeWithSignature 方法中对应答进行验签,由此找到 validate 验签方法的调用位置。参数校验通过后进行初始化,第三个参数 60 表示每隔 60mins 检查是否有新的平台证书,有的话会进行下载。⑦ 回到初始化单例的证书管理器方法,初始化证书后,启动定时更新证书任务。最终其实就是由步骤(4)中的完成签名并执行请求方法调用的。

2025-02-22 10:00:00 898

原创 【WeChatPayment】基础支付API V3(2)

(1)创建 WxPayController@Api(tags = "网站微信支付")@Slf4j(2)创建 WxPayService 接口和实现类//接口//实现类@Service@Slf4j(3)在 WxPayController 中注入 WxPayService,定义接口方法用日志对象打印日志,方便调试前端:获取商品信息,通过商品 ID 传给后端@Resource/*** Native下单* @return*/

2025-02-21 16:55:41 361

原创 【WeChatPayment】基础支付API V3(1)

1.2 在 config 目录下创建配置文件,使应用程序能从 properties 的配置文件中读取相关信息。1.4 引入注解自动处理器依赖,帮助生成自定义配置的元数据信息,让配置文件和代码之间的对应参数可以自动定位。测试完成后注释代码,并将 WxPayConfig 中的获取商户私钥方法改为私有 private 保证安全性。1.1 在 properties 配置文件中定义相关参数,包含商户号、证书等信息。在文档中查看通过平台证书验签原理,即私钥加密,公钥解密。问题:测试成功,但控制台输出的不是私钥而是

2025-02-21 12:56:10 925

原创 VSCode创建Vue项目涉及的用户权限问题

在使用 VS Code 终端创建 Vue 项目时遇到 npm 错误代码 EPERM,通常是由于当前用户权限不足引起的。解决方法是进行用户授权,通过修改 node.js 的安装目录的安全权限来解决。具体步骤包括找到安装目录,进入安全设置,添加 Everyone 权限并替换子容器和对象的所有者权限,最终设置完全控制权限。完成这些步骤后重新在 VS Code 中创建 Vue 项目即可成功。

2025-02-12 15:58:21 161

原创 【WeChatPayment】创建项目

引入 lombok,简化实体类开发,自动生成 get/set、构造函数等方法--实体对象工具类:低版本idea需要安装lombok插件-->创建 R 对象,封装返回给前端的数据在 R 对象上使用 lombok 注解,创建静态方法方便对 R 的调用@Data //生成set、get等方法r.setMessage("成功");return r;r.setMessage("失败");return r;修改 controller 的 test 方法,返回统一结果。

2025-02-11 16:39:41 918

原创 【WeChatPayment】支付安全

哈希函数:任意长度→固定长度(数据指纹、摘要)不可逆:只有算法没有密钥,只能加密不呢个解密,只能暴力破解发散性:原文的一点改动会使摘要发生剧烈变化(雪崩效应)抗碰撞性:原文不同摘要也不同摘要算法:MD5、SHA1、SHA2(SHA224、256、384)

2025-02-11 15:22:54 416

原创 python执行pip报错原因排查

python执行pip报错原因排查:1、无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。2、Fatal error in launcher: Unable to create process using '"D:\Work\Tool\Python\python.exe" "D:\Work\Tool\Python\Python\Scripts\pip.exe" ': ???????????

2024-06-11 17:32:56 1082

原创 LeetCode面试经典150题—13 分发糖果

拆分规则:将 “相邻两个孩子评分更高的孩子会获得更多的糖果” 这条规则拆分为左右两边的两条规则进行处理。左规则:从左往右遍历,当右边的孩子评分(当前遍历到的 ratings[i] )比左边高( ratings[i] > ratings[i - 1] )时,右边的孩子获得的糖果数比左边多 1 个;否则令 ratings[i] = 1右规则:与左规则同理,从右往左遍历,当左边的孩子评分(当前遍历到的 ratings[i] )比右边高( ratings[i] > ratings[i +1] )时,左边的孩

2023-10-11 21:03:12 158 1

原创 LeetCode面试经典150题—12 加油站

暴力 + 剪枝:最容易想到的暴力解法就是挨个遍历,假设下标 i 是出发时加油站的编号,变量 sum 存储当前剩余油量,从下标 j = i 开始维护更新 sum 值填坑思想:亏空最严重的一个点必须放在最后一步走,等着前面剩余的救助这个想法是在找 gas[i] - cost[i] 总和的最低点 minIndex,这个最低点就是亏空最严重的地方,那么将这个点放在最后去经过就是最安全的,即将minIndex 的下一个点作为出发点

2023-09-22 19:00:00 309 1

原创 LeetCode面试经典150题—11 除自身以外数组的乘积

左右乘积:题目中有提到 “前缀元素和后缀元素的乘积”,如果敏感的话这里就可以想到左右乘积的思路,把除自身以外的乘积拆分为左右两边乘积的乘积通过两次遍历分别维护左右两个数组 l、r,l[i] 表示下标为 i 的元素左边数字的乘积,r[i] 表示下标为 i 的元素右边数字的乘积最后一次遍历将数组左右两边的乘积再相乘

2023-09-21 13:00:00 218

原创 LeetCode面试经典150题—10 O(1)时间插入、删除和获取随机元素

题目要求保证每个函数的平均时间复杂度为 O(1),这里可以联想到用哈希表来实现添加和删除操作,具体详解见文末Hash 表拓展。这里用 List 作为变长数组存储元素,用 HashMap 作为哈希表,哈希表存储的是元素及其在 list 中对应的下标

2023-09-20 14:05:17 157 1

原创 LeetCode面试经典150题—09 H 指数

排序 从前往后:首先对数组升序排序,末尾即最大值 max,那么在该数组中 H 可能的最大值就是 max =Math.min(len, citations[len - 1])。从前往后遍历,在数组中查找大于等于 max 的最小位置,然后计算这样的数有多少个并与 max 进行比较。为什么是大于等于 max 呢?因为当得到的个数小于当前的 max 时,接下来需要使 max-- 继续查找,而此时 max 的值在数组中不一定存在

2023-09-16 16:50:05 263 1

原创 LeetCode面试经典150题—08 跳跃游戏 Ⅱ

动态规划:回顾动态规划一般解题要点:定义状态、状态转移方程、初始值、输出值本题定义数组 dp[i]:到达坐标为 i 处的最小跳跃次数、初始值:dp[0] = 0,dp[1] = 1、输出值:dp[n-1]贪心算法:在每次可跳跃边界里选择可以跳得更远的位置。定义三个变量:跳跃次数、当前跳跃次数下能到达的最远边界、当前边界实际能达到的最远位置

2023-09-15 10:00:00 168 1

原创 LeetCode面试经典150题—07 跳跃游戏

跳过 0:如果数组中没有 0,那么一定能到达最后一个下标;反之则判断是否能跳过,判断依据是看这个 0 前面的元素是否存在数值大于到 0 的距离维护最远能到达的位置:边跳边维护更新当前能到达的最远位置,能到达最后则成功,有点贪心思想

2023-09-14 13:33:14 205 1

原创 LeetCode面试经典150题—06 买卖股票的最佳时机 Ⅱ

这道题与05 买卖股票的最佳时机的区别就在于它可以多次买入卖出,这里提出动态规划和贪心算法两种解题思路

2023-09-13 13:37:59 161

原创 LeetCode面试经典150题—05 买卖股票的最佳时机

根据题意可以考虑一种特殊情况:数组降序,这种情况下不会盈利,因此最大利润为0。

2023-09-12 20:40:48 133

原创 LeetCode面试经典150题—04 轮转数组

这道题想做出来很简单,设置成中等题应该是因为它的进阶要求:用空间复杂度为 O(1) 的算法解决。三次翻转,先整体翻转,然后以 k 为界左右两边分别翻转,就相当于右移了 k 位。额外创建新数组,遍历存放元素轮转后的结果。时间复杂度:O(n)空间复杂度:O(n)时间复杂度:O(n)空间复杂度:O(1)

2023-09-12 11:50:51 139

原创 LeetCode面试经典150题—03 删除有序数组中的重复项 Ⅱ

删除有序数组中的重复项 Ⅱ 思路分析:HashMap、双指针、数组有序 & 保留

2023-09-11 18:10:29 245

原创 LeetCode面试经典150题—02 移除元素

移除元素基本思路分析

2023-09-06 20:30:00 190 1

原创 LeetCode面试经典150题—01 合并有序数组

合并有序数组思路分析与数组拷贝方法拓展

2023-09-04 20:45:46 359 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除