需求描述
有个移动端h5项目,需要做微信内卡片分享。 普通页面分享的卡片标题和描述为项目名,图片为项目logo。 内部产品详情页面分享的描述为产品主题,图片为产品banner的第一张图片。
前期准备
1、认真查看微信网页开发文档
2、与后端沟通,需要后端对接js-sdk输出一个接口,返回一些参数。后端参考 JS-SDK使用权限签名算法
开发
2、引入js
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
3、编写share.js 代码如下
// 接口方法引入
import { wechatShare } from "@/api/other.js";
// 暴露分享方法
export function setWechatShare(desc, icon) {
// 分享信息
let shareInfo = {
title: "标题",
desc: desc ? desc : "详情",
icon: icon ? icon : "https://www.baidu.com/img/PC_gaokao20240605_69257873b54a0da9d40aa7afdd9ec88d.gif",
};
// 调用接口
wechatShare({ url: location.href }).then(({ content }) => {
// 通过config接口注入权限验证配置
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: content.appId, // 必填,公众号的唯一标识
timestamp: content.timestamp, // 必填,生成签名的时间戳
nonceStr: content.nonceStr, // 必填,生成签名的随机串
signature: content.signature, // 必填,签名
jsApiList: ["updateAppMessageShareData", "updateTimelineShareData"], // 必填,需要使用的JS接口列表
});
// 通过error接口处理失败验证
wx.error(function (errres) {
console.info("失败:", errres);
});
// 通过ready接口处理成功验证
wx.ready(() => {
console.info("ready");
//分享朋友
wx.updateAppMessageShareData({
title: infoMap.title, // 分享标题
desc: infoMap.desc, // 分享描述
link: location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: infoMap.icon, // 分享图标
success: function () {
console.info("成功");
},
fail: function (erres) {
console.info("失败:", erres);
},
});
//分享到 朋友圈
wx.updateTimelineShareData({
title: infoMap.title, // 分享标题
link: location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: infoMap.icon, // 分享图标
success: function () {
console.info("成功");
},
fail: function (erres) {
console.info("失败:", erres);
},
});
});
});
}
4、引用 share.js
- 项目其他页面默认分享 main.js
import { getShareInfo } from "@/utils/share.js";
getShareInfo()
- 产品详情页分享 productDetail.js
import { getShareInfo } from "@/utils/share.js";
...
methods: {
// 加载产品详情时给方法参数赋值
getProductDetail(){
....
getShareInfo(this.productObj.theme, this.productObj.imgList[0].url);
...
}
},
...
// 页面销毁时,回到默认
destroyed(){
getShareInfo();
}
测试
1、内网穿透,我使用的是cploar-macOS教程
2、去微信公众号平台获取一个验证txt文件,放到服务器的根目录下。 如下图:
3、去微信公众号平台配置域名。如下图:
4、最后就可以在手机端,分享链接测试
小tips: 如果聊天框点击链接分享后,转发的还是链接。可以将链接收藏,从收藏中点击,然后分享。
bug处理
1、"errMsg":"config:invalid url domain" 原因是地址配置失败了,可以自己查看是否有在微信公众号平台配置成功。或者txt文件,没有放在正确目录下。
2、"errMsg":"config:invalid signature" 原因是校验失败,可以请后端同学看看是否返回的参数有问题。
写在最后
之前遇到问题,从来都是解决问题,但是没有输出什么文件。最近正好碰到了这个需求,然后按照自己的开发思路,写了这一篇。希望对你有用。