是基于微信公众号开发的h5页面(使用jssdk接口),由用户A分享给用户B,当用户B再次分享该页面时,无法共享成功。问题是用户B收到的分享链接和用户A打开的链接不一样,用户A的链接是http://test.com/test.html用户B收到的链接是http://test.com/test.html&from=singlemessagefrom=singlemessage是微信客户端自动添加的标签,用来区分分享源然后链接。再次分享时,自动获取的连接需要在js代码中通过encodeURIComponent处理,后台对接收到的url进行urldecode。js和php的示例代码如下:注意ajax,用post,用get表示不需要转义(我没测试过get方法)js代码functionshare(){varnowurl=window.location.href;varnowurlo=nowurl.split('&')[0];$.ajax({type:"post",url:"************************",//后端接口dataType:"json",data:{'url':encodeURIComponent(nowurl)},//注意这里编码了nowurl;success:function(data){wx.config({debug:false,//调试模式appId:data.appId,//公众号appidtimestamp:data.timestamp,//时间戳nonceStr:data.noncestr,//生成签名的随机字符串','chooseWXPay','showOptionMenu',"hideMenuItems","showMenuItems","onMenuShareTimeline",'onMenuShareAppMessage',]//必需,要使用的JS接口列表});wx.ready(function(){//需要在用户点击分享按钮前调用wx.updateAppMessageShareData({title:'',//分享titledesc:'',//分享描述链接:nowurlo,//自动获取(上面js代码中)imgUrl:'',//分享图标成功:function(){}});wx.updateTimelineShareData({title:'',//分享标题链接:nowurlo,自动获取(上面js代码中)imgUrl:'',//分享图标success:function(){},});});}});}php代码publicfunctiongenerateSignature(){$timestamp=time();$jsapiTicket=;//在这里获取jsapi_ticket$noncestr=md5(uniqid(microtime(true),true));//我用的是noncestr$url=urldecode(I('post.url'));$signature=sha1('jsapi_ticket='.$jsapiTicket.'&noncestr='.$noncestr.'×tamp='.$timestamp.'&url='。$网址);$shareConfig['appId']='';//此处为appId$shareConfig['timestamp']=$timestamp;$shareConfig['noncestr']=$noncestr;$shareConfig['signature']=$signature;$shareConfig['url']=$url;echojson_encode($shareConfig);}
