微信Js分享朋友接口invalid signature解决方法

导致这个错误是因为签名算法错误

签名需要 noncestr timestamp(因为变量长度限制,不能直接使用毫秒时间戳,要除以1000) jsapi_ticket url

根据微信的文档说明做的话 最容易出错的地方是url

文档上对url的描述反正我是没怎么看懂~

好了吐槽完毕,是时候上代码了

Java代码:

        @RequestMapping("share2Firend")
        //from、isappinstalled参数是自定义分享接口时 微信服务器带过来的
	public ModelAndView share2Firend(HttpServletRequest request, String from, String isappinstalled) {
		String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
		String noncestr = UUID.randomUUID().toString().replace("-", "");
		//jsapiTicket放redis中全局缓存
		String jsapiTicket = wechatRemoteService.getJsApiTicket();

		//微信给的例子中说url不能硬编码,但还是留了坑,下面注释是php例子中的代码段

		// 注意 URL 一定要动态获取,不能 hardcode.
                //$protocol = (!empty($_SERVER[‘HTTPS‘]) && $_SERVER[‘HTTPS‘] !== ‘off‘ || $_SERVER[‘SERVER_PORT‘] == 443) ? "https://" : "http://";
                //$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
                
                //如果你的微信后台端口是80的话,一定不能把HTTP_HOST也拼接到url上面去,否则签名失败
		String share2FirendUrl = request.getScheme() + "://"
				+ request.getServerName() + request.getRequestURI();
		if(from != null && isappinstalled != null) share2FirendUrl += "?from="+from+"&isappinstalled="+isappinstalled;

		log.debug("share2FirendUrl:{}", share2FirendUrl);
		String signature = getSignature(timestamp, noncestr, jsapiTicket, share2FirendUrl);

		ModelAndView mav = new ModelAndView();
		mav.addObject("timestamp", timestamp);
		mav.addObject("noncestr", noncestr);
		mav.addObject("signature", signature);
		mav.addObject("share2FirendUrl", share2FirendUrl);
		mav.addObject("appId", wechatRemoteService.getAppId());
		mav.setViewName("dispatcher:/share.jsp");
		return mav;
	}
	private String getSignature(String timestamp, String noncestr, String jsapiTicket, String share2FirendUrl) {
		String[] array = { "timestamp=" + timestamp, "noncestr=" + noncestr,
				"jsapi_ticket=" + jsapiTicket, "url=" + share2FirendUrl };
		Arrays.sort(array);
		String signature = array[0].concat("&"+array[1]).concat("&"+array[2]).concat("&"+array[3]);
		log.debug("share2Firend--> signature:{}", signature);
		signature = DigestUtils.sha1Hex(signature);
		log.debug("sha1Hex signature:{}", signature);
		return signature;
	}

前端代码:

        <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" type="text/javascript"></script>
	<script type="text/javascript">
    	wx.config({
    	    debug: false, 
    	    appId: ‘${appId}‘,
    	    timestamp: ‘${timestamp}‘,
    	    nonceStr: ‘${noncestr}‘,
    	    signature: ‘${signature}‘,
    	    jsApiList: [‘onMenuShareAppMessage‘]
    	});
    
    	wx.ready(function () {
    		wx.onMenuShareAppMessage({
    		    title: ‘分享‘, 
    		    desc: ‘分享测试‘,
    		    link: ‘${share2FirendUrl}‘,
    		    imgUrl: ‘http://xxxx/images/headimg.png‘,
    		    success: function () { 
    		    	WeixinJSBridge.call(‘closeWindow‘);
    		    }
    		});
        });

	</script>
时间: 2024-12-21 15:38:23

微信Js分享朋友接口invalid signature解决方法的相关文章

微信js分享朋友圈

1.绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 2.引入js文件 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script type="text/javascript" src=

微信js分享朋友圈(二)

近期又用到微信分享的功能了.虽然不是第一次用了,依然我又有幸踩到了一个坑,所以分享一下吧. 根据微信sdk写的代码一步步很顺利,但是后面就是获取微信返回的分享结果的回调的时候IOS老是有问题,然后就网上各种搜,但是我得到的大部分答案是分享链接url的限制即:该分享链接域名或路径必须与当前页面对应的公众号JS安全域名一致. but我的url符合要求就还是拿不到分享后的回调,然后经过一番折腾最后发现在微信分享成功回调的方法里加一个定时器就ok了. →提示: 这里我使用的还是旧的版本(1.3.2)这里

微信 js sdk C# 版 invalid signature 问题解决

采用Senparc.Weixin SDK 服务器端代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Senparc.Weixin.MP.CommonAPIs; using Senparc.Weixin.MP.Helpers; using Senparc

微信网页分享 jssdk config:invalid signature 签名错误

invalid signature签名错误.建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认config中noncestr, timestamp与用以签名中的对应noncestr, timestamp一致. 确认url是页面完整的url,包括GET参数部分. 确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致. 确

js中style.display=&quot;&quot;无效的解决方法

本文实例讲述了js中style.display=""无效的解决方法.分享给大家供大家参考.具体解决方法如下: 一.问题描述: 在js中我们有时想动态的控制一个div显示或隐藏或更多的操作,但如果我们style.display=""可能导致没有效果. 看下面一段代码: 复制代码代码如下: <style> #name {     display:none; }</style></head><body><div id=

Bad Request (Invalid Hostname)解决方法

当在Windows Server 2003+IIS6做Web服务器,出现打开如http://paullevi.oicp.net,出现,Bad Request (Invalid Hostname) 的提示时,更改IIS6的Internet 信息服务管理器的默认网站里的属性->网站->IP地址栏,设置为(全部未分配) ,这样问题就可以解决了 Bad Request (Invalid Hostname)解决方法,布布扣,bubuko.com

ADF控件ID变化引发JS无法定位控件的解决方法

原文地址:ADF控件ID变化引发JS无法定位控件的解决方法作者:Nicholas JSFF定义的控件ID到了客户端时往往会改变.例如在JSFF中的一个的ID为"ot1",但是当这个JSFF被嵌入TaskFlow中,并以Region的方式在页面展示时,在浏览器中,此控件的ID就会变成"r1:0:ot1". ADF动态修改控件ID的原因其实是为了提供重用性的同时防止控件ID的冲突.试想如果有两个JSFF中分别都有一个,其ID均为ot1,那么当这两个JSFF被引入同一个页

好系统U盘启动分享win7电脑无法关机解决方法

最近有位win7系统用户在电脑关机的时候,碰到了电脑无法关机的情况,很多时候需要强制关机,才能够把电脑关机,用户不知道怎么办,为此非常苦恼,那么win7电脑无法关机怎么办呢?今天好系统U盘启动为大家分享win7电脑无法关机解决方法. 电脑无法关机解决方法: 1.在Win7系统桌面左下角点击开始菜单,弹出菜单栏,在里面找到"运行"选项,并单击它.如图所示: 运行 2.在弹出的运行对话框中输入"gpedit.msc",然后单击"确定".如图所示: g

微信JSAPI分享朋友圈调试经验:invalid signature签名错误排查

.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(location.href.split('#')[0])确认),