基于微信民众号开辟的h5页面(运用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能胜利分享。题目出在用户B收到的分享链接与用户A翻开的链接差别
A用户的链接为
http://test.com/test.html
B用户收到的衔接
http://test.com/test.html&from=singlemessage
from=singlemessage是微信客户端为了辨别分享泉源再链接后自动增加的标记,
再次分享时,须要在js代码中对自动猎取的衔接举行encodeURIComponent处置惩罚,背景再对收到的url举行urldecode处置惩罚。
js与php示例代码以下:
注重ajax,用的post,用get听说不必转义(get体式格局本人未做测试)
js代码
function share(){
var nowurl = window.location.href;
var nowurlo = nowurl.split('&')[0];
$.ajax({
type : "post",
url : "***********************", //后端接口
dataType : "json",
data : { 'url': encodeURIComponent(nowurl) }, // 注重此处对nowurl举行encode;
success : function (data) {
wx.config({
debug : false, //调试形式
appId : data.appId, //民众号appid
timestamp : data.timestamp, //时候戳
nonceStr : data.noncestr, //天生署名的随机串
signature : data.signature, //署名
jsApiList : [
'updateAppMessageShareData',
'updateTimelineShareData',
'onMenuShareAppMessage',
'onMenuShareTimeline',
'chooseWXPay',
'showOptionMenu',
"hideMenuItems",
"showMenuItems",
"onMenuShareTimeline",
'onMenuShareAppMessage',
] // 必填,须要运用的JS接口列表
});
wx.ready(function () { //需在用户能够点击分享按钮前就先挪用
wx.updateAppMessageShareData({
title : '', // 分享题目
desc : '', // 分享形貌
link : nowurlo, // 自动猎取(上面js代码中)
imgUrl : '', // 分享图标
success : function () {
}
});
wx.updateTimelineShareData({
title : '', // 分享题目
link : nowurlo, 自动猎取(上面js代码中)
imgUrl : '', // 分享图标
success : function () {
},
});
});
}
});
}
php代码
public function generateSignature(){
$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=' . $url);
$shareConfig['appId'] = '';//此处为appId
$shareConfig['timestamp'] = $timestamp;
$shareConfig['noncestr'] = $noncestr;
$shareConfig['signature'] = $signature;
$shareConfig['url'] = $url;
echo json_encode($shareConfig);
}