From 0c50a9ebb2212b415dbcf7b451eb6e493cd224ca Mon Sep 17 00:00:00 2001 From: Gaoxs <704041637@qq.com> Date: Sat, 15 Aug 2020 20:07:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96H5=E7=99=BB=E5=BD=95=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/public.js | 10 +- libs/order.js | 119 +++++--- libs/wechat.js | 285 +++++++++++++++++++ main.js | 26 +- manifest.json | 8 +- package-lock.json | 392 ++++++++++++++++++++++++++ package.json | 4 +- pages/authorization/index.vue | 49 ++-- pages/home/index.vue | 19 +- pages/order/OrderSubmission/index.vue | 103 +------ utils/index.js | 55 +++- utils/request.js | 7 + 12 files changed, 878 insertions(+), 199 deletions(-) diff --git a/api/public.js b/api/public.js index a617fe3..7ba92dd 100644 --- a/api/public.js +++ b/api/public.js @@ -61,11 +61,11 @@ export function getArticleDetails(id) { * @returns {*} */ export function getWechatConfig() { - // return request.get( - // "/wechat/config", - // { url: document.location.href }, - // { login: false } - // ); + return request.get( + "/wechat/config", + { url: document.location.href }, + { login: false } + ); } /** diff --git a/libs/order.js b/libs/order.js index 3082833..797fe50 100644 --- a/libs/order.js +++ b/libs/order.js @@ -2,6 +2,8 @@ import { cancelOrder, takeOrder, delOrder, payOrder } from "@/api/order"; import dialog from "@/utils/dialog"; import { weappPay } from "@/libs/wechat"; +import { _router } from '@/utils' + export function cancelOrderHandle(orderId) { return new Promise((resolve, reject) => { uni.showModal({ @@ -70,49 +72,92 @@ export function delOrderHandle(orderId) { }); } +// 使用订单号进行支付 export function payOrderHandle(orderId, type, from) { - console.log(orderId, type, from, '支付') return new Promise((resolve, reject) => { - uni.showLoading({ title: '加载中' }) + // dialog.loading.open(""); payOrder(orderId, type, from) .then(res => { - console.log(res) - console.log('微信支付参数') - const data = res.data; - uni.hideLoading() - switch (data.status) { - case "WECHAT_H5_PAY": - location.replace(data.result.jsConfig.mweb_url); - reject(data); - break; - case "ORDER_EXIST": - case "EXTEND_ORDER": - case "PAY_ERROR": - case "PAY_DEFICIENCY": - uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); - reject(data); - break; - case "SUCCESS": - uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }); - resolve(data); - break; - case "WECHAT_PAY": - weappPay(data.result.jsConfig).then(res => { - resolve(data); - }); - break; - case "WECHAT_APP_PAY": - weappPay(data.result.jsConfig).then(res => { - resolve(data); - }); - break; - } + handleOrderPayResults(res.data) }) .catch(err => { - uni.hideLoading() - uni.showToast({ - title: '订单支付失败', icon: 'none', duration: 2000 - }); + dialog.loading.close(); + dialog.toast({ mes: err.msg || "订单支付失败" }); }); }); } + +// 处理调用支付接口的逻辑 +// @type create(创建订单)||pay(支付订单) +export function handleOrderPayResults(data, type) { + switch (data.status) { + // 订单号已存在 + case "ORDER_EXIST": + // 取消支付 + case "EXTEND_ORDER": + uni.showToast({ + title: res.msg, + icon: "none", + duration: 2000, + }); + goOrderDetails(data.result.orderId, type) + break; + case "PAY_DEFICIENCY": + break; + // 支付出错 + case "PAY_ERROR": + uni.showToast({ + title: res.msg, + icon: "none", + duration: 2000, + }); + goOrderDetails(data.result.orderId, type) + break; + // 未传递支付环境 + case "SUCCESS": + uni.showToast({ + title: res.msg, + icon: "none", + duration: 2000, + }); + goOrderDetails(data.result.orderId, type) + break; + // H5支付 + case "WECHAT_H5_PAY": + goOrderDetails(data.result.orderId, type) + console.log(data) + setTimeout(() => { + // #ifdef H5 + // "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx15171343713577e9f3a418b0865ef90000&package=2547890641" + // location.href = data.result.jsConfig.mweb_url; + // #endif + }, 100); + break; + // 小程序支付 + case "WECHAT_PAY": + weappPay(data.result.jsConfig).finally(() => { + goOrderDetails(data.result.orderId, type) + }); + break; + // APP支付 + case "WECHAT_APP_PAY": + weappPay(data.result.jsConfig).finally(() => { + goOrderDetails(data.result.orderId, type) + }); + break; + } +} + + +export function goOrderDetails(id, type) { + // 创建订单时跳转到详情 + if (type == 'create') { + console.log(_router) + _router.replace({ + path: "/pages/order/OrderDetails/index", + query: { + id + }, + }); + } +} diff --git a/libs/wechat.js b/libs/wechat.js index 310cc7e..d29c249 100644 --- a/libs/wechat.js +++ b/libs/wechat.js @@ -41,3 +41,288 @@ export const weappPay = (option) => { // }) }) } + + + +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"; + +const STATE_KEY = "wx_authorize_state"; +const WX_AUTH = "wx_auth"; +const BACK_URL = "login_back_url"; +const LOGINTYPE = "loginType"; +let instance; +let wechatObj; + +export function wechat() { + console.log('初始化微信配置') + return new Promise((resolve, reject) => { + if (instance) return resolve(instance); + getWechatConfig() + .then(res => { + const _wx = WechatJSSDK(res.data); + console.log(_wx) + wechatObj = _wx; + _wx + .initialize() + .then(() => { + instance = _wx.wx; + instance.initConfig = res.data; + resolve(instance); + }) + .catch(reject); + }) + .catch(err => { + console.log(err); + reject(err); + }); + }); +} + +export function clearAuthStatus() { + cookie.remove(WX_AUTH); + cookie.remove(STATE_KEY); +} + +export function oAuth() { + console.log('处理微信授权') + return new Promise((resolve, reject) => { + if (cookie.has(WX_AUTH) && store.state.app.token) { + reject() + return; + } + const { code } = parseQuery(); + if (!code) { + toAuth(); + return + } + resolve() + }) +} + +export function auth(code) { + console.log('获取微信授权') + return new Promise((resolve, reject) => { + let loginType = cookie.get(LOGINTYPE); + wechatAuth(code, parseInt(cookie.get("spread")), loginType) + .then(({ 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"); + resolve(); + }) + .catch(reject); + }); +} + +export function toAuth() { + wechat().then(wx => { + location.href = getAuthUrl(wx.initConfig.appId); + }); +} + +function getAuthUrl(appId) { + const redirect_uri = encodeURIComponent( + `${location.origin}/auth/` + + encodeURIComponent( + encodeURIComponent( + cookie.has(BACK_URL) + ? cookie.get(BACK_URL) + : location.pathname + location.search + ) + ) + ); + cookie.remove(BACK_URL); + 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`; +} + +function toPromise(fn, config = {}) { + return new Promise((resolve, reject) => { + fn({ + ...config, + success(res) { + resolve(res); + }, + fail(err) { + reject(err); + }, + complete(err) { + reject(err); + }, + cancel(err) { + reject(err); + } + }); + }); +} + +export function pay(config) { + return toPromise(instance.chooseWXPay, config); +} + +export function openAddress() { + return new Promise((resolve, reject) => { + wechatEvevt("openAddress", {}) + .then(res => { + resolve(res); + }) + .catch(res => { + if (res.is_ready) { + res.wx.openAddress({ + fail(res) { + reject(res); + }, + success(res) { + resolve(res); + } + }); + } else { + reject(res); + } + }); + }); +} + +export function openShareAll(config) { + 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(); + instance.ready(() => { + instance.updateAppMessageShareData(config); + instance.updateTimelineShareData(config); + resolve(); + }); + }); + }); +} + +export function openShareAppMessage(config) { + instance.updateAppMessageShareData(config); + instance.onMenuShareAppMessage && instance.onMenuShareAppMessage(config); +} + +export function openShareTimeline(config) { + instance.updateTimelineShareData(config); + instance.onMenuShareTimeline && instance.onMenuShareTimeline(config); +} + +export function wechatEvevt(name, config) { + return new Promise((resolve, reject) => { + let wx; + let configDefault = { + fail(res) { + console.log(res); + 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 }); + }); + }, + success(res) { + resolve(res); + } + }; + Object.assign(configDefault, config); + if (typeof instance !== "undefined") { + instance.ready(() => { + if (typeof name === "object") { + name.forEach(item => { + instance[item] && instance[item](configDefault); + }); + } else instance[name] && instance[name](configDefault); + }); + } else { + getWechatConfig().then(res => { + const _wx = WechatJSSDK(res.data); + _wx.initialize().then(() => { + instance = _wx.getOriginalWx(); + instance.ready(() => { + if (typeof name === "object") { + name.forEach(item => { + instance[item] && instance[item](configDefault); + }); + } else instance[name] && instance[name](configDefault); + }); + }); + }); + } + }); +} + +export function ready() { + return new Promise(resolve => { + if (typeof instance !== "undefined") { + instance.ready(() => { + resolve(instance); + }); + } else { + getWechatConfig().then(res => { + const _wx = WechatJSSDK(res.data); + _wx.initialize().then(() => { + instance = _wx.wx; + instance.ready(() => { + resolve(instance); + }); + }); + }); + } + }); +} + +export function wxShowLocation() { + return new Promise(() => { + wechatEvevt("getLocation", { type: "wgs84" }) + .then(res => { + 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); + }, + cancel() { + cookie.remove(LATITUDE); + cookie.remove(LONGITUDE); + this.$dialog.error("取消获取位置"); + }, + fail() { + cookie.remove(LATITUDE); + cookie.remove(LONGITUDE); + this.$dialog.error("授权失败"); + } + }); + } + }); + }); +} + diff --git a/main.js b/main.js index 49ca953..4f7a4d6 100644 --- a/main.js +++ b/main.js @@ -15,6 +15,12 @@ import cookie from "@/utils/store/cookie"; // import "@/assets/css/reset.less"; // import "@/assets/css/style.less"; +// // 引入微信jssdk +// var jweixin = require('jweixin-module') +// jweixin.ready(function(){ +// // TODO +// }); + import { parseRoute, _router @@ -27,7 +33,7 @@ import { Vue.config.productionTip = false; Vue.config.devtools = process.env.NODE_ENV !== "production"; -Vue.prototype.$validator = function(rule) { +Vue.prototype.$validator = function (rule) { return new schema(rule); }; @@ -77,21 +83,31 @@ Vue.prototype.$VUE_APP_API_URL = VUE_APP_API_URL // #ifdef H5 // H5编译的代码 -Vue.prototype.$deviceType = 'h5' -store.commit('updateDevicetype','h5') + +import { wechat, oAuth } from '@/libs/wechat' +import { isWeixin } from '@/utils' +// 判断是否是微信浏览器 +if (isWeixin()) { + Vue.prototype.$deviceType = 'weixin' + store.commit('updateDevicetype', 'weixin') +} else { + Vue.prototype.$deviceType = 'weixinh5' + store.commit('updateDevicetype', 'weixinh5') +} + // #endif // #ifdef APP-PLUS // App平台编译的代码 Vue.prototype.$deviceType = 'app' -store.commit('updateDevicetype','app') +store.commit('updateDevicetype', 'app') Vue.prototype.$platform = uni.getSystemInfoSync().platform // #endif // #ifdef MP-WEIXIN // 微信小程序编译的代码 Vue.prototype.$deviceType = 'routine' -store.commit('updateDevicetype','routine') +store.commit('updateDevicetype', 'routine') // #endif // !!! ps 不建议在 template 中使用 $deviceType 去判断当前环境,很有可能出现 $deviceType 为 undefined 导致判断出错的问题,可以在 script 模块中正常使用 diff --git a/manifest.json b/manifest.json index cdb4446..0a74b03 100644 --- a/manifest.json +++ b/manifest.json @@ -128,9 +128,7 @@ } } }, - /* 快应用特有相关 */ "quickapp" : {}, - /* 小程序特有相关 */ "mp-weixin" : { "appid" : "wx604d2ea4702620d2", "setting" : { @@ -151,5 +149,11 @@ }, "mp-toutiao" : { "usingComponents" : true + }, + "h5" : { + "title" : "yshop", + "devServer": { + "disableHostCheck": true + } } } diff --git a/package-lock.json b/package-lock.json index 41879d8..f082aaa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,19 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npm.taobao.org/@sindresorhus/is/download/@sindresorhus/is-0.14.0.tgz?cache=0&sync_timestamp=1595758234190&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40sindresorhus%2Fis%2Fdownload%2F%40sindresorhus%2Fis-0.14.0.tgz", + "integrity": "sha1-n7OjzzEyMoFR81PeRjLgHlIQK+o=" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@szmarczak/http-timer/download/@szmarczak/http-timer-1.1.2.tgz", + "integrity": "sha1-sWZeLEYaLNkvTBu/UNVFTeDUtCE=", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, "animate.css": { "version": "3.7.2", "resolved": "https://registry.npm.taobao.org/animate.css/download/animate.css-3.7.2.tgz", @@ -14,15 +27,394 @@ "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-3.2.4.tgz", "integrity": "sha1-Tnc6HQ10EBa0VbeZW0aaR8zg2+A=" }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.5.1.tgz", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=" + }, + "bson": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/bson/download/bson-1.1.5.tgz?cache=0&sync_timestamp=1597069108497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbson%2Fdownload%2Fbson-1.1.5.tgz", + "integrity": "sha1-Kqrpj832dQwISLDLod3sPHMGCjQ=" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/cacheable-request/download/cacheable-request-6.1.0.tgz", + "integrity": "sha1-IP+4vRYrpL4R6VZ9gj22UQUsqRI=", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056464385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz", + "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-2.0.0.tgz", + "integrity": "sha1-JgPni3tLAAbLyi+8yKMgJVislHk=" + } + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/clone-response/download/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "date-fns": { + "version": "2.9.0", + "resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-2.9.0.tgz?cache=0&sync_timestamp=1594999069362&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-2.9.0.tgz", + "integrity": "sha1-0LF1pcN+1fF7l+InK7wfpa7Gd9I=" + }, "dayjs": { "version": "1.8.22", "resolved": "https://registry.npm.taobao.org/dayjs/download/dayjs-1.8.22.tgz", "integrity": "sha1-XoNdd2s3PiFmeL6NEsM22nGiWpw=" }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "requires": { + "ms": "^2.1.1" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/decompress-response/download/decompress-response-3.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecompress-response%2Fdownload%2Fdecompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/defer-to-connect/download/defer-to-connect-1.1.3.tgz?cache=0&sync_timestamp=1580234632952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefer-to-connect%2Fdownload%2Fdefer-to-connect-1.1.3.tgz", + "integrity": "sha1-MxrgUMCNz3ifjIOnuB8O2U9KxZE=" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "requires": { + "once": "^1.4.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1597056464385&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npm.taobao.org/got/download/got-9.6.0.tgz?cache=0&sync_timestamp=1596795574468&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgot%2Fdownload%2Fgot-9.6.0.tgz", + "integrity": "sha1-7fRefWf5lUVwXeH3u+7rEhdl7YU=", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz?cache=0&sync_timestamp=1583108120479&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-cache-semantics%2Fdownload%2Fhttp-cache-semantics-4.1.0.tgz", + "integrity": "sha1-SekcXL82yblLz81xwj1SSex045A=" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/json-buffer/download/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "jweixin-module": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/jweixin-module/download/jweixin-module-1.6.0.tgz", + "integrity": "sha1-Sn6mFAg+PJw/SeL9wruILPpY380=" + }, + "kareem": { + "version": "2.3.1", + "resolved": "https://registry.npm.taobao.org/kareem/download/kareem-2.3.1.tgz", + "integrity": "sha1-3vEtnJQQF/q/sA+HOvlenJnhvoc=" + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/keyv/download/keyv-3.1.0.tgz", + "integrity": "sha1-7MIoSG9pmR5J6UdkhaW+Ho/FxNk=", + "requires": { + "json-buffer": "3.0.0" + } + }, + "lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npm.taobao.org/lodash.isempty/download/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz", + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/memory-pager/download/memory-pager-1.5.0.tgz", + "integrity": "sha1-2HUWVdItOEaCdByXLyw9bfo+ZrU=", + "optional": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/mimic-response/download/mimic-response-1.0.1.tgz?cache=0&sync_timestamp=1589481629775&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-response%2Fdownload%2Fmimic-response-1.0.1.tgz", + "integrity": "sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=" + }, + "mongodb": { + "version": "3.4.1", + "resolved": "https://registry.npm.taobao.org/mongodb/download/mongodb-3.4.1.tgz", + "integrity": "sha1-DRXlfg6g/IW3pPuSkbN0wucWUtw=", + "requires": { + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.8.9", + "resolved": "https://registry.npm.taobao.org/mongoose/download/mongoose-5.8.9.tgz?cache=0&sync_timestamp=1597421711994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmongoose%2Fdownload%2Fmongoose-5.8.9.tgz", + "integrity": "sha1-YWrp30zX9B99LXfQN62UeESFvXQ=", + "requires": { + "bson": "~1.1.1", + "kareem": "2.3.1", + "mongodb": "3.4.1", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.6.0", + "mquery": "3.2.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.1.2", + "sift": "7.0.1", + "sliced": "1.0.1" + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/mongoose-legacy-pluralize/download/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha1-O6n5H6UHtRhtOZ+0CFS/8Y+1Y+Q=" + }, + "mpath": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/mpath/download/mpath-0.6.0.tgz", + "integrity": "sha1-qpIgKfyk8PZB82DnTFwbakxHB44=" + }, + "mquery": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/mquery/download/mquery-3.2.2.tgz", + "integrity": "sha1-4Tg6OVGFLOI+N/YZqbNQ8fs2ZOc=", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz?cache=0&sync_timestamp=1596373090568&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-4.5.0.tgz", + "integrity": "sha1-RTNUCH5sqWlXvY9br3U/WYIUISk=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/p-cancelable/download/p-cancelable-1.1.0.tgz", + "integrity": "sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw=" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/regexp-clone/download/regexp-clone-1.0.0.tgz", + "integrity": "sha1-Ii25Z2IydwViYLmSYmNUoEzpv2M=" + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/require_optional/download/require_optional-1.0.1.tgz", + "integrity": "sha1-TPNaQkf2TKPfjC7yCMxJSxyo/C4=", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/responselike/download/responselike-1.0.2.tgz?cache=0&sync_timestamp=1570573217730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresponselike%2Fdownload%2Fresponselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589129010497&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/saslprep/download/saslprep-1.0.3.tgz", + "integrity": "sha1-TAL5RrVs9UKX40e6EJPnrKxM8iY=", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=" + }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/sift/download/sift-7.0.1.tgz?cache=0&sync_timestamp=1594916082498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsift%2Fdownload%2Fsift-7.0.1.tgz", + "integrity": "sha1-R9YsULFZ0xbxNy+LU/nBDNIaSwg=" + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/sliced/download/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/sparse-bitfield/download/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/to-readable-stream/download/to-readable-stream-1.0.0.tgz", + "integrity": "sha1-zgqgwvPfat+FLvtASng+d8BHV3E=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, "vue-ydui": { "version": "1.2.6", "resolved": "https://registry.npm.taobao.org/vue-ydui/download/vue-ydui-1.2.6.tgz", "integrity": "sha1-GQZItGcjkXAEpMJKe+/TzWnWQ1U=" + }, + "wechat-jssdk": { + "version": "5.0.4", + "resolved": "https://registry.npm.taobao.org/wechat-jssdk/download/wechat-jssdk-5.0.4.tgz", + "integrity": "sha1-QZ1TAjuEzAfIkNM+3c1XkVUcY+c=", + "requires": { + "date-fns": "2.9.0", + "debug": "4.1.1", + "got": "9.6.0", + "lodash.isempty": "4.4.0", + "mongoose": "5.8.9", + "xml2js": "0.4.23" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz", + "integrity": "sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY=", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz?cache=0&sync_timestamp=1586386177211&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxmlbuilder%2Fdownload%2Fxmlbuilder-11.0.1.tgz", + "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=" } } } diff --git a/package.json b/package.json index 465ac8f..9aa97cd 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "animate.css": "^3.7.2", "async-validator": "^3.2.4", "dayjs": "^1.8.22", - "vue-ydui": "^1.2.6" + "jweixin-module": "^1.6.0", + "vue-ydui": "^1.2.6", + "wechat-jssdk": "^5.0.4" } } diff --git a/pages/authorization/index.vue b/pages/authorization/index.vue index afe4368..f22f61f 100644 --- a/pages/authorization/index.vue +++ b/pages/authorization/index.vue @@ -1,8 +1,8 @@ diff --git a/pages/home/index.vue b/pages/home/index.vue index acf2bd0..845a150 100644 --- a/pages/home/index.vue +++ b/pages/home/index.vue @@ -10,15 +10,6 @@ - - - - - - - - - --> - + @@ -288,14 +279,6 @@ }, methods: { ...mapActions(["getLocation"]), - testTemplate() { - console.log('测试') - // 调用订阅 - wx.requestSubscribeMessage({ - tmplIds: [''], - success(res) {} - }) - }, goRoll(item) { if (item.uniapp_url) { this.$yrouter.push(item.uniapp_url) diff --git a/pages/order/OrderSubmission/index.vue b/pages/order/OrderSubmission/index.vue index 4ea5982..31cabc5 100644 --- a/pages/order/OrderSubmission/index.vue +++ b/pages/order/OrderSubmission/index.vue @@ -310,8 +310,9 @@ import CouponListWindow from "@/components/CouponListWindow"; import AddressWindow from "@/components/AddressWindow"; import { postOrderConfirm, postOrderComputed, createOrder } from "@/api/order"; import { mapGetters } from "vuex"; +import { handleOrderPayResults } from "@/libs/order"; import { weappPay } from "@/libs/wechat"; -import { isWeixin } from "@/utils"; +import { isWeixin, handleErrorMessage } from "@/utils"; const NAME = "OrderSubmission", _isWeixin = isWeixin(); @@ -545,7 +546,6 @@ export default { if (this.$deviceType == "app") { from.from = "app"; } - console.log(this.storeItems, this.systemStore); createOrder(this.orderGroupInfo.orderKey, { realName: this.contacts, phone: this.contactsTel, @@ -565,105 +565,10 @@ export default { }) .then((res) => { uni.hideLoading(); - const data = res.data; - switch (data.status) { - case "ORDER_EXIST": - case "EXTEND_ORDER": - uni.showToast({ - title: res.msg, - icon: "none", - duration: 2000, - }); - this.$yrouter.replace({ - path: "/pages/order/OrderDetails/index", - query: { - id: data.result.orderId, - }, - }); - break; - case "PAY_DEFICIENCY": - break; - - case "PAY_ERROR": - uni.showToast({ - title: res.msg, - icon: "none", - duration: 2000, - }); - this.$yrouter.replace({ - path: "/pages/order/OrderDetails/index", - query: { - id: data.result.orderId, - }, - }); - break; - case "SUCCESS": - uni.showToast({ - title: res.msg, - icon: "none", - duration: 2000, - }); - this.$yrouter.replace({ - path: "/pages/order/OrderDetails/index", - query: { - id: data.result.orderId, - }, - }); - break; - case "WECHAT_H5_PAY": - // H5支付 - this.$yrouter.replace({ - path: "/pages/order/OrderDetails/index", - query: { - id: data.result.orderId, - }, - }); - setTimeout(() => { - // location.href = data.result.jsConfig.mweb_url; - }, 100); - break; - case "WECHAT_PAY": - // 小程序支付 - weappPay(data.result.jsConfig).finally(() => { - this.$yrouter.replace({ - path: "/pages/order/OrderDetails/index", - query: { - id: data.result.orderId, - }, - }); - }); - break; - - case "WECHAT_APP_PAY": - // APP支付 - weappPay(data.result.jsConfig).finally(() => { - this.$yrouter.replace({ - path: "/pages/order/OrderDetails/index", - query: { - id: data.result.orderId, - }, - }); - }); - break; - // 下面为原先微信支付方式, - // pay(data.result.jsConfig).finally(() => { - // this.$yrouter.replace({ - // path: "/pages/order/OrderDetails/index" ,query: { id: data.result.orderId} - // }); - // }); - } + handleOrderPayResults.call(this, res.data, "create"); }) .catch((err) => { - uni.hideLoading(); - uni.showToast({ - title: - err.msg || - err.response.data.msg || - err.response.data.message || - "创建订单失败", - icon: "none", - duration: 2000, - }); + handleErrorMessage(err, "创建订单失败"); }); }, }, diff --git a/utils/index.js b/utils/index.js index 0a5a1f1..19a1f2d 100644 --- a/utils/index.js +++ b/utils/index.js @@ -10,6 +10,8 @@ import dayjs from "dayjs"; import cookie from "@/utils/store/cookie"; import stringify from "@/utils/querystring"; import { VUE_APP_API_URL } from "@/config"; +import { wechat, auth, oAuth } from '@/libs/wechat' + export function dataFormat(time, option) { time = +time * 1000; @@ -59,7 +61,7 @@ export function isType(arg, type) { } export function isWeixin() { - return false + return navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1; } export function parseQuery() { @@ -152,10 +154,36 @@ export const authorize = (authorizeStr) => { } export const login = () => { - console.log('————————————————————') - console.log('开始登录') - console.log('————————————————————') + console.log(Vue.prototype) return new Promise((resolve, reject) => { + if (Vue.prototype.$deviceType == 'weixin') { + // 微信授权登录 + wechat().then(() => oAuth().then((code) => { + // const { code } = parseQuery() + auth(code) + .then(() => { + // location.replace( + // decodeURIComponent(decodeURIComponent(this.$route.params.url)) + // ); + location.href = decodeURIComponent( + decodeURIComponent(this.$route.params.url) + ); + }) + .catch(() => { + reject('当前运行环境为微信浏览器') + location.replace("/pages/home/index"); + }); + })); + return + } + if (Vue.prototype.$deviceType == 'weixinh5') { + + reject('当前运行环境为H5') + return + } + console.log('————————————————————') + console.log('开始登录') + console.log('————————————————————') console.log('获取环境商') getProvider().then(provider => { console.log('当前的环境商') @@ -328,7 +356,7 @@ export function parseRoute($mp) { } } -export function auth() { +export function handleAuth() { /** * 如何判断权限? * 用户如果登录了系统,会留下两个东西,一个是token,一个是userInfo @@ -378,7 +406,7 @@ export const handleLoginStatus = (location, complete, fail, success) => { } // 判断用户是否有token - if (!auth()) { + if (!handleAuth()) { page.map((item) => { if (item.path == path) { isAuth = true @@ -884,3 +912,18 @@ export function chooseImage(callback) { } }); } + + +export function handleErrorMessage(err) { + console.log(err) + uni.hideLoading(); + uni.showToast({ + title: + err.msg || + err.response.data.msg || + err.response.data.message || + "创建订单失败", + icon: "none", + duration: 2000, + }); +} diff --git a/utils/request.js b/utils/request.js index ad5ca05..ecd017f 100644 --- a/utils/request.js +++ b/utils/request.js @@ -1,4 +1,11 @@ +// #ifndef MP-WEIXIN +import Fly from "flyio/dist/npm/fly"; +// #endif + +// #ifdef MP-WEIXIN import Fly from "flyio/dist/npm/wx"; +// #endif + import $store from "../store"; import { handleLoginFailure } from "@/utils"; import { VUE_APP_API_URL } from "@/config";