以下两图一个是默认的分享样式,一个是自定义的分享样式


在微信环境中分享一个H5,分享出来的卡片默认是没有文案和图标的。若想添加文案和图标需要借助微信的js-sdk
1.公众号的设置
首先得有一个公众号,这个是前提。微信内分享的这个H5页面可以和公众号没有关系,但是自定义图标的这个功能相当于借助了公众号的能力。
1.1登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”
按照提示下载校验文件放置到H5的域名根目录下,可在浏览器访问校验文件验证成功与否。
2.引入js文件
<script></script>标签引入js文件即可
3.通过config接口注入权限验证配置
主要参照微信js-sdk说明文档
1 2 3 4 5 6 7 8
   | wx.config({   debug: true,    appId: '',    timestamp: ,    nonceStr: '',    signature: '',   jsApiList: []  });
  | 
 
timestamp、nonceStr、signature为请求自己公司后端接口返回的值,可以让后端同学看文档中签名算法的相关部分。这样做的原因是调用微信的js接口传的参要与后端调微信接口的参数一致。
4.通过ready接口处理成功验证
1 2 3 4 5
   | wx.ready(function(){          });
  | 
 
5.通过error接口处理失败验证
1 2 3 4
   | wx.error(function(res){       });
  | 
 
6.具体的功能
6.1分享好友(微信好友或qq好友)
1 2 3 4 5 6 7 8 9 10 11
   | wx.ready(function () {      wx.updateAppMessageShareData({      title: '',      desc: '',      link: '',      imgUrl: '',      success: function () {            }   }) }); 
  | 
 
6.2分享到朋友圈或qq空间
1 2 3 4 5 6 7 8 9 10
   | wx.ready(function () {         wx.updateTimelineShareData({      title: '',      link: '',      imgUrl: '',      success: function () {            }   }) }); 
  | 
 
上一个例子吧:
vue-cli搭建的H5页面相关功能统一写在main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
   |  let ruleName = location.href.split('#/')[1].split('?')[0];
  const shareInfoMap = {     usedCar: {         title: '好生活二手车特惠活动',         desc: '好生活好车特惠,高价置换回购,点击报名,免费评估。',         icon: 'https://cdn.lifeat.cn/webappGroup/usedcar-shareIcon.png',     },     default: {         title: '',         desc: window.location.href,         icon: 'https://cdn.lifeat.cn/webappgroup/betterLifelogo.png',     },
  }
  let infoMap = shareInfoMap[ruleName] ? shareInfoMap[ruleName] : shareInfoMap['default'];
  if (shareInfoMap[ruleName]) {          request.post('/wxmp/sign/jsSdk', {         url: location.href,     }).then(res => {         let { timestamp, nonceStr, signature, appId } = res;         wx.config({             debug: false,             appId,             timestamp,             nonceStr,             signature,             jsApiList: ['updateAppMessageShareData','updateTimelineShareData']         });         wx.error(function (errres) {             console.info(errres)         })         wx.ready(() => {                console.info('ready')                          wx.updateAppMessageShareData({                 title: infoMap.title,                  desc: infoMap.desc,                  link: location.href,                  imgUrl: infoMap.icon,                  success: function () {                     console.info("成功")                                      },                 fail: function (erres) {                     console.info('失败:', erres)                 }             })                          wx.updateTimelineShareData({                 title: infoMap.title,                  link: location.href,                  imgUrl: infoMap.icon,                  success: function () {                     console.info("成功")                                      },                 fail: function (erres) {                     console.info('失败:', erres)                 }             })         });     }).catch(err => {         console.info('err:', err)     }) }
 
  |