import wx from 'weixin-js-sdk' 
 | 
import { Toast } from 'vant' 
 | 
import { getTimestamp, randomString, getSignature } from './utils.ts' 
 | 
  
 | 
class AuthWechat { 
 | 
  
 | 
  /** 
 | 
   * 获取浏览器地址 
 | 
   * */ 
 | 
  signLink() { 
 | 
    if (typeof window.entryUrl === 'undefined' || window.entryUrl === '') { 
 | 
      window.entryUrl = document.location.href 
 | 
    } 
 | 
    let url = /(Android)/i.test(navigator.userAgent) ? document.location.href : window.entryUrl; 
 | 
    return url.split('#')[0] 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * 当前是否是微信环境 
 | 
   * */ 
 | 
  isWeixin() { 
 | 
    return navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1; 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * 初始化 
 | 
   * */ 
 | 
  wechat(ticket) { 
 | 
    if (!this.isWeixin()) { 
 | 
      return Toast.fail('当前不是微信环境'); 
 | 
    } 
 | 
  
 | 
    return new Promise((resolve, reject) => { 
 | 
      let url = this.signLink() 
 | 
      let timestamp = getTimestamp() 
 | 
      let nonceStr = randomString() 
 | 
      let signature = getSignature(ticket, nonceStr, timestamp, url) 
 | 
  
 | 
      wx.config({ 
 | 
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 
 | 
        appId: process.env.VUE_APP_APPID, // 必填,公众号的唯一标识 
 | 
        timestamp, // 必填,生成签名的时间戳 
 | 
        nonceStr, // 必填,生成签名的随机串 
 | 
        signature, // 必填,签名 
 | 
        jsApiList: [ 
 | 
          'updateAppMessageShareData', // 自定义“分享给朋友”及“分享到QQ”按钮的分享内容 
 | 
          'updateTimelineShareData', // 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容(1.4.0) 
 | 
          'closeWindow', //关闭当前网页窗口接口 
 | 
          'chooseWXPay' 
 | 
        ] 
 | 
      }) 
 | 
      wx.ready(res => { 
 | 
        // 微信SDK准备就绪后执行的回调。 
 | 
        // console.log('wx.ready',res); 
 | 
        resolve(wx, res) 
 | 
      }) 
 | 
      wx.error(err => { 
 | 
        // console.log('wx.error',err) 
 | 
        reject(wx, err) 
 | 
      }) 
 | 
    }) 
 | 
  } 
 | 
  
 | 
  /** 
 | 
   * 微信分享 
 | 
   * @param {object} shareObj 分享内容对象 
 | 
   * */ 
 | 
  wxShare(shareObj) { 
 | 
    if (!this.isWeixin()) { 
 | 
      return Toast.fail('当前不是微信环境'); 
 | 
    } 
 | 
    console.log('分享', shareObj) 
 | 
    let norShare = new Promise((resolve, reject) => { 
 | 
      wx.ready(() => { 
 | 
        wx.updateAppMessageShareData({ 
 | 
          title: shareObj.title, // 分享标题 
 | 
          desc: shareObj.desc, // 分享描述 
 | 
          link: shareObj.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致 
 | 
          imgUrl: shareObj.imgUrl, // 分享图标 
 | 
          success: function () { 
 | 
            resolve('成功了') 
 | 
          }, 
 | 
          fail: function (res) { 
 | 
            console.log('好友分享 失败', res); 
 | 
            alert('fail:' + JSON.stringify(res)); 
 | 
            reject(JSON.stringify(res)) 
 | 
          } 
 | 
        }) 
 | 
      }) 
 | 
    }) 
 | 
    let friendShare = new Promise((resolve, reject) => { 
 | 
      wx.ready(() => { 
 | 
        wx.updateTimelineShareData({ 
 | 
          title: shareObj.title, // 分享标题 
 | 
          desc: shareObj.desc, // 分享描述 
 | 
          link: shareObj.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致 
 | 
          imgUrl: shareObj.imgUrl, // 分享图标 
 | 
          success: function () { 
 | 
            resolve('成功了') 
 | 
          }, 
 | 
          fail: function (res) { 
 | 
            console.log('朋友圈分享 失败', res); 
 | 
            alert('fail:' + JSON.stringify(res)); 
 | 
            reject(JSON.stringify(res)) 
 | 
          } 
 | 
        }) 
 | 
      }) 
 | 
    }) 
 | 
    return Promise.all([norShare, friendShare]) 
 | 
  } 
 | 
  
 | 
  wxPay(response) { 
 | 
    if (!this.isWeixin()) { 
 | 
      return Toast.fail('当前不是微信环境'); 
 | 
    } 
 | 
    console.log('支付', response); 
 | 
    return new Promise((resolve, reject) => { 
 | 
      wx.chooseWXPay({ 
 | 
        appId: response.appId, 
 | 
        timestamp: response.timeStamp, // 支付签名时间戳,注意微信 jssdk 中的所有使用 timestamp 字段均为小写。但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的 S 字符 
 | 
        nonceStr: response.nonceStr, // 支付签名随机串,不长于 32 位 
 | 
        package: response.packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*) 
 | 
        signType: response.signType, // 微信支付V3的传入 RSA ,微信支付V2的传入格式与V2统一下单的签名格式保持一致 
 | 
        paySign: response.paySign, // 支付签名 
 | 
        complete: (res) => { 
 | 
          console.log(res); 
 | 
          reject(res) 
 | 
        }, 
 | 
        success: function (res) { 
 | 
          // 支付成功后的回调函数 
 | 
          console.log(res); 
 | 
          resolve(res) 
 | 
        }, 
 | 
        // cancel: function (err) { 
 | 
        //   reject(err) 
 | 
        // } 
 | 
      }) 
 | 
    }) 
 | 
  } 
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
export default new AuthWechat(); 
 |