参考文章
背景
- 一般的网页在进行相关设置时,在微信端分享的卡片如下

- 如要设置其头图、标题、简介则需要使用到微信的js-sdk
npm install --save weixin-js-sdk
- 封装一个分享的api (shareWx.js)
import wx from 'weixin-js-sdk';
import wxApi from '@/apis/shareWx/wxApi.js'
import encrypt from '@/apis/common/encrypt.js'
import utilHelper from '@/apis/utilHelper.js'
import headerImg from '@/res/common/logo_guan.png'
function sortObjKeyByAscll(obj) {
var keysArr = Object.keys(obj).sort();
var sortObj = {};
for (var i in keysArr) {
sortObj[keysArr[i]] = obj[keysArr[i]];
}
return sortObj;
}
let getJSSDK = async () => {
let nowImgPath = process.env.NODE_ENV == "production" ? `${location.href.split('/index.html#')[0]}/${headerImg}` : location.origin + '/' + headerImg;
let dataForWeixin = {
title: document.title,
desc: utilHelper.scope.shareDesc,
url: location.href,
img: nowImgPath
}
const jsApiList = [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'hideOptionMenu',
'showOptionMenu',
'shareTimeline'
];
try {
let {
data: {
jsApiTicket
}
} = await wxApi.getAccessToken();
let obj = {
url: dataForWeixin.url,
timestamp: Date.parse(new Date()).toString().substr(0, 10),
noncestr: utilHelper.getRandomStr(16),
jsapi_ticket: jsApiTicket
}
let afterObj = sortObjKeyByAscll(obj);
let objStr = ''
for (let key in afterObj) {
objStr += `${key}=${afterObj[key]}&`
}
objStr = objStr.substring(0, objStr.length - 1);
let signature = encrypt.sha1(objStr)
wx.config({
debug: false,
appId: '你自己的应用的appid',
timestamp: obj.timestamp,
nonceStr: obj.noncestr,
signature: signature,
jsApiList,
});
wx.ready(function () {
wx.onMenuShareAppMessage({
title: dataForWeixin.title,
desc: dataForWeixin.desc,
link: dataForWeixin.url,
imgUrl: dataForWeixin.img,
success: function () {
}
})
});
wx.error((res) => {
});
} catch (error) {
}
}
export default {
getJSSDK,
};
- 在app.vue中调用
import shareWx from "@/apis/shareWx/shareWx.js";
updated() {
shareWx.getJSSDK();
},
mounted() {
shareWx.getJSSDK();
},
- 关于调试
- 这里使用的是nat-app进行内网穿透,并将该地址设置到微信公众平台的相关位置(详细见参考文章) 直接使用ip进行分享是不行的
- 微信相关设置