首页 > 其他分享 >微信JS-SDK出现“invalid signature”的问题时该如何解决

微信JS-SDK出现“invalid signature”的问题时该如何解决

时间:2023-04-22 14:56:00浏览次数:48  
标签:时该 必填 微信 jsapi invalid 生成 签名 ticket

最近我在帮助前端生成微信 JS-SDK 分享签名时,遇到了一个问题,即 wx.config 初始化一直报 invalid signature 的错误,我想总结一下我排查这个问题的过程。

官方文档中已经说了详细介绍了排查过程,如下图所示:

 

校验工具校验签名过程

首先我在微信提供的签名校验工具中比对了接口生成的签名与工具签名差异,我将缓存中的 jsapi_ticket 和接口数据输入到校验工具中进行了比对。通过这一步操作,我能够更加准确地判断签名是否正确。

通过比对我发现接口签名与校验工具生成的签名是相同的,说明我们的签名计算过程是正确的,只能继续按文档进行排查。

调试代码

这时我要来了前端的地址,并下载安装了微信开发者工具,微信扫码进入 -> 公众号网页项目 -> 输入网址。

直接在 console 栏中输入初始化 wx.config 代码,里面的参数输入换成接口的参数即可。

这一步是方便调试,我们可以一直调试到成功再让前端继续开发,节省前后端沟通的成本。

 let confTest = {
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId:"", // 必填,公众号的唯一标识
    timestamp: 123,  // 必填,生成签名的时间戳
    nonceStr: '',  // 必填,生成签名的随机串
    signature:  '',// 必填,签名
    jsApiList: [] // 必填,需要使用的JS接口列表
  };
  wx.config(confTest);

排查生成签名的参数

URL与编码

在 console 里面继续输入如下代码,排查前后端参与签名计算的域名是否一致:

alert(location.href.split('#')[0])

在这里,我尝试了对网址进行正常编码和 URL 编码后生成签名,但是结果都是错误的。我推测这里有人可能是因没有进行 URL 编码参数丢失,而导致签名错误。虽然这些尝试都没有解决问题,但是我并没有放弃,而是继续进行排查。(毕竟需要交差)

jsapi_ticket

接着我继续检查生成 jsapi_ticket 时使用的公众号 appid 是否正确,以及请求的 type 是否为 jsapi。在这个过程中,我发现我的请求获取 jsapi_ticket 的 type 实际上是 wx_card,而不是正确的 jsapi 类型。我立即找到了问题所在,尝试清理了缓存并重新生成 jsapi_ticket,最终成功解决了问题。

以上除了文档第五条缓存 access_token 和 jsapi_ticket (我本来就缓存了),基本覆盖了文档所说的整个过程。

标签:时该,必填,微信,jsapi,invalid,生成,签名,ticket
From: https://www.cnblogs.com/caiawo/p/17343089.html

相关文章

  • 微信小程序-小程序事件冒泡和事件捕获
    !>小程序当中的时间捕获与时间冒泡与原生JS的是一样的这里我就来直接上代码来演示一下在微信小程序当中的时间冒泡与捕获,关于时间的捕获与冒泡可以参考我JS文章里面的介绍即可。事件捕获index.wxml:<viewclass="one"capture-bind:tap="onOneClick"><viewclass="two"captu......
  • 微信小程序-小程序事件绑定
    什么是事件事件是视图层到逻辑层的通讯方式。事件可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。事件对象可以携带额外信息,如id,dataset,touches。常见事件tap:手指触摸后马上离开longpress:手指触摸后,超过350ms......
  • 微信小程序-事件传递数据
    事件对象小程序在触发事件监听方法的时候会自动传递一个事件对象给我们,通过这个事件对象我们可以拿到页面传递过来的一些数据。事件对象的作用拿到触发事件的元素:currentTarget拿到触发事件的位置:detail拿到从页面传递过来的数据:dataset/mark页面传递数据的方法datasetmark通......
  • 用 python 上传文件到微信小程序云存储
    前言小程序上了云托管后不打算继续使用其他图床,而是使用云托管自带的图床。而由于时间紧迫只能在本地使用云托管提供的服务器调用对象存储api云托管上传文件的文档在这里上传文件文档如果你上传带有中文名的文件,或者上传的路径有中文名时,需要修改一下requests库的源码,否......
  • 微信小程序:uni-app页面Page和组件Component生命周期执行的先后顺序
    目录H5微信小程序测试代码文档页面生命周期https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle组件生命周期https://uniapp.dcloud.net.cn/tutorial/page.html#componentlifecycle经测试,得出结论:H5和微信小程序的生命周期函数调用顺序不一致H5pagebeforeCreatepag......
  • Invalid prop: type check failed for prop "defaultExpandAll". Expected Boolean, g
    vue中使用element-ui报错如下,defaultExpandAll关键词页面也搜不到[Vuewarn]:Invalidprop:typecheckfailedforprop"defaultExpandAll".ExpectedBoolean,gotStringwithvalue"true".foundin---><ElTable>atpackages/table/src/table.vue......
  • 微信小程序Image标签 mode=“widthFix” 问题
    微信小程序中加载图片时,如果只设定图片宽度,希望添加mode='widthFix'来自适应<Imagemode="widthFix"className={s.img]}src={ImgSource.iconLogin}/>.img{width:100%;}但是这时会出现一个问题:当页面刚打开时,会闪动一瞬间,之后才会变成自适应的高度,很影响体......
  • 微信小程序加载第三方字体
    一、加载本地字体做小程序项目时,有时为了提升页面展示效果,会引入一些第三方字体,引入方式如下代码片段/*直接在app.css引入*/@font-face{font-family:"alifont";//是你封装的名字src:url('./static/css/subset-AlibabaPuHuiTiR.ttf')format('truetype');//你......
  • 微信小程序开发笔记 基础篇③——自定义数据dataset,事件触发携带额外信息
    文章目录一、前言二、视频演示三、原理和流程四、注意事项五、全部源码六、参考一、前言微信小程序开发笔记——导读想要实现一个电费充值界面。多个不同金额的充值按钮,每个按钮都携带自定义数据(金额)点击不同金额的充值按钮,就会上传对应的数据(金额)。所以,本文主要使用到了微信小程......
  • Junit启动测试mybatis xml文件BindingException: Invalid bound statement问题
    背景:1、正常启动,xml文件放在java目录和resource目录下均正常2、junit启动,xml文件放在resource目录下正常,放在java目录下报BindingException错误mapperlocation绑定地址为:"classpath:com/a/b/**/*.xml" 原因就在于绑定的地址有问题。 junit生成的test-classes下的测......