levy9527
11/16/2017 - 9:30 AM

微信jsapi

/**
 * Created by levy on 2018/8/15.
 */
import {wechatAppId, jsApiTicket} from '@/const/wechat'

export default function({app}) {
  if (process.env.NODE_ENV !== 'production') return

  app.router.afterEach(async (to, from) => {
    let resp
    try {
      resp = await app.$axios.$get(jsApiTicket)

      let ticket = resp.payload,
        timestamp = new Date().getTime(),
        nonceStr = 'nonceStr',
        url = location.href.split('#')[0] // 这句话是一定的,无论路由模式是hash还是browserHistory

      let str = `jsapi_ticket=${ticket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${url}`,
        signature = sha1(str)

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

      wx.ready(function() {
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,
        // config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。
        // 对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

        // 隐藏所有传播菜单, 不能复制链接等, 只能刷新
        wx.hideAllNonBaseMenuItem()
      })
    } catch (e) {
      console.error('wechat sdk config error : ', e)
    }
  })
}
// 在页面引入js, 支持https
<script src="https://cdn.bootcss.com/js-sha1/0.4.1/sha1.min.js"></script>
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

// 获取js api ticket
// 并生成签名
Vue.http.get(jsApiTicket).then(resp => {
  let ticket = resp.data.ticket || 'sM4AOVdWfPE4DxkXGEs8VGihp7O8Q-JvBGqoKZZAe58Ys9GswAPQPDJGQvbzCVCx9XgueyhJPtSA1Jm4tZFMiQ',
    timestamp = new Date().getTime(),
    nonceStr = 'nonceStr',
    url = location.href.split('#')[0]

  let str = `jsapi_ticket=${ticket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${url}`,
    signature = sha1(str)

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

})


wx.ready(function(){
  // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,
  // config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。
  // 对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
 
  // 隐藏所有传播菜单, 不能复制链接等, 只能刷新
  wx.hideAllNonBaseMenuItem()
})