From 1cf7f78b7c2ece440722d1bc9f8591be899a5706 Mon Sep 17 00:00:00 2001 From: Gao xiaosong <704041637@qq.com> Date: Mon, 19 Apr 2021 15:00:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BE=AE=E4=BF=A1=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E6=97=A0=E6=B3=95=E4=BD=BF=E7=94=A8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/wechat.js | 331 +++++++++++++++++++++++++------------------------ 1 file changed, 166 insertions(+), 165 deletions(-) diff --git a/libs/wechat.js b/libs/wechat.js index 222a4a4..f7a70b0 100644 --- a/libs/wechat.js +++ b/libs/wechat.js @@ -1,36 +1,39 @@ -import { subscribeMessage } from "@/libs/order"; -import { getProvider } from "@/utils"; -import WechatJSSDK from "wechat-jssdk/dist/client.umd"; -import { getWechatConfig, wechatAuth } from "@/api/public"; -import { parseQuery } from "@/utils"; -import cookie from "@/utils/store/cookie"; -import store from "@/store"; -import dayjs from "dayjs"; +import { subscribeMessage } from '@/libs/order' +import { getProvider } from '@/utils' +import WechatJSSDK from 'wechat-jssdk/dist/client.umd' +import { getWechatConfig, wechatAuth } from '@/api/public' +import { parseQuery } from '@/utils' +import cookie from '@/utils/store/cookie' +import store from '@/store' +import dayjs from 'dayjs' // 支付模块 -export const weappPay = (option) => { +export const weappPay = option => { return new Promise((resolve, reject) => { if (store.state.$deviceType == 'weixinh5') { setTimeout(() => { - location.href = option.mweb_url; - }, 100); + location.href = option.mweb_url + }, 100) resolve() return } if (store.state.$deviceType == 'weixin') { - pay(option).then(() => { - uni.showToast({ - title: '支付成功', icon: 'success', duration: 5000, - }); - resolve() - }) + pay(option) + .then(() => { + uni.showToast({ + title: '支付成功', + icon: 'success', + duration: 5000, + }) + resolve() + }) .finally(res => { //if(typeof(res) == "undefined") return }) - .catch(function () { - uni.showToast({ title: '支付失败', icon: 'none', duration: 5000 }); + .catch(function() { + uni.showToast({ title: '支付失败', icon: 'none', duration: 5000 }) reject() - }); + }) return } // 吊起微信支付 @@ -48,13 +51,15 @@ export const weappPay = (option) => { uni.requestPayment({ provider: 'wxpay', ...option, - timestamp: orderInfo.timestamp, + timeStamp: orderInfo.timestamp, orderInfo, - success: (success) => { + success: success => { console.log(success) uni.showToast({ - title: '支付成功', icon: 'success', duration: 5000, - }); + title: '支付成功', + icon: 'success', + duration: 5000, + }) let time = setTimeout(() => { clearTimeout(time) resolve(success) @@ -63,28 +68,26 @@ export const weappPay = (option) => { subscribeMessage() // #endif }, - fail: (error) => { + fail: error => { console.log(error) if (error.errMsg == 'requestPayment:fail cancel') { - uni.showToast({ title: '已取消支付', icon: 'none', duration: 5000 }); + uni.showToast({ title: '已取消支付', icon: 'none', duration: 5000 }) } else { - uni.showToast({ title: error || error.msg, icon: 'none', duration: 5000 }); + uni.showToast({ title: error || error.msg, icon: 'none', duration: 5000 }) } reject(error) - } + }, }) // }) }) } - - -const STATE_KEY = "wx_authorize_state"; -const WX_AUTH = "wx_auth"; -const BACK_URL = "login_back_url"; -const LOGINTYPE = "loginType"; -let instance; -let wechatObj; +const STATE_KEY = 'wx_authorize_state' +const WX_AUTH = 'wx_auth' +const BACK_URL = 'login_back_url' +const LOGINTYPE = 'loginType' +let instance +let wechatObj let appId let wechatLoading = false @@ -92,41 +95,41 @@ export function wechat() { console.log('初始化微信配置') wechatLoading = false return new Promise((resolve, reject) => { - if (instance) return resolve(instance); + if (instance) return resolve(instance) getWechatConfig() .then(res => { console.log(res.data) - const _wx = WechatJSSDK(res.data); + const _wx = WechatJSSDK(res.data) console.log(_wx) appId = res.data.appId - wechatObj = _wx; + wechatObj = _wx _wx .initialize() .then(() => { - instance = _wx.wx; - instance.initConfig = res.data; - resolve(instance); + instance = _wx.wx + instance.initConfig = res.data + resolve(instance) }) .catch(error => { console.log(error) uni.showToast({ title: error, - icon: "none", - duration: 2000 - }); + icon: 'none', + duration: 2000, + }) reject() - }); + }) }) .catch(err => { - console.log(err); - reject(); - }); - }); + console.log(err) + reject() + }) + }) } export function clearAuthStatus() { - cookie.remove(WX_AUTH); - cookie.remove(STATE_KEY); + cookie.remove(WX_AUTH) + cookie.remove(STATE_KEY) } export async function oAuth() { @@ -137,11 +140,11 @@ export async function oAuth() { // if (cookie.has(WX_AUTH)) { if (cookie.has(WX_AUTH) && store.state.token) { reject() - return; + return } - const { code } = parseQuery(); + const { code } = parseQuery() if (!code) { - toAuth(); + toAuth() return } else { auth(code) @@ -155,24 +158,24 @@ export async function oAuth() { export async function auth(code) { console.log('获取微信授权') return new Promise((resolve, reject) => { - let loginType = cookie.get(LOGINTYPE); - let spread = cookie.get('spread'); + let loginType = cookie.get(LOGINTYPE) + let spread = cookie.get('spread') console.log('微信授权登录前获取spread', spread) wechatAuth(code, spread, loginType) .then(({ data }) => { console.log(data) - const expires_time = dayjs(data.expires_time); - const newTime = Math.round(new Date() / 1000); - store.commit("login", data.token, expires_time - newTime); - cookie.set(WX_AUTH, code, expires_time); - cookie.remove(STATE_KEY); - loginType && cookie.remove(LOGINTYPE); + const expires_time = dayjs(data.expires_time) + const newTime = Math.round(new Date() / 1000) + store.commit('login', data.token, expires_time - newTime) + cookie.set(WX_AUTH, code, expires_time) + cookie.remove(STATE_KEY) + loginType && cookie.remove(LOGINTYPE) console.log('微信公众号授权登录,获取用户信息') store.dispatch('getUser').finally(() => { - resolve(); + resolve() }) }) - .catch(reject); + .catch(reject) }).catch(error => { console.log(error) }) @@ -184,27 +187,26 @@ export async function toAuth() { } wechatLoading = true wechat().then(wx => { - location.href = getAuthUrl(appId); - }); + location.href = getAuthUrl(appId) + }) } function getAuthUrl(appId) { - // const redirect_uri = encodeURIComponent(window.location.href); // const redirect_uri = encodeURIComponent(`${location.origin}/pages/Loading/index`); // #ifdef H5 // #endif cookie.set('redirect', window.location.href) - const redirect_uri = encodeURIComponent(`${location.origin}/pages/Loading/index`); + const redirect_uri = encodeURIComponent(`${location.origin}/pages/Loading/index`) // const redirect_uri = encodeURIComponent(`${location.origin}/pages/Loading/index?path=${encodeURIComponent(window.location.href)}`); // const redirect_uri = encodeURIComponent(`${window.location.origin}${window.location.pathname}`) // const redirect_uri = encodeURIComponent(`${location.origin}`) - cookie.remove(BACK_URL); + cookie.remove(BACK_URL) const state = 'STATE' // const state = encodeURIComponent(("" + Math.random()).split(".")[1] + "authorizestate"); - cookie.set(STATE_KEY, state); - return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`; + cookie.set(STATE_KEY, state) + return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect` } function toPromise(fn, config = {}) { @@ -212,185 +214,184 @@ function toPromise(fn, config = {}) { fn({ ...config, success(res) { - resolve(res); + resolve(res) }, fail(err) { - reject(err); + reject(err) }, complete(err) { - reject(err); + reject(err) }, cancel(err) { - reject(err); - } - }); - }); + reject(err) + }, + }) + }) } export function pay(config) { console.log(instance) - return toPromise(instance.chooseWXPay, config); + return toPromise(instance.chooseWXPay, config) } export function openAddress() { return new Promise((resolve, reject) => { - wechatEvevt("openAddress", {}) + wechatEvevt('openAddress', {}) .then(res => { - resolve(res); + resolve(res) }) .catch(res => { if (res.is_ready) { res.wx.openAddress({ fail(res) { - reject(res); + reject(res) }, success(res) { - resolve(res); - } - }); + resolve(res) + }, + }) } else { - reject(res); + reject(res) } - }); - }); + }) + }) } export function openShareAll(config) { - config || {}; - config.type = config.type == undefined ? "link" : config.type; + config || {} + config.type = config.type == undefined ? 'link' : config.type return new Promise(resolve => { getWechatConfig().then(res => { wechatObj.signSignature({ nonceStr: res.data.nonceStr, signature: res.data.signature, - timestamp: res.data.timestamp - }); - instance = wechatObj.getOriginalWx(); + timestamp: res.data.timestamp, + }) + instance = wechatObj.getOriginalWx() instance.ready(() => { - instance.updateAppMessageShareData(config); - instance.updateTimelineShareData(config); - resolve(); - }); - }); - }); + instance.updateAppMessageShareData(config) + instance.updateTimelineShareData(config) + resolve() + }) + }) + }) } export function openShareAppMessage(config) { - instance.updateAppMessageShareData(config); - instance.onMenuShareAppMessage && instance.onMenuShareAppMessage(config); + instance.updateAppMessageShareData(config) + instance.onMenuShareAppMessage && instance.onMenuShareAppMessage(config) } export function openShareTimeline(config) { - instance.updateTimelineShareData(config); - instance.onMenuShareTimeline && instance.onMenuShareTimeline(config); + instance.updateTimelineShareData(config) + instance.onMenuShareTimeline && instance.onMenuShareTimeline(config) } export function wechatEvevt(name, config) { return new Promise((resolve, reject) => { - let wx; + let wx let configDefault = { fail(res) { - if (wx) return reject({ is_ready: true, wx: wx }); + if (wx) return reject({ is_ready: true, wx: wx }) getWechatConfig().then(res => { wechatObj.signSignature({ nonceStr: res.data.nonceStr, signature: res.data.signature, - timestamp: res.data.timestamp - }); - wx = wechatObj.getOriginalWx(); - reject({ is_ready: true, wx: wx }); - }); + timestamp: res.data.timestamp, + }) + wx = wechatObj.getOriginalWx() + reject({ is_ready: true, wx: wx }) + }) }, success(res) { - resolve(res); - } - }; - Object.assign(configDefault, config); - if (typeof instance !== "undefined") { + resolve(res) + }, + } + Object.assign(configDefault, config) + if (typeof instance !== 'undefined') { instance.ready(() => { - if (typeof name === "object") { + if (typeof name === 'object') { name.forEach(item => { - instance[item] && instance[item](configDefault); - }); - } else instance[name] && instance[name](configDefault); - }); + instance[item] && instance[item](configDefault) + }) + } else instance[name] && instance[name](configDefault) + }) } else { getWechatConfig().then(res => { - const _wx = WechatJSSDK(res.data); + const _wx = WechatJSSDK(res.data) _wx.initialize().then(() => { - instance = _wx.getOriginalWx(); + instance = _wx.getOriginalWx() instance.ready(() => { - if (typeof name === "object") { + if (typeof name === 'object') { name.forEach(item => { - instance[item] && instance[item](configDefault); - }); - } else instance[name] && instance[name](configDefault); - }); - }); - }); + instance[item] && instance[item](configDefault) + }) + } else instance[name] && instance[name](configDefault) + }) + }) + }) } - }); + }) } export function ready() { return new Promise(resolve => { - if (typeof instance !== "undefined") { + if (typeof instance !== 'undefined') { instance.ready(() => { - resolve(instance); - }); + resolve(instance) + }) } else { getWechatConfig().then(res => { - const _wx = WechatJSSDK(res.data); + const _wx = WechatJSSDK(res.data) _wx.initialize().then(() => { - instance = _wx.wx; + instance = _wx.wx instance.ready(() => { - resolve(instance); - }); - }); - }); + resolve(instance) + }) + }) + }) } - }); + }) } export function wxShowLocation() { return new Promise(() => { - wechatEvevt("getLocation", { type: "wgs84" }) + wechatEvevt('getLocation', { type: 'wgs84' }) .then(res => { - let latitude = res.latitude; // 纬度 - let longitude = res.longitude; // 经度 - cookie.set(LATITUDE, latitude); - cookie.set(LONGITUDE, longitude); + let latitude = res.latitude // 纬度 + let longitude = res.longitude // 经度 + cookie.set(LATITUDE, latitude) + cookie.set(LONGITUDE, longitude) }) .catch(res => { if (res.is_ready) { res.wx.getLocation({ success(res) { - let latitude = res.latitude; // 纬度 - let longitude = res.longitude; // 经度 - cookie.set(LATITUDE, latitude); - cookie.set(LONGITUDE, longitude); + let latitude = res.latitude // 纬度 + let longitude = res.longitude // 经度 + cookie.set(LATITUDE, latitude) + cookie.set(LONGITUDE, longitude) }, cancel() { - cookie.remove(LATITUDE); - cookie.remove(LONGITUDE); + cookie.remove(LATITUDE) + cookie.remove(LONGITUDE) uni.showToast({ - title: "取消获取位置", - icon: "none", + title: '取消获取位置', + icon: 'none', duration: 2000, - }); + }) }, fail() { - cookie.remove(LATITUDE); - cookie.remove(LONGITUDE); + cookie.remove(LATITUDE) + cookie.remove(LONGITUDE) uni.showToast({ - title: "授权失败", - icon: "none", + title: '授权失败', + icon: 'none', duration: 2000, - }); - } - }); + }) + }, + }) } - }); - }); + }) + }) } -