vue 单页面(SPA) ,IOS端页面跳转后调用微信jssdk 时报错: "invalid signature"的解决方案

2023-10-27

背景:

1、JS接口安全域名 OK
2、Android手机,微信开发者工具,测试分享都没问题

 

问题:

在IOS手机微信端,从A页面(http://a.com/A) 跳转到B页面(http://a.com/B)后,B页面进行分享时就会报签名(invalid signature)错误。

 

分析:

A页面跳转到B页面时,由于是使用vue-router切换,都是操作浏览器历史记录,所以ios端微信浏览器锁定的url的还是A页面的url。

这个时候,是不是很多人都会认为,既然页面路由变化了,那我重新请求下url签名接口,不就可以了。呵呵呵,你会发现报错:invalid signature。但是再刷新一下,又没有签名问题,尼玛,这是什么原因呢???

那么你在请求url签名接口的时候,传递的url参数又是什么呢?大概如下吧:
url1、直接是 location.href (history模式)
url2、自己拼装的 location.origin + '/#' + this.$route.pullPath (hash模式)
这个时候,你请求的接口都没问题,也能拿到签名数据。但是

问题就出在:你所请求的url签名地址和浏览器执行jweixin-1.x.x.js时锁定的地址 不一致、不一致、不一致。你当前请求的可能是url1或url2,而此时微信锁定的地址仍然是进入A页面时的url(因为在进入A页面是加载并执行了jweixin-1.x.x.js, 而路由变化A到B时,并没有再次执行jxinwei-1.x.x.js)。所以问题就发生了,但是你再刷新一下,jweixin-1.x.x.js重新执行,此时微信浏览器锁定的url就是你当前刷新的url地址了,所以签名又成功了。

主要是因为:
【IOS】:ios微信端,路由变化时,微信认为SPA的url是不变的。
【Android】:android微信端,路由变化时,SPA的url是会变的(官方在安卓6.2版本,才对SPA变化作了支持)

所以,发起签名的url必须是微信锁定的url。

 

解决方案:

IOS端,把请求签名的url,保存到全局变量中。路由切换后,在调用分享接口时,使用全局变量里保存的url来请求签名

    // 记录进入app时的url
    if (typeof window.entryUrl === 'undefined' || window.entryUrl === '') {
        window.entryUrl = location.href.split('#')[0]
    }
    // 进行签名的时候  Android 不用使用之前的链接, ios 需要
    let signLink =  /(Android)/i.test(navigator.userAgent) ? location.href.split('#')[0] : window.entryUrl;

最后,每次验签名使用 signLink 获取,就ok了。

 

 

参考链接:https://www.cnblogs.com/xueshanshan/p/8692092.html

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue 单页面(SPA) ,IOS端页面跳转后调用微信jssdk 时报错: "invalid signature"的解决方案 的相关文章

  • 利用maven-war-plugin实现不同环境下的配置文件

    我这是一个标准的maven的目录结构 配置文件都在src main resources根目录下 因为要改成多环境的配置 所以只有properties的文件改变了 公共配置可以原地不动 1 将配置文件放到不同的文件夹下 2 创建2个不同的pr
  • 默认值约束 [MySQL][数据库]

    默认值约束 DEFAULT 默认值约束的作用 给某个字段 某列指定默认值 一旦我们设置了默认值约束之后 在插入数据时 如果此字段没有显式赋值 则赋值为默认值 如果我们没有给一个字段添加默认值约束 这个时候我们如果没给一个字段显式赋值 那么这
  • Android编译之lunch命令

    google官方给的编译步骤 官方的详细编译步骤见 http source android com source building html 按照google给出的编译步骤如下 source build envsetup sh 加载命令 这
  • 巨头刷脸补贴大战自伊始就没有停止过

    随 着5G时代的到来 互联网 AI智能 云计算 物联网等技术的成熟 中国财政科学研究院应用学博士后盘和林认为 刷脸支付比密码支付更安全更便捷 我国在移动支付领域相较于其他国家来说一直处于领先地位 支付宝和微信支付两家在这一领域的竞争就从来没
  • QT笔记之QSpinBox和QSlider的封装使用

    文章目录 1 创建QT测试工程 2 右键添加 新建项 3 添加新的Qt Widget Class 叫做MySpinBox Slider QSpinBox和QSlider的组合使用 4 添加好QSpinBox和QSlider两个控件 并且调整
  • 牛顿第二定律沿流线流动粒子 Python 分析(流体力学)

    当流体粒子从一个位置移动到另一个位置时 它通常会经历加速或减速 根据牛顿第二运动定律 作用在所考虑的流体粒子上的合力 必须等于其质量乘以其加速度 F m a mathbf F m mathbf a F ma 实际上 不存在无粘
  • 微信第三方平台的授权过程整理

    最近碰到微信第三方平台这个东西 就研究了下 由于微信官方文档顺序不是很明确 我特别也整理了一下 官方的概述是 公众平台第三方平台是为了让公众号或小程序运营者 在面向垂直行业需求时 可以一键授权给第三方平台 并且可以同时授权给多家第三方 通过
  • Android基础进阶 - 消息机制 之Native层分析,Android面试回忆录

    synchronized this msg markInUse msg when when Message p mMessages boolean needWake 如果消息链表为空 或者插入的Message比消息链表第一个消息要执行的更早
  • Mockito框架@Mock, @InjectMocks注解使用

    最近写项目Junit 使用Junit4框架 测试的数据都要依赖数据库 而好多接口需要调其他的系统 junit4框架完全无法实现测试功能 大佬推荐用Mockito框架 这篇博客用来记录学习Mockito的使用方法 不足欢迎指点 Mock In
  • Dump文件的生成和使用

    1 简介 第一次遇到程序崩溃的问题 之前为单位开发了一个插件程序 在本机运行没有出现问题 但把生成的可执行文件拷贝到服务器上一运行程序 刚进入插件代码 插件服务就崩溃了 当时被这个问题整的很惨 在同事的帮助下了解到 对于程序崩溃 最快的解决
  • qemu图形界面linux,QEMU 简单几步搭建一个虚拟的ARM开发板

    1 安装QEMU 先在Ubuntu中安装QEMU sudo apt get install qemu 1 安装几个QEMU需要的软件包 sudo apt get install zlib1g dev sudo apt get install
  • 在Windows中使用WSL和VS Code搭建出友好的终端开发环境

    使用WSL Windows Subsystem for Linux 这一适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU Linux 环境 包括大多数命令行工具 实用工具和应用程序 且不会产生传统虚拟机或双启动设
  • 平面几何-python

    三角形面积 题目描述 平面直角坐标系中有一个三角形 请你求出它的面积 输入描述 第一行输入一个 TT 代表测试数据量 每组测试数据输入有三行 每行一个实数坐标 x y x y 代表三角形三个顶点 1 T 10 3 10 5 x y 10 5
  • 2018年LeetCode高频算法面试题刷题笔记——验证回文串(字符串)

    1 解答之前的碎碎念 这个题还蛮简单的 大概就是考研机试第一题的水平 所以就不写解法了 2 问题描述 给定一个字符串 验证它是否是回文串 只考虑字母和数字字符 可以忽略字母的大小写 说明 本题中 我们将空字符串定义为有效的回文串 示例 1
  • 自媒体账号ID应该怎么取?

    我们都知道 在做自媒体之前 我们需要注册自媒体账号 这时候我们需要给账号取一个名称 一个好的名称能让你吸取更多的粉丝 让读者记忆深刻 取名规范各平台的规则都差不多 所以在入驻平台之前一定要先认真看清各平台名称规范 防止因为名称不规范而不能通
  • 鹏仔暴力刷导航网页排行榜HTML模板,网站如何测压

    现在很多站长都做了导航站 大多数导航站都有网站排行榜 也就是今日浏览榜 月最高浏览榜 总浏览榜等 你页面阅读量越高 那么排名越靠前 曝光的几率就更高 很多站长在某些导航站提交完收录后 手动刷新增加阅读量 真的特别慢 那么本次鹏仔就给大家简单
  • 头文件路径包含问题

    头文件包含两种 系统头文件和自定义头文件 系统头文件不说了 格式统一 自定义头文件在包含的时候要注意路径 其实是头文件与主文件的相对位置关系的问题 ps 另外 LInux和Windows下也有所区别 举4个例子 应该就能看明白了 一 这种情
  • InnoSetup 脚本打包及管理员权限设置

    InnoSetup使用教程 InnoSetup打包安装 脚本详细 1 定义变量 1 define MyAppName TranslationTool 2 define MyAppChineseName 翻译工具 3 define MyApp
  • ios系统下input边框有默认阴影

    修复代码 1 input outline none webkit appearance none 去除系统默认的样式 webkit tap highlight color rgba 0 0 0 0 点击高亮的颜色 2 input appea

随机推荐

  • 深度学习实战11(进阶版)-BERT模型的微调应用-文本分类案例

    文章目录 一 前期工作 导入库包 导入数据 二 模型加载三 模型训练 四 模型测试 大家好 我是微学AI 今天给大家带来一个基于BERT模型做文本分类的实战案例 在BERT模型基础上做微调 训练自己的数据集 相信之前大家很多都是套用别人的模
  • 选择正确的DDoS解决方案:按需云服务

    迁移到云端的优势 与部署独立硬件设备相比 迁移到云端有许多优势 保护基于云的应用程序 托管在云中的应用程序无法通过本地设备保护 因此需要基于云的保护 更大容量 随着容量 DDoS 攻击变得越来越大 许多攻击很容易超过典型企业级 DDoS 缓
  • java HashSet 如何判断元素是否存在

    HashSet不能添加重复的元素 当调用add Object 方法时候 首先会调用Object的hashCode方法判hashCode是否已经存在 如不存在则直接插入元素 如果已存在则调用Object对象的equals方法判断是否返回tru
  • Spring 中的Advice类型介绍

    Spring 中的 Advice 类型介绍 翻译原文链接 Introduction to Advice Types in Spring 1 概述 在本文中 我们将讨论可以在 Spring 中创建的不同类型的 AOP 通知 In this a
  • javaweb:监听域对象创建和销毁的Listener

    1 什么是Servlet监听器 先来看看什么是监听器 监听器是专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象 当被监视的对象发生情况时立即采取相应的行动 Servlet监听器是Servlet规范中定义的一种特殊类 它用于
  • ubuntu安装code

    进入链接 http code visualstudio com下载 deb 在下载好的文件处终端输入sudo dpkg i code xxx
  • sklearn 数据处理与特征工程

    1 数据处理的流程 2 数据预处理 Preprocessing Impute 2 1 数据无量纲化 在机器学习算法实践中 我们往往有着将不同规格的数据转换到同一规格 或不同分布的数据转换到某个特定分布的需求 这种需求统称为将数据 无量纲化
  • java对list分组_Java List排序,分组等操作

    假定有一列实体类对像 List list UserServer getList 去重 去除重复对象 每个属性的值都一样的 需要注意的是要先重写对象User的equals和hashCode方法 List distinctList list s
  • 冒泡排序,快速排序,选择排序详细过程

    一 冒泡排序 1基本思想 相邻的两个数之间进行比较 按照规则进行交换 2 实现思路 以升序排列为例 第一趟比较 先用第一个和第二个元素进行比较 将较大的交换到第二个位置上 然后第二个和第三个进行比较 将较大的放在第三个位置上 依次类推 第一
  • 宝藏软件Obsidian知识体系搭建,免费的多端云同步

    宝藏软件Obsidian知识体系搭建 免费的多端云同步 为什么推荐Obsidian 人很奇怪 在关注短期目标的时候 会有成功失败之说 但是如果关注体系呢 就不那么会在乎短期收益了 为什么呢 因为体系可能会创造强大的滚雪球效应 使用笔记软件颇
  • Blender设置相机围绕物体旋转

    以下内容参考视频 https www bilibili com video BV1X7411g75c 1 首先随便添加一个物体 选中摄像机 位置 旋转归零 缩放归一 这一步不能少 快捷键 位置归零 Alt G 旋转归零 Alt R 缩放归一
  • C语言创建多线程

    线程是计算机中独立运行的最小单位 每个线程占用的CPU时间是由系统分配的 因此可以把线程看成操作系统分配CPU时间的基本单位 每个线程只有在系统分配给它的时间片内才能取得CPU控制权 执行线程中的代码 Linux操作系统在一个进程内生成多个
  • multipart/form-data (一种POST 数据提交的方式)

    一 初识multipart form data enctype属性 enctype 规定了form表单在发送到服务器时候编码方式 它有如下的三个值 application x www form urlencoded 默认的编码方式 但是在用
  • 解决数字字母不换行的问题

    当在标签中输入的是字母和数字的时候 会出现不换行的情况 导致内容不能显示完整 给p标签或者父标签div增加一下属性 text word break break all container word break break all 实现数字和
  • 博客摘录「 mysql char,mysql to_char」2023年6月12日

    场景 mysql 相仿to char to date 函数mysql 类似to char to date 函数mysql日期和字符相互转换方法date format date Y m d gt oracle中的to char str to
  • 文件没保存怎么恢复?3种方法恢复未保存office文档

    是否遇到过Excel Word或者PPT程序由于电脑断电 崩溃导致没有及时保存文档 如何恢复未保存的office文档文件 本文中提供了3种方法 用以帮助用户了解如何恢复未保存的office文档 以Word为例 数据蛙为大家图文介绍每种办法的
  • spring提前加载,懒加载,bean的作用域和注入注解讲解

    前言 sping知识随笔笔记 spring提前加载 懒加载 bean的作用域和注入注解讲解 spring提前加载 懒加载 bean的作用域和注入注解讲解 前言 1 depends on 2 bean的作用域 3 lazy init 懒加载
  • Spring Boot事务配置管理

    Spring Boot事务配置管理 场景 我们在开发企业应用时 由于数据操作在顺序执行的过程中 线上可能有各种无法预知的问题 任何一步操作都有可能发生异常 异常则会导致后续的操作无法完成 此时由于业务逻辑并未正确的完 成 所以在之前操作过数
  • HJ32 密码截取

    题目 HJ32 密码截取 题解 暴力截取所有子串 利用双指针判断子串是否为回文串 获取最大长度回文串 public int interceptPassword String password int maxLength 100 for in
  • vue 单页面(SPA) ,IOS端页面跳转后调用微信jssdk 时报错: "invalid signature"的解决方案

    背景 1 JS接口安全域名 OK 2 Android手机 微信开发者工具 测试分享都没问题 问题 在IOS手机微信端 从A页面 http a com A 跳转到B页面 http a com B 后 B页面进行分享时就会报签名 invalid