| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | /** * 本模块封装微信浏览器下的一些方法。 * 更多微信网页开发sdk方法,详见:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html */import jweixin, { ready } from 'weixin-js-sdk';import $helper from '@/sheep/helper';import AuthUtil from '@/sheep/api/member/auth';let configSuccess = false;export default {  // 判断是否在微信中  isWechat() {    const ua = window.navigator.userAgent.toLowerCase();    // noinspection EqualityComparisonWithCoercionJS    return ua.match(/micromessenger/i) == 'micromessenger';  },  isReady(api) {    jweixin.ready(api);  },  // 初始化 JSSDK  async init(callback) {    if (!this.isWechat()) {      $helper.toast('请使用微信网页浏览器打开');      return;    }    // 调用后端接口,获得 JSSDK 初始化所需的签名    const url = location.href.split('#')[0];    const { code, data } = await AuthUtil.createWeixinMpJsapiSignature(url);    if (code === 0) {      jweixin.config({        debug: false,        appId: data.appId,        timestamp: data.timestamp,        nonceStr: data.nonceStr,        signature: data.signature,        jsApiList: ['chooseWXPay'], // TODO 芋艿:后续可以设置更多权限;        openTagList: data.openTagList      });    }    // 监听结果    configSuccess = true;    jweixin.error((err) => {      configSuccess = false;      console.error('微信 JSSDK 初始化失败', err);      // $helper.toast('微信JSSDK:' + err.errMsg);    });    jweixin.ready(() => {      if (configSuccess) {        console.log('微信 JSSDK 初始化成功');      }    })    // 回调    if (callback) {      callback(data);    }  },  //在需要定位页面调用 TODO 芋艿:未测试  getLocation(callback) {    this.isReady(() => {      jweixin.getLocation({        type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'        success: function (res) {          callback(res);        },        fail: function (res) {          console.log('%c微信H5sdk,getLocation失败:', 'color:green;background:yellow');        },      });    });  },  //获取微信收货地址 TODO 芋艿:未测试  openAddress(callback) {    this.isReady(() => {      jweixin.openAddress({        success: function (res) {          callback.success && callback.success(res);        },        fail: function (err) {          callback.error && callback.error(err);          console.log('%c微信H5sdk,openAddress失败:', 'color:green;background:yellow');        },        complete: function (res) {},      });    });  },  // 微信扫码 TODO 芋艿:未测试  scanQRCode(callback) {    this.isReady(() => {      jweixin.scanQRCode({        needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,        scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有        success: function (res) {          callback(res);        },        fail: function (res) {          console.log('%c微信H5sdk,scanQRCode失败:', 'color:green;background:yellow');        },      });    });  },  // 更新微信分享信息 TODO 芋艿:未测试  updateShareInfo(data, callback = null) {    this.isReady(() => {      const shareData = {        title: data.title,        desc: data.desc,        link: data.link,        imgUrl: data.image,        success: function (res) {          if (callback) {            callback(res);          }          // 分享后的一些操作,比如分享统计等等        },        cancel: function (res) {},      };      // 新版 分享聊天api      jweixin.updateAppMessageShareData(shareData);      // 新版 分享到朋友圈api      jweixin.updateTimelineShareData(shareData);    });  },  // 打开坐标位置 TODO 芋艿:未测试  openLocation(data, callback) {    this.isReady(() => {      jweixin.openLocation({        //根据传入的坐标打开地图        latitude: data.latitude,        longitude: data.longitude,      });    });  },  // 选择图片 TODO 芋艿:未测试  chooseImage(callback) {    this.isReady(() => {      jweixin.chooseImage({        count: 1,        sizeType: ['compressed'],        sourceType: ['album'],        success: function (rs) {          callback(rs);        },      });    });  },  // 微信支付  wxpay(data, callback) {    this.isReady(() => {      jweixin.chooseWXPay({        timestamp: data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符        nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位        package: data.packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)        signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'        paySign: data.paySign, // 支付签名        success: function (res) {          callback.success && callback.success(res);        },        fail: function (err) {          callback.fail && callback.fail(err);        },        cancel: function (err) {          callback.cancel && callback.cancel(err);        },      });    });  },};
 |