关于前端微信分享jssdk config:invalid signature 签名错误

关于前端微信分享jssdk config:invalid signature 签名错误


这几天刚刚把微信写完,说出来你可能不信,我写个微信分享一起用了2个礼拜。中间各种心酸,一开始后台老大哥帮我把后台签证给写好了,不过不起作用,想叫他在改,但是后面公司有个项目急着上线,没有空,产品催的又急,自己没有办法,开始自己处理后台.
好了,话不多说,正文开始

首先微信的的东西看微信SDK文档是肯定的

因为我是前端,就只写关于前端的代码了,后台我也涉及了,在文章的最后我会附上我自己改的后台代码


$(function() {
//	微信验证
	var conf = "";
	var urld = window.location.href.split('#')[0];
$.ajax({
		type: "post",
		dataType: 'json',
		url: '接口链接',
		data: {
			url: urld
		},
		
		success: function(conf) {
			console.log(conf);
			configWxAPI(conf);
			var conf = conf.url;
			return conf;
		

		},
		error: function(event, XMLHttpRequest, ajaxOptions, thrownError) {
			
		}
	});

	//配置权限
	function configWxAPI(conf) {
		wx.config({
			debug: false, //开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端
			//打开,参数信息会通过log打出,仅在pc端时才会打印
			appId: "唯一的ID", //必填,公众号的唯一标识
			timestamp: conf.timestamp, //必填,生成签名的时间戳
			nonceStr: conf.nonceStr, //必填,生成签名的随机串
			signature: conf.signature, //必填,签名
			jsApiList: [
				
				'onMenuShareTimeline',
				'onMenuShareAppMessage',
				'onMenuShareQQ',
				'onMenuShareWeibo',
				'previewImage',
				
			] //必填,需要使用的JS接口列表,也就是配置你想使用的调用接口
		});
//		微信分享
		wx.ready(function() {
          //分享的图片
			var imgUrl = ""
                      //分享朋友
			wx.onMenuShareAppMessage({
				title: "标题",
				desc: "内容简介",
				link: "分享链接",
				imgUrl: imgUrl,
				success: function() {
					//分享成功之后执行的回调函数
				},
				cancel: function() {
					//取消分享之后执行的回调函数
				}
			});
                             //分享朋友圈
			wx.onMenuShareTimeline({
				title: "标题",
				desc: "内容简介",
				link: "分享链接",
				imgUrl: imgUrl,
				success: function() {
					//分享成功之后执行的回调函数
				},
				cancel: function() {
					//取消分享之后执行的回调函数
				}
			});
		});
		wx.error(function(conf) {
			console.log(conf);
			// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
		});
	};
	});

后台部分的代码

public function getSignPackage() {
  	
  	if(IS_POST){
	    if(!I('post.url')) $this->ajaxReturn(array('status'=>0,'msg'=>'请输入当前的URL'));
	    $jsapiTicket = $this->getJsApiTicket();
	      //这句代码微信SDK上面没有介绍,但是用来签证的url里面就&后面会自动带有&,所以这里用了php的字符串替换
   		$url =  str_replace("&","&",I('post.url'));

	    $timestamp = time();
	    $nonceStr = $this->createNonceStr();
      ##### 个人理解为,微信的签证是需要随机字符串+url+时间+getticket接口获取的 JSAPI 调用凭证   编码生成的(不知道对不对)

这里的时间还有随机字符串传给和前台的一样,还有url链接是由前台传给后台,在由后台通过这个url进行下面的编码


记住传给后台的url和当前链接要一模一样,记住传给后台的url和当前链接要一模一样,记住传给后台的url和当前链接要一模一样

    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

    $signature = sha1($string);

    $signPackage = array(
    "jsapiTicket" =>$jsapiTicket,
      "appId"     => $this->appId,
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature,
      "rawString" => $string
    );
    $this->ajaxReturn($signPackage);
之后就通过微信的验证OK之后,就可以了分享了 或者调用别的微信接口了

可以关注一下

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值