微信公众号开发调用jssdk,配置时总是 invalid signature ,提示非法签名?? 愿世界回归自然 的回答 - 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/000ce6af9149b844ea29e82a15b400?jumpto=comment&commentid=0000269ac34be05b203dae4b2510
微信公众号开发调用jssdk,配置时总是 invalid signature?前端环境: vue2.0 weixin-js-sdk: 1.6.0 后端环境: springboot2.0+ 引入maven依赖: <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>4.1.0</version> <scope>compile</scope> </dependency> 签名接口: public WxJsapiSignature getOfficialAccountsShareSign(String url) { try { AppConfigReq appConfigReq = new AppConfigReq(); appConfigReq.setKeyPrefix(JmsConstant.APP_CONFIG_WXPAY); AppConfigWxpay appConfigWxpay = appConfigWxpayService.getAppConfigWxpay(appConfigReq); // 使用这个实现类则表示将配置信息存储在内存中 WxMpDefaultConfigImpl wxMpDefaultConfig = new WxMpDefaultConfigImpl(); wxMpDefaultConfig.setAppId(appConfigWxpay.getSlAppId()); wxMpDefaultConfig.setSecret(appConfigWxpay.getSlSecret()); // 这里设值之前,已经通过@Component @Bean new WxMpServiceImpl() 注入了 wxMpService.setWxMpConfigStorage(wxMpDefaultConfig); log.debug("JmsUserServiceImpl getOfficialAccountsShareSign wxMpService -> {}", wxMpService.getWxMpConfigStorage()); return wxMpService.createJsapiSignature(url); } catch (WxErrorException e) { log.error("JmsUserServiceImpl getOfficialAccountsShareSign createJsapiSignature error -> {}", e.getMessage()); Asserts.fail(e.getMessage()); } return null; } 签名方法: public WxJsapiSignature createJsapiSignature(String url) throws WxErrorException { long timestamp = System.currentTimeMillis() / 1000L; String randomStr = RandomUtils.getRandomStr(); String jsapiTicket = this.getJsapiTicket(false); String signature = SHA1.genWithAmple(new String[]{"jsapi_ticket=" + jsapiTicket, "noncestr=" + randomStr, "timestamp=" + timestamp, "url=" + url}); WxJsapiSignature jsapiSignature = new WxJsapiSignature(); jsapiSignature.setAppId(this.getWxMpConfigStorage().getAppId()); jsapiSignature.setTimestamp(timestamp); jsapiSignature.setNonceStr(randomStr); jsapiSignature.setUrl(url); jsapiSignature.setSignature(signature); return jsapiSignature; } 接口返回实体: @Data public class WxJsapiSignature { private String appId; private String nonceStr; private long timestamp; private String url; private String signature; } 前端返回数据和错误信息: [图片] Vue调用方法: this.$http.post( this.$apiUri.APP_ADD_UPDTA_HESIGN, { url: "https://mth-gzh.lanceyi.com/", }, (res) => { wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来 appId: res.data.appId, // 必填,公众号的唯一标识 timestamp: res.data.timestamp, // 必填,生成签名的时间戳 nonceStr: res.data.nonceStr, // 必填,生成签名的随机串 signature: res.data.signature, // 必填,签名 url: res.data.url, jsApiList: [ "checkJsApi", "updateAppMessageShareData", "onMenuShareAppMessage", "onMenuShareTimeline", "chooseWXPay", "showOptionMenu", "hideMenuItems", "showMenuItems", "onMenuShareTimeline", ], // 必填,需要使用的JS接口列表 }); wx.ready(function () { // 分享给朋友 wx.onMenuShareAppMessage({ title: goods.title, desc: goods.desc, link: shareUrl, imgUrl: goods.imgUrl, success: function (res) { console.log("分享成功"); }, cancel: function (res) { console.log("分享失败!"); }, }); }); } ); 调试时的签名验证截图: [图片] [图片] 所有的条件都满足,实在找不到哪里出现问题,希望官方能给出正确解释和解决方案!
2021-12-15安卓需要使用当前URL进行微信API注册(即当场调用location.href.split('#')[0])iOS需要使用进入页面的初始URL进行注册,(即在任何pushstate发生前,调用location.href.split('#')[0])后端没有问题的话一般前端问题只有url问题,可能没有实时获取或者和后端获取到的不同步,前端问题的话只有这个
ios中webview调用sdk的扫一扫, 签名无效问题invalid signature?调用扫一扫: 1.webview:安卓------------------》正常,成功唤醒扫一扫 2.webview:ios--------------------》失败:报invalid signature错误 3.微信聊天页面打开链接--------》正常,成功唤醒扫一扫 怎么解决啊???各位有遇到吗
2021-12-15首先确定问题,如果是前后端分离,前端的小伙伴一般只有那个URL是动态的参数,其他90%都是后端的问题!!!这一点要明确! //其次前端的URL基本是这两种,后端不用再做转译,保持前后端一致就行,都试试 // shareUrl: encodeURIComponent(window.location.href.split('#')[0]), //shareUrl: window.location.href.split('#')[0], 还有一点非常重要,后端一般来说不要混淆appId和secret,不要觉得没有错,除非你们公司只有一个公众号或者小程序或者APP(前往不要混淆) 还有就是后端生成签名算法是不是接口调错了 "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi"%(access_token) 注意type值 再者就是ip是不是在白名单了什么的这些评论区有很多人都说了剩下的就好排查了!
微信公众号开发调用jssdk,配置时总是 invalid signature ,提示非法签名?首先贴上必要信息: 开发者ID(AppID):wx3806a4c78e7bf173 原始ID:gh_2314fcde77a4 [图片] [图片] 以上是公众号本身的配置 接下来放一下,我这边的config代码 [代码]const modeList = [[代码][代码] [代码][代码]'updateAppMessageShareData'[代码][代码],[代码][代码] [代码][代码]'updateTimelineShareData'[代码][代码],[代码][代码] [代码][代码]'onMenuShareAppMessage'[代码][代码],[代码][代码] [代码][代码]'onMenuShareTimeline'[代码][代码],[代码][代码]];[代码] [代码]const initConfig = async (res) => {[代码][代码] [代码][代码]const options = {[代码][代码] [代码][代码]debug: !isProd,[代码][代码] [代码][代码]appId: res.appId, [代码][代码]// 必填,公众号的唯一标识[代码][代码] [代码][代码]timestamp: res.timestamp, [代码][代码]// 必填,生成签名的时间戳[代码][代码] [代码][代码]nonceStr: res.nonceStr, [代码][代码]// 必填,生成签名的随机串[代码][代码] [代码][代码]signature: res.signature, [代码][代码]// 必填,签名,见附录1[代码][代码] [代码][代码]jsApiList: modeList,[代码][代码] [代码][代码]}[代码][代码] [代码][代码]console.log([代码][代码]'config options::----------------------------'[代码][代码], options);[代码][代码] [代码][代码]wx.config(options);[代码][代码] [代码][代码]// ready[代码][代码] [代码][代码]wx.ready(() => {[代码][代码] [代码][代码]console.log([代码][代码]'config success::----------------------------'[代码][代码]);[代码][代码] [代码][代码]// 分享到朋友圈[代码][代码] [代码][代码]wx.updateTimelineShareData({[代码][代码] [代码][代码]title: [代码][代码]''[代码][代码], [代码][代码]// 分享标题[代码][代码] [代码][代码]link: [代码][代码]''[代码][代码], // 分享链接[代码][代码] [代码][代码]imgUrl: [代码][代码]''[代码][代码], [代码][代码]// 分享图标[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]// 用户确认分享后执行的回调函数[代码][代码] [代码][代码]},[代码][代码] [代码][代码]cancel: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]// 用户取消分享后执行的回调函数[代码][代码] [代码][代码]},[代码][代码] [代码][代码]});[代码][代码] [代码][代码]// 分享给朋友[代码][代码] [代码][代码]wx.updateAppMessageShareData({[代码][代码] [代码][代码]title: [代码][代码]''[代码][代码], [代码][代码]// 分享标题[代码][代码] [代码][代码]link: [代码][代码]''[代码][代码], // 分享链接[代码][代码] [代码][代码]imgUrl: [代码][代码]''[代码][代码], [代码][代码]// 分享图标[代码][代码] [代码][代码]desc: [代码][代码]''[代码][代码], [代码][代码]// 分享描述[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]// 用户确认分享后执行的回调函数[代码][代码] [代码][代码]},[代码][代码] [代码][代码]cancel: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]// 用户取消分享后执行的回调函数[代码][代码] [代码][代码]},[代码][代码] [代码][代码]});[代码][代码] [代码][代码]})[代码][代码] [代码][代码]// error[代码][代码] [代码][代码]wx.error((res) => {[代码][代码] [代码][代码]console.log([代码][代码]'catch config error :: =============== ::'[代码][代码], res);[代码][代码] [代码][代码]})[代码][代码]}[代码]以上代码执行之后出现如下问题 [代码]{[代码][代码] errMsg: [代码][代码]"config:fail,Error: 系统错误,错误码:63002,invalid signature [20190919 17:06:41][]"[代码][代码] jsApiList: [][代码][代码]}[代码]差了错误代码之后,发现是非法签名,好了,我先去了https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign这个校验网站校验了,signature 没有问题两边一致,但是config一直提示非法。 然后我去了https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html这边看常见解决办法。试了个遍。然而并没有效果,另外,恕我直言这个文档真实辣鸡。可能你们的核心已经是小程序了,但是小程序的BUG也一堆没修。 [图片] 然后吐槽一下,这个错误码的返回,之前有返回过config:fail,Error: 系统错误,错误码:63002,invalid signature [20190919 17:06:41][undefind] 这样的格式,还不容易变成 config:fail,Error: 系统错误,错误码:63002,invalid signature [20190919 17:06:41][] 这样我也不知道啥问题,就这几个参数,咱写写明白行不,URL错就提示URL错,就一个签名错误???wtf,这里太笼统了! 好了说到URL错,好网上说99%的错误都是URL导致的,好的尝试了各种办法,并没有什么用,已经调试了不知道几天了,最后只能哀求官方帮我解决一下,帮我看看问题到底在哪里,头发都要秃了。 我用的是SPA (vue) HASH模式(https://xxx.com/#/)取得地址为 https://xxx.com/ 单凡我有一点办法都不会来这请教 综上,请赐教!求快速反馈! 顺便吐槽,标题为什么一定要问号,我就是个陈述句,阐述问题而已!
2021-12-15