ios 中 localStorage 与 微信支付 的坑(工作记实)

2024-09-05 02:38

本文主要是介绍ios 中 localStorage 与 微信支付 的坑(工作记实),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系统:IOS

浏览器:Safari

上星期遇到一个IOS支付的问题。需求如下:

  1. 在 页面A 拉起 微信支付;
  2. 支付成功后返回 页面A 弹出支付确认弹窗;
  3. 点击弹窗校验订单支付情况;

根据需求代码实现如下:

  1. 在 页面A 请求后端接口 创建 微信支付链接 和 订单编号 并 通过 localStorage 保存本次的 订单编号(设id:1);
  2. 在 页面A 打开 微信支付链接 成功拉起微信支付功能;
  3. 微信支付后 返回 页面A 点击 支付确认弹窗 将 localStorage 的 id 发送给后端校验订单支付情况;

正常情况下,确实没有问题。可是当用户首次取消支付,再重新创建订单 (设 id:2)。再支付成功后 返回 页面A ,这时候再点击 支付确认弹窗按钮时,读取的 localStorage 的值既然是 第一次创建的订单编号 id=1。

当我点击 Safari 浏览器的窗口管理时,发现居然同时存在两个 页面A,恰好 微信支付成功后返回的页面居然是第一次的窗口,所以不管后面重新创建多少次订单,localStorage 的数据 id 始终是第一次创建时保存的。切换到浏览器的另一个 页面A 窗口,发现值又是最新的。这就难受了,好好的居然出这茬,怎么办?

最开始我是使用的 sessionStorage 经过网上一顿操作后,得知要使用 localStorage。后来 localStorage 都有问题后,我才去排查是不是 订单编号 出了问题。最后找到了原因,解决办法其实很简单,使用 cookie 就可以啦。此时此刻,除了想太阳库克,也没有别的想法了。

也许除了文中的情况之外 ,其它的有可能创建新窗口的情况下也有同样的问题,大家在使用 sessionStorage 和 localStorage 时应当考虑该问题。

本篇文章希望能帮助到与我一样“捉鸡”的大前端。没啥想说的,一起太阳他!

作者:黄河爱浪 QQ:1846492969,邮箱:helang.love@qq.com

公众号:web-7258,本文原创,著作权归作者所有,转载请注明原链接及出处。

更多精彩文章,请扫下方二维码关注我的公众号

这篇关于ios 中 localStorage 与 微信支付 的坑(工作记实)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137733

相关文章

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.