| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 | import third from '@/sheep/api/migration/third'import AuthUtil from '@/sheep/api/member/auth';import SocialApi from '@/sheep/api/member/social';import UserApi from '@/sheep/api/member/user';const socialType = 34; // 社交类型 - 微信小程序let subscribeEventList = [];// 加载微信小程序function load() {  checkUpdate();  getSubscribeTemplate();}// 微信小程序静默授权登陆const login = async () => {  return new Promise(async (resolve, reject) => {    // 1. 获得微信 code    const codeResult = await uni.login();    if (codeResult.errMsg !== 'login:ok') {      return resolve(false);    }    // 2. 社交登录    const loginResult = await AuthUtil.socialLogin(socialType, codeResult.code, 'default');    if (loginResult.code === 0) {      setOpenid(loginResult.data.openid);      return resolve(true);    } else {      return resolve(false);    }  });};// 微信小程序手机号授权登陆const mobileLogin = async (e) => {  return new Promise(async (resolve, reject) => {    if (e.errMsg !== 'getPhoneNumber:ok') {      return resolve(false);    }    // 1. 获得微信 code    const codeResult = await uni.login();    if (codeResult.errMsg !== 'login:ok') {      return resolve(false);    }    // 2. 一键登录    const loginResult = await AuthUtil.weixinMiniAppLogin(e.code, codeResult.code, 'default');    if (loginResult.code === 0) {      setOpenid(loginResult.data.openid);      return resolve(true);    } else {      return resolve(false);    }    // TODO 芋艿:shareInfo: uni.getStorageSync('shareLog') || {},  });};// 微信小程序绑定const bind = () => {  return new Promise(async (resolve, reject) => {    // 1. 获得微信 code    const codeResult = await uni.login();    if (codeResult.errMsg !== 'login:ok') {      return resolve(false);    }    // 2. 绑定账号    const bindResult = await SocialApi.socialBind(socialType, codeResult.code, 'default');    if (bindResult.code === 0) {      setOpenid(bindResult.data);      return resolve(true);    } else {      return resolve(false);    }  });};// 微信小程序解除绑定const unbind = async (openid) => {  const { code } = await SocialApi.socialUnbind(socialType, openid);  return code === 0;};// 绑定用户手机号const bindUserPhoneNumber = (e) => {  return new Promise(async (resolve, reject) => {    const { code } = await UserApi.updateUserMobileByWeixin(e.code);    if (code === 0) {      resolve(true);    }    resolve(false);  });};// 设置 openid 到本地存储,目前只有 pay 支付时会使用function setOpenid(openid) {  uni.setStorageSync('openid', openid);}// 获得 openidasync function getOpenid(force = false) {  let openid = uni.getStorageSync('openid');  if (!openid && force) {    const info = await getInfo();    if (info && info.openid) {      openid = info.openid;      setOpenid(openid);    }  }  return openid;}// 获得社交信息async function getInfo() {  const { code, data } = await SocialApi.getSocialUser(socialType);  if (code !== 0) {    return undefined;  }  return data;}// ========== 非登录相关的逻辑 ==========// 小程序更新const checkUpdate = async (silence = true) => {  if (uni.canIUse('getUpdateManager')) {    const updateManager = uni.getUpdateManager();    updateManager.onCheckForUpdate(function (res) {      // 请求完新版本信息的回调      if (res.hasUpdate) {        updateManager.onUpdateReady(function () {          uni.showModal({            title: '更新提示',            content: '新版本已经准备好,是否重启应用?',            success: function (res) {              if (res.confirm) {                // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启                updateManager.applyUpdate();              }            },          });        });        updateManager.onUpdateFailed(function () {          // 新的版本下载失败          // uni.showModal({          //   title: '已经有新版本了哟~',          //   content: '新版本已经上线啦,请您删除当前小程序,重新搜索打开~',          // });        });      } else {        if (!silence) {          uni.showModal({            title: '当前为最新版本',            showCancel: false,          });        }      }    });  }};// 获取订阅消息模板async function getSubscribeTemplate() {  const { error, data } = await third.wechat.subscribeTemplate();  if (error === 0) {    subscribeEventList = data;  }}// 订阅消息function subscribeMessage(event) {  let tmplIds = [];  if (typeof event === 'string') {    tmplIds.push(subscribeEventList[event]);  }  if (typeof event === 'object') {    event.forEach((item) => {      if (typeof subscribeEventList[item] !== 'undefined') tmplIds.push(subscribeEventList[item]);    });  }  if (tmplIds.length === 0) return;  uni.requestSubscribeMessage({    tmplIds,    fail: (err) => {      console.log(err);    },  });}export default {  load,  login,  bind,  unbind,  bindUserPhoneNumber,  mobileLogin,  getInfo,  getOpenid,  subscribeMessage,  checkUpdate};
 |