vue 微信分享

vue 微信分享

参考资料微信JS-SDK说明文档
业务逻辑:
需完成微信朋友圈和微信好友分享,后台返回signature,其他参数需本前端萌萌定义

前期工作

1.安装微信开发者工具
为方便以后开发debug,可以安装微信开发者工具
vue 微信分享_第1张图片
这里会显示微信分享的回调,如有错误可对应解决

2.获取公众号appid和设置IP白名单
登录微信公众平台
目录:开发>基本配置
白名单为IP地址
vue 微信分享_第2张图片

3.设置JS接口安全域名
vue 微信分享_第3张图片
txt文件必须与分享链接目录相对应,例如分享链接是https://www.baidu.com/share,建议将此文件放在根目录https://www.baidu.com下
vue 微信分享_第4张图片
完成上述操作后,可模拟生成signature

开发ing

自行构建vue环境,本萌萌用的是vue2,axios请求http接口数据

1.安装axios

npm install axios

2.安装微信sdk

npm install weixin-js-sdk

3.配置

wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名
    jsApiList: [] // 必填,需要使用的JS接口列表
});

debug 建议打开,上线的时候可关闭,此功能可在微信开发者工具上看到详细信息,也可在微信手机版中,以弹层的方式,弹出相对应的错误信息;
appId 参考上述方式获取;
timestamp,nonceStr可自行定义,如后台有返回数据可忽略
signature 后台会返回

4.utils.js

import axios from 'axios'
import wx from 'weixin-js-sdk'
//随机字符串
function randomString(len) {
    len = len || 32;
    var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
    var maxPos = $chars.length;
    var pwd = '';
    for (var i = 0; i < len; i++) {
        pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
    }
    return pwd;
},

export function wxShare() {
  var timestamp = Date.parse(new Date()) + "",
      nonceStr = randomString(32),
      url = location.href.split('#')[0],
      appId = '';

  var title = '',// 分享标题
    desc = '',// 分享文案
    link = '', // 分享链接
    imgUrl = '';// 分享图标


  return axios.get(`后台接口链接`, { params: { timestamp, nonceStr, url } })
    .then(res => res.data)
    .then(data => {
      var signature = data;
      wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: appId, // 必填,企业号的唯一标识,此处填写企业号corpid
        timestamp: timestamp, // 必填,生成签名的时间戳
        nonceStr: nonceStr, // 必填,生成签名的随机串
        signature: signature,// 必填,签名,见附录1
        jsApiList:["onMenuShareTimeline", "onMenuShareAppMessage"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
      });

      wx.ready(function(){
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
        wx.onMenuShareTimeline({
          title: title, // 分享标题
          desc: desc,
          link: link, // 分享链接
          imgUrl: imgUrl, // 分享图标
          success: function () {
            // 用户确认分享后执行的回调函数
          },
          cancel: function () {
            // 用户取消分享后执行的回调函数
          }
        });

        wx.onMenuShareAppMessage({
          title: title, // 分享标题
          desc: desc,
          link: link, // 分享链接
          imgUrl: imgUrl, // 分享图标
          success: function () {
            // 用户确认分享后执行的回调函数
          },
          cancel: function () {
            // 用户取消分享后执行的回调函数
          }
        });
      });
    })
}

5.页面引入

<script>
    import { wxShare } from '../../api/utils' //引入 wxShare 方法
    export default {
      mounted () {
        wxShare().catch(error => Toast(error.message))
      }
    }
script>

此demo本萌萌试验过,无毒,如有不明白的地方,可在下方评论,本萌萌看到会回复的

你可能感兴趣的:(前端)