微信自定义分享(java)config:fail,Error: invalid signature,updateTimelineShareData:fail the permission value

【实战】微信JS-SDK分享功能配置:从updateAppMessageShareData报错到完美解决 本文针对微信JS-SDK分享功能配置中常见的`updateAppMessageShareData`报错问题,提供了从排查到解决的完整实战指南。文章深入剖析了`jsApiList`配置、签名生成、调用时机等核心环节的常见陷阱,并给出了跨平台兼容方案与可复用的代码示例,帮助开发者彻底解决分享功能失效的难题。 阅读详情

之前做过一次自定义分享,可能碰巧前端没问题,各个参数碰巧都是对的,整个过程很顺利;

可最近做另个微信应用的自定义分享遇到的坑,找了老半天,最终解决,特记录一下;

异常1:config:fail,Error: invalid signature

异常2:updateTimelineShareData:fail the permission value is offline verifying

关于前面错误的,百度了好久,有用信息很少,无力吐槽,很多说加密的url必须和分享的link一致,这个纯属放屁,你分享的link只需要在授权域名下面就ok了,可以是另外的地址,比如我写的就是我微信应用授权地址,别人点击授权完直接访问主页;

首先你的后台加密部分要没有问题,下面的方法才可能帮助到你;

被这两个异常折磨了好久,对于异常一,当时写的过程中,怎么都查都查不出来,去验签平台验签也没问题,分享就是会提示签名错误,现在看来只能是自己对官方文档没细心看,对于这个问题如果你也和我一样,验签没问题,那么明确告诉你,是你的加密时用的url错了(******注意这个加密时用的url必须是你请求页面的url一样,连参数都要带上********);

比如我当前调用后台获取签名的页面是:http://wx.abdfc.com/wxGame/test/result.html?&number=125;那么你后台生成签名加密时用的url也要是这个;页面可以通过

window.location.href.split('#')[0] 方式获取url,传到后台,最后会贴一下我的关键代码

ps:其实遇到这种问题都是,当时开发时进了死胡同,没有真正看清微信开发文档的描述,建议开发时详细查看微信开发文档;

贴一下微信分享接口关于加密部分的说明:

附录1-JS-SDK使用权限签名算法

jsapi_ticket

生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

1.参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../15/54ce45d8d30b6bf6758f68d2e95bc627.html

2.用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

成功返回如下JSON:

{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}

获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。

签名算法

签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。

即signature=sha1(string1)。 示例:

noncestr=Wm3WZYTPz0wzccnW
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=1414587457
url=http://mp.weixin.qq.com?params=value

步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

步骤2. 对string1进行sha1签名,得到signature:

0f9de62fce790f9a083d5c99e95740ceb90c27ed

注意事项

1.签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。

2.签名用的url必须是调用JS接口页面的完整URL。

3.出于安全考虑,开发者必须在服务器端实现签名的逻辑。

如出现invalid signature 等错误详见附录5常见错误及解决办法

 

对于异常2(updateTimelineShareData:fail the permission value is offline verifying),我个人认为是引入的js版本不对,没有找到相应的函数;

最后贴一下我的代码:

前端页面:(***注:我用的js版本是<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>)

initWeixinAPI(){
                var _this = this;
                var urld = window.location.href.split('#')[0];
                $.ajax({
                    type: "get",
                    url: host + "/wxGame/getSignInfo",
                    data: {
                        url: urld
                    },
                    success: function(data) {
                        _this.signature = data.signature; // 签名
                        _this.appId =data.appId; // 应用id
                        _this.jsapi_ticket =data.jsapi_ticket; // 票据
                        _this.nonceStr =data.nonceStr; // 随机串
                        _this.url =data.signature; // 路径
                        _this.timestamp =data.timestamp; // 时间戳
                        _this.yaoqing();
                    },
                    error: function(e) {
                        console.log('获取用户信息失败');
                    }
                });
            },
            yaoqing(){
                var _this = this;
                _this.isTrue = true;debugger;
                wx.config({
                    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                    appId: _this.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
                    timestamp: _this.timestamp, // 必填,生成签名的时间戳
                    nonceStr: _this.nonceStr, // 必填,生成签名的随机串
                    signature: _this.signature,// 必填,签名,见附录1
                    jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                });
                wx.ready(function() {
                    wx.onMenuShareAppMessage({
                        title: '我的情商已经满分,你要不要来测一下', // 分享标题
                        desc: '权威情商测试,帮你清除认识自己', // 分享描述
                        link:host +'/wxGame/toOauth', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                        imgUrl: host+'/wxGame/test/img/logo.png', // 分享图标
                        success: function () {
                            vant.Toast('分享成功');
                        },
                        cancel: function () {
                            vant.Toast('取消分享');
                        }
                    });
                    wx.onMenuShareTimeline({
                        title: '我的情商已经满分,你要不要来测一下', // 分享标题
                        link: host +'/wxGame/toOauth', // 分享链接,该链接域名必须与当前企业的可信域名一致
                        imgUrl: host+'/wxGame/test/img/logo.png', // 分享图标
                        success: function () {
                            vant.Toast('已分享至朋友圈');
                        },
                        cancel: function () {
                            vant.Toast('取消分享');
                        }
                    });
                });

后台对应接口实现:(由于我用的后端框架是jfinal,里面集成了微信获取相关票据的接口,我就补贴代码,能看到这里后台逻辑一般没什么问题了,注意一下坑点就行)

public void getSignInfo() {

		JsTicket jsApiTicket = JsTicketApi.getTicket(JsTicketApi.JsApiType.jsapi);
		String jsapi_ticket = jsApiTicket.getTicket();
		String nonce_str = create_nonce_str();
		// 注意 URL 一定要动态获取,不能 hardcode.
		System.out.println("url>>>>" + url);
		String url = getPara("url");
		String timestamp = create_timestamp();
		// 这里参数的顺序要按照 key 值 ASCII 码升序排序
		//注意这里参数名必须全部小写,且必须有序
		String  str = "jsapi_ticket=" + jsapi_ticket +
				"&noncestr=" + nonce_str +
				"&timestamp=" + timestamp +
				"&url=" + url;

		String signature = HashKit.sha1(str);

		System.out.println("appId " + ApiConfigKit.getApiConfig().getAppId()
				+ "  nonceStr " + nonce_str + " timestamp " + timestamp);
		System.out.println("url " + url + " signature " + signature);
		System.out.println("nonceStr " + nonce_str + " timestamp " + timestamp);
		System.out.println(" jsapi_ticket " + jsapi_ticket);
		System.out.println("nonce_str  " + nonce_str);
		setAttr("appId", ApiConfigKit.getApiConfig().getAppId());
		setAttr("nonceStr", nonce_str);
		setAttr("timestamp", timestamp);
		setAttr("url", url);
		setAttr("signature", signature);
		setAttr("jsapi_ticket", jsapi_ticket);
		Map map =new HashMap();
		map.put("appId", ApiConfigKit.getApiConfig().getAppId());
		map.put("nonceStr", nonce_str);
		map.put("timestamp", timestamp);
		map.put("url", url);
		map.put("signature", signature);
		map.put("jsapi_ticket", jsapi_ticket);
		renderJson(JsonUtils.toJson(map));

	}

以上就是我遇到的问题及解决,希望能帮助到同样遇到问题的你;

公众号配置调试“errMsg“:“config:fail,invalid signature 3.在微信JS接口签名校验工具里面,获取到 signature。如果这里获取到的 signature 和你得出的 signature 一致,就证明你的 signature 是正确的。2.通过 access_token 获取 jsapi_ticket ,下面的链接access_token 替换成刚刚得到的 access_token 就能得到 jsapi_ticket。三: 登陆“微信公众平台”,查看“JS接口安全域名”是否设置正确。一:登陆“微信公众平台”,查看“ip白名单是否设置” , 阅读详情

相关推荐

vue3(微信公众号H5网页):调用wx.config报错config:fail,invalid signature,在vue3 h5项目开发微信内置浏览器JS-SDK/JS-API提示签名失效/错误

微信公众号网页,vue3 H5网页,uniapp h5,wx.config 报错:config:fail,invalid signature?无效签名,微信JSSDK分享接口中wx.config 出现invalid signature问题的解决办法,微信公众号签名失效,wx.config中出现invalid signature的解决方法,H5页面调起微信的拍照与分享功能,导致的config:invalid signature这个错误的解决办法,微信网页调用分享功能出现config:fail,invalid

✅ 精选推荐文章 5056

updateTimelineShareData:fail, the permission value is offline verifying 错误提示

前提: 1、绑定js安全域名 2、公众号必须是认证的,才有权限 附上已经测试好代码 页面引用这段代码 (function(){if(window.navigator.userAgent.match(/MicroMessenger/i)){document.write("<scr"+'ipt type="text/javascript" src="http://res.wx.qq.c...

u012451663的博客 2万+

手把手教你解决Windows 10网络驱动器无法访问问题(附详细排查步骤)

本文详细指导Windows 10用户解决网络驱动器无法访问的常见问题。通过从现象快速定位到系统排查,提供了从检查网络连通性、修复凭据权限到调整高级设置的完整步骤,特别是针对“找不到网络路径”等错误,帮助用户高效恢复对共享资源的访问。

weixin_29233857的博客 519

config:invalid signature 解决办法和问题排查详解

invalid signature 问题排查及解决办法

a_靖的博客 6万+

GPU微架构演进分析--从SIMT到Scalar-Vector-Tensor计算的混合配比与调度

GPU架构经历了从专用计算模块到统一可编程处理器的演进。传统GPU面临专用电路配比难题,Nvidia Tesla架构通过引入可编程多线程处理器实现图形与计算的统一。Fermi架构进一步向计算倾斜,随后的架构陆续加入Tensor Core等专用单元。AI时代促成了从图形处理主导向AI计算的转变,形成了Scalar+Vector+Tensor的混合计算范式。SIMT调度重要性降低,CUDA面临新挑战,RISC-V等架构可能带来新机遇。

ChipCamp的博客---https://chipcamp.blog.youkuaiyun.com/ 918

临床预测模型R语言全流程实战:从建模到Bootstrap验证的完整代码

临床预测模型是利用患者特征预测疾病结局发生概率的重要统计工具,其核心在于通过Logistic回归或Cox比例风险模型建立风险函数,并借助ROC曲线、校准曲线等指标评估模型的区分度与校准度。Bootstrap内部验证和DCA决策曲线分析则是当前审稿人关注的焦点,前者用于校正过拟合带来的乐观估计,后者用以判断模型在临床决策中的实际净获益。在肿瘤预后、慢病风险评估等场景中,基于R语言的模型构建与列线图可视化已成为论文发表的关键环节。本文以survival包自带肺癌数据为例,系统展示从数据预处理、变量筛选到多因素建

weixin_33483304的博客 245

微信网页调用分享功能出现config:fail,invalid signature的解决,及其开发过程中需要注意的几个地方

在开发网页分享功能的时候,会出现{errMsg: "config:fail,invalid signature", jsApiList: Array(0)})里的link值不一样!并且分享接口的link的域名必须在公众号开发的白名单中!,"onMenuShareAppMessage"] // 必填,需要使用的JS接口列表。第三,出现config:fail,invalid signature问题,很容易出现的原因,第一个就是确认开发的公众号是否有所需jdk的使用权限,可以用微信开发工具打开。

qq_27681677的博客 1万+

Hadoop与Kafka集群部署与优化实践指南

分布式系统是现代大数据处理的核心架构,其中Hadoop作为分布式存储与计算框架,Kafka作为分布式消息队列系统,共同构成了实时数据处理的基础设施。通过HDFS实现海量数据存储,结合YARN进行资源调度,而Kafka则保障了数据流的实时传输与高吞吐。这种技术组合在电商用户行为分析、物联网数据采集等场景中表现卓越。部署过程中需关注硬件资源配置、关键参数调优以及集群监控方案,例如通过调整HDFS块大小和Kafka partition数量来优化性能。合理运用Flume、Spark Streaming等工具可实现系

weixin_29061997的博客 363

微信分享只能分享出一串链接的问题updateTimelineShareData: the permission value is offline verifying

1.要引用 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> 之前的分享接口废弃了,要用。2.一定要配置,不然可能出现updateTimelineShareData: the permission value is offline verifying。

qq_37159134的博客 1118

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

告别低效!用ADS仿真带你一步步搭建一个两路对称Doherty功放(含设计要点)

本文详细介绍了如何使用ADS仿真工具一步步搭建两路对称Doherty功放,涵盖设计要点与优化技巧。通过解析负载调制机制、阻抗变换等核心原理,结合5G基站等应用场景,帮助工程师提升功放效率与线性度。特别针对GaN管件的Doherty功放,在3.5GHz频段实现高效性能。

weixin_31783001的博客 396

【解决】updateAppMessageShareData:fail, the permission value is offline verifying

【问题】 使用微信SDK的分享接口wx.updateAppMessageShareData时,控制台出现‘updateAppMessageShareData:fail, the permission value is offline verifying’错误提示。 【解决】 jsApiList里面声明updateAppMessageShareData方法。 示例代码如下: wx.config({ debug: false, appId: data.appId, timestamp: dat

huangfuyk.的博客 1万+

EM的理论与实践(基础篇)

EM理论与实践

m0_61544122的博客 2384

config:fail,invalid signature

微信开发调用JS-SDK某些页面报config:fail,invalid signature注意,是某些页面才会报这个错误,导致 wx.config 失败百思不得解看了几遍文档确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分后来想了...

一窍不通只会复制粘贴的Java工程师 2万+

英飞凌TC3xx之一起认识GTM系列(四)如何实现GTM与GPIO关联的配置(ATOM/TIM实例)

本文详细描述了针对英飞凌TC3xx芯片,如何运用GTM与GPIO之间的连接性,根据实际应用的需要对TOM和TIM相关寄存器进行配置。

无所适从的我的博客 3493

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

微信分享报错:config:fail,invalid signature

微信分享报错config:fail,invalid signature

weixin_44312227的博客 6834

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

微信开发10-------------------config:fail,invalid signature

MMP!!!! 这是一个非常2B的错误. 错误原因有很多很多. 首先,JS域名设置的只能是有域名,不能带http:// 其次 1.确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。 2.确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对...

做你想做的人,没有时间的限制,只要愿意,什么时候都可以start。 6098

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

微信分享报错errMsg: “updateAppMessageShareData:fail, the permission value is offline verifying“

微信分享报错errMsg: "updateAppMessageShareData:fail, the permission value is offline verifying"1.可能是手机微信版本不支持最新的分享方法,可以尝试使用旧版本2.使用的方法应该先声明一下,确定你使用的方法声明了。3.如果上面的两种方法都做了,或者之前运行没问题,也没改代码,就报错了,可能就是你的微信公众号认证到期了,记得去申请一下。 之前写的微信分享的功能,今天突然发现分享配置不对,排查下,发现报此错误;总结一下,希望可以给大

qq_34164814的博客 2万+

关于wx.config报错 invalid url domain 及 invalid signature 错误原因及解决方式

当报错 invalid url domain时 ,错误原因就是url并没有在公众号设置里正确设置。

m0_68956554的博客 9594

手机报错:config:invalid signature问题;网页开发工具报错:config:fali,Error:系统错误,错误码:63002,invalidsignature问题

折腾了几天发现是(java老哥单词少了一个字母) 官方建议: invalid signature签名错误。建议按如下顺序检查: 1.确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。 2.确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。 3.确认url是页面完整的url(请在当前页面alert(lo

你好!刘斩仙 9299

微信接口调用'updateTimelineShareData','updateAppMessageShareData' 的踩坑记录

6月份新版微信客户端发布后,用户从微信内的网页分享消息给微信好友,以及分享到朋友圈,开发者将无法获知用户是否分享完成。具体调整点为: (1)分享接口调用后,不再返回用户是否分享完成事件,即原先的cancel事件和success事件将统一为success事件。详情可参考微信JSSDK说明文档 (2)在6月份新版...

weixin_30905981的博客 1万+

前端必备技能~H5网页无法转发给朋友和分享朋友圈,解决方法汇总

H5转发给朋友和分享朋友圈,在前端经常碰到,2021年9月微信又出新政策,不允许通过微信或者浏览器访问H5页面进行转发给朋友和分享到朋友圈。 下面把最新解决方法汇总一下,分享给大家,欢迎留言讨论。 目录 1.开发微信分享功能的正常全流程 2.微信分享官方资料 3.微信分享常见问题 4.微信分享3次实战开发,遇见的坑及解决方法汇总 4.1以前可以分享朋友圈和转发给朋友,现在不行了 4.2wx.config初始化失败 4.3分享接口没有权限 4.4有些环境可以正常分享朋友圈...

一火的专栏 1万+

h5 微信分享,使用updateTimelineShareData ,title和图片也不展示问题

h5 微信分享,使用updateTimelineShareData ,title和图片也不展示问题

拿回忆下酒 6597

记录updateAppMessageShareData,updateTimelineShareData设置无效的坑

按照开发文档已设置好 updateAppMessageShareData updateTimelineShareData 接口权限 微信开发工具也显示 updateTimelineShareData:ok updateAppMessageShareData:ok 表明设置成功,但是转发仍然无效,微信jssdk为jweixin-1.6.0.js版本 1、jsApiList把旧接口也都加上 wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出

donjan的博客 7575
上一篇: 微信公众号退款,app微信退款,支付宝退款,浦发退款
下一篇: 微信分享海报、头像、图片、二维码合成(java)
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值