微信jssdk封装使用

介绍

在做项目中,有一个需求要在网页中实现自定义分享到微信的内容.加上了解过 jssdk ,为方便使用,进一步封装了 jweixin

实现

这里就不说明公众号怎么配置,后端怎么与微信签名了,可参考下面的博文,本篇主要展示前端分享功能代码实现

::: tip 安装 jweixin-module

npm i jweixin-module --save

:::

::: tip 封装 以下我使用了封装好的 utilapi ::: details 点我查看代码

var jweixin = require('jweixin-module')
export default {  
  //判断是否在微信中  
  isWechat: function () {  
    var ua = window.navigator.userAgent.toLowerCase()
    if (ua.match(/micromessenger/i) == 'micromessenger') {  
      return true
    } else {  
      return false
    }  
  },  
  //初始化sdk配置  
  initJssdk: function(util, api, data, callback) {  
    //服务端进行签名:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#4
    let apiSrc = api.getWechatJsSign
    let params = {
      url: data.link
    }
    let tempToken = {'token': data.token}
    uni.showLoading()
    util.postData.call(this, apiSrc, params, 'POST', function (res) {
      if (res) {
        let data = res.data.data
        console.log(data)
        jweixin.config({
          debug: false, // 开启调试模式
          appId: data.appId, // 必填,公众号的唯一标识
          timestamp: data.timestamp, // 必填,生成签名的时间戳
          nonceStr: data.nonceStr, // 必填,生成签名的随机串
          signature: data.signature,// 必填,签名
          jsApiList: [
            'updateAppMessageShareData',//自定义“分享给朋友”及“分享到QQ”按钮的分享内容
            'updateTimelineShareData',//自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容
            'onMenuShareWeibo',//获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
            'checkJsApi',  
            // 'onMenuShareTimeline',  
            // 'onMenuShareAppMessage'
          ], // 必填,需要使用的JS接口列表
          success: () => {
            console.log('success')
          },
          fail: () => {
            console.log('fail')
          }
        })
        //配置完成后,再执行分享等功能  
        if (callback) {
          callback(res.data.data)
        }
      }
      uni.hideLoading()
    }, function (res) {
      uni.hideLoading()
      uni.showToast({ title: res.errMsg, icon: 'none', duration: 1500 })
    }, tempToken)
  },
  //在需要自定义分享的页面中调用  
  share: function (util, api, data, type) {
    let url = data.url ? data.url : window.location.href
    //每次都需要重新初始化配置,才可以进行分享
    let signData
    this.initJssdk(util, api, data, function(signData) {
      signData = signData
    })
    jweixin.ready(function(){
      var shareData = {  
        title: data && data.title ? data.title : signData.site_name,
        desc: data && data.desc ? data.desc : signData.site_description,  
        link: url,
        imgUrl: data && data.img ? data.img : signData.site_logo,  
        success: function (res) {  
          //用户点击分享后的回调,这里可以进行统计,例如分享送金币之类的  
          // 关闭页面的弹框
          console.log('关闭页面的弹框')
        },
        cancel: function (res) {
          let errMsg = '分享失败,请咨询管理员'
          uni.showToast({ title: errMsg, icon: 'none', duration: 1500 })
        }
      }
      switch (type) {
        //分享给朋友接口
        case 1:
          jweixin.updateAppMessageShareData(shareData)
          // jweixin.onMenuShareAppMessage(shareData)
          break
        //分享到朋友圈接口
        case 2:
          jweixin.updateTimelineShareData(shareData)
          break
        default:
          jweixin.updateAppMessageShareData(shareData)
          // jweixin.onMenuShareAppMessage(shareData)
      }
    })
  }  
}

:::

::: tip 页面调用

// 引入
import {util, api, config, wechat} from '../../utils/index'

// 构建data对象,调用wechat方法
let data = {
  title: title,
  desc: desc,
  link: url,
  img: img,
  token: that.token
}
wechat.share(util, api, data, 1)

:::

参考

Last updated