最近需要用uni-app生成一套基于wordpress的H5网站,参考微慕提供的uni-app开源版(与微信小程序代码编写规范基本一致),H5网站很快就生成了,但是在分享到微信的时候,H5由于是单页面的结构,并不能直接用PHP代码实现分享卡片的自定义标题、摘要与图片。于是有以下纪录:
首先,H5用的是hash模式(在menifest.json里选择)。
然后,在详情页detail.vue里引入微信JSSDK。这一步需要提前将微信SDK的js代码放置到指定的目录里,比如我就把SDK放在了 components --> jweixin-module目录下,命名为 jweixin.js。
现在在detail.vue里 fetchDetailData 方法里加入微信自定义分享代码,这一步很关键,是个大坑!
我一开始将fetchDetailData获取到的页面的标题、摘要、首图三个参数用setData写到当前页面的data里,然后我把微信分享代码独立写成了一个方法,比如initWXJSSDK,然后再在onLoad里的fetchDetailData方法之后调用。看起来都正确对吧?但是就是获取不到正确的参数。
所以为了避开这个坑,我将微信分享js代码写进fetchDetailData里,在
uni.setNavigationBarTitle({
title: res.data.category_name
});
之后,添加以下代码:
/********微信转发分享开始*********/
var sharetitle = response.data.title.rendered;
var sharedesc = response.data.excerpt.rendered;
var shareimage = response.data.content_first_image;
var jweixin = require('../../components/jweixin-module/jweixin.js'); //从指定目录引用微信JSSDK
var surl = encodeURIComponent(window.location.href.split('#')[0]);
//据说可以解决URL中带参数的问题,前台用的js编码,后台php解码
uni.request({
method: 'POST',
url: Api.getWXJSSDK(), //从后端获取签名
header: {
'content-type': 'application/x-www-form-urlencoded',
},
data: {
url: surl, //一定要传递这个参数到后端,这与微信官方提供的代码是不同的,否则无法正确生成签名
},
success: res => {
jweixin.config({ //这里将wx.config 改成 jweixin.config,因为uni-app自己定义了一套wx对象,为了避免冲突,故改名,下同。
debug: false,
appId: res.data.appId,
timestamp: res.data.timestamp,
nonceStr: res.data.nonceStr,
signature: res.data.signature,
jsApiList: [
'updateAppMessageShareData', //这里用了新接口
'updateTimelineShareData'
]
});
jweixin.ready(() => {
//配置分享数据
let shareData = {
title: sharetitle, //分享的标题
desc: sharedesc, //分享的描述
//link: window.location.href.split('#')[0], //分享的链接
link: window.location.href, //分享的链接
imgUrl: shareimage, //分享的图片链接
success(response) {
console.log('分享成功');
},
};
//分享给朋友接口
jweixin.updateAppMessageShareData(shareData);
//分享到朋友圈接口
jweixin.updateTimelineShareData(shareData);
});
},
fail: () => {
console.log('request fail', err);
},
complete: () => {}
});
/**********微信转发分享结束***********/
至此即实现了H5页面在微信中转发分享自定义标题、摘要与图片。