手写JS之如何把分享到微信的链接实现二次分享
由于涉及到项目隐私性,隐私关键词用+++代替
// isWeixin 判断是否在微信中。
function isWeixin(){
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == "micromessenger") {
return true;
} else {
return false;
}
}
if (utils.getUrlParam('topicId') && utils.isWeixin()) {
wxShare('COMMUNITY_TOPIC_FX', utils.getUrlParam('topicId'));
}
//异步请求获取到分享信息
function wxShare(eventCode,eventId){
var curUrl = window.location.href;//分享链接 默认是当前url
//分享到微信的链接进行二次分享时可能会被添加一个参数 isappinstalled
//如果有微信加的标识则去掉
if(curUrl.indexOf("isappinstalled") != -1){
curUrl = delParam(curUrl,"isappinstalled");
window.location.href = curUrl;
}
var ajaxUrl = "*******/info?eventCode="+eventCode+"&eventId="+eventId;
$.ajax({
url:ajaxUrl,
type:'GET',
dataType: 'json',
success: function (res) {
if(res.returnCode==0){
var shareInfoWX=res.body.shareInfoList[2];//这里的数据处理要看实际后台传参列表结构。
//拿给定的分享信息继续调用接口获取微信参数配置
shareByWxConfig(shareInfoWX.shareTitle,shareInfoWX.shareContent,shareInfoWX.sharePicUrl,curUrl)
}else{
console.log(res.returnMsg);
}
},
error: function (e) {
console.log(e);
}
});
}
//删除给定url的特定参数paramKey
function delParam(url,paramKey) {
var beforeUrl = url.substr(0, url.indexOf("?")); //页面主地址(参数之前地址)
var urlParam = url.substr(url.indexOf("?")+1); //页面参数
var nextUrl = "";
var newUrl = "";
var arr = new Array();
if (urlParam != "") {
var urlParamArr = urlParam.split("&"); //将参数按照&符分成数组
for (var i = 0; i < urlParamArr.length; i++) {
(urlParamArr[i].indexOf(paramKey)&&arr.push(urlParamArr[i]));
}
}
if (arr.length > 0) {
nextUrl = "?" + arr.join("&");
}
newUrl = beforeUrl + nextUrl;
return newUrl;
}
//获取微信参数配置
function shareByWxConfig(title,content,icon,curUrl){
if(!curUrl){
var curUrl = window.location.href;//分享链接 默认是当前url
//如果有微信加的标识则去掉
if(curUrl.indexOf("isappinstalled") != -1){
curUrl = curUrl.split("?")[0];
window.location.href = curUrl;
}
}
//微信设置
var curHttp = window.location.origin;
var ajaxUrl = curHttp+"++++++/api/v1/weixin/weixin-jsapi-sign?system=1¤tUrl="+curUrl;
// ajax请求后台接口,获取微信签名
$.ajax({
url: ajaxUrl,
data:{
url: curUrl
},
type: 'GET',
dataType: 'json',
success: function (res) {
if(res.returnCode==0){
wx.config({
// debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: res.body.appId, // 必填,换成你公众号里的appid
timestamp: res.body.timestamp, // 必填,生成签名的时间戳
nonceStr: res.body.nonceStr, // 必填,生成签名的随机串
signature: res.body.signature,// 必填,签名
jsApiList: ['checkJsApi','updateTimelineShareData','hideOptionMenu','updateAppMessageShareData'] // 必填,需要使用的JS接口列表
});
wx.ready(function(){
//wx.hideOptionMenu();/***隐藏分享菜单****/
wx.checkJsApi({
jsApiList: [
'getLocation',
'updateTimelineShareData',
'updateAppMessageShareData'
],
success: function (res) {
//alert(res.errMsg);
}
});
wx.updateAppMessageShareData({//分享给好友接口自定义数据 标题和内容描述可以自定义修改
title: title, // 分享标题
desc: content, // 分享描述
link: curUrl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: icon, // 分享图标
success: function () {
// 用户点击了分享后执行的回调函数
console.log('用户点击了分享');
}
});
wx.updateTimelineShareData({//分享到朋友圈接口自定义数据 标题和内容描述可以自定义修改
title: title, // 分享标题
desc: content, // 分享描述
link: curUrl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: icon, // 分享图标
success: function () {
// 用户点击了分享后执行的回调函数
console.log('用户点击了分享');
}
});
});
wx.error(function(res){
console.log('wx jsapi fail');
});
}else{
console.log(res.returnMsg);
}
},
error: function (e) {
console.log(e);
}
});
}