From 465a30a58746c7ab410aef08949b43626ceb3bb0 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Tue, 12 Mar 2024 11:43:31 +0800 Subject: [PATCH] 修复图片上传小程序中无法预览的问题 --- common/WxH5Pay.js | 196 ++++++++++--------------------------------------- 1 files changed, 40 insertions(+), 156 deletions(-) diff --git a/common/WxH5Pay.js b/common/WxH5Pay.js index 07022b9..86e2760 100644 --- a/common/WxH5Pay.js +++ b/common/WxH5Pay.js @@ -3,171 +3,55 @@ * @author Tevin */ -import Taro from '@tarojs/taro'; -import { $ } from '@tarojs/extend'; import { Tools } from '@components/common/Tools'; -const askModal = { - $modal: null, - show(type, callback) { - const that = this; - Taro.showModal({ - title: type === 'ask' ? '微信支付未响应?' : '微信支付仍未响应?', - confirmColor: '#4a8aff', - confirmText: type === 'ask' ? '点击重试' : '重载页面', - success: res => { - // 点击重试,执行回调 - if (res.confirm) { - callback(true); - } else if (res.cancel) { - callback(false); - } - this.$modal = null; - }, - }); - setTimeout(() => { - this.$modal = $('.taro__modal'); - }, 10); - }, - cancel() { - if (this.$modal) { - this.$modal.find('.taro-modal__foot > .taro-model__btn:eq(0)').trigger('click'); - this.$modal = null; - } - }, -}; - export class WxH5Pay { - constructor() { - this._data = { - alreadyCall: false, - }; } - callWxPay(payParam, callback, type = 'webview') { - // 默认 webview 支付 - if (type === 'webview') { - Tools.toast('正在微信支付...'); - this._data.alreadyCall = false; - // 0.1 秒后发起正常支付 - setTimeout(() => { - this._wvChooseWXPay(payParam, callback); - }, 100); - // 2.2 秒后,如果 alreadyCall 未变为 true,跳出询问弹窗 - setTimeout(() => { - if (!this._data.alreadyCall) { - askModal.show('ask', next => { - if (next) { - this.callWxPay(payParam, callback, 'webview2'); - } else { - callback('cancel', '支付已取消!(微信未响应)'); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-noResponse', 0]); - } + callWxPay(payParam, callback) { + Tools.toast('正在支付...'); + setTimeout(() => { + if (typeof WeixinJSBridge === 'undefined') { + if (document.addEventListener) { + document.addEventListener('WeixinJSBridgeReady', () => { + this._jsApiCall(payParam, callback); + }, false); + } else if (document.attachEvent) { + document.attachEvent('WeixinJSBridgeReady', () => { + this._jsApiCall(payParam, callback); + }); + document.attachEvent('onWeixinJSBridgeReady', () => { + this._jsApiCall(payParam, callback); }); } - }, 2200); - } - // 第二次 webview 支付 - else if (type === 'webview2') { - // 重新发起支付 - Tools.toast('正在微信支付...'); - this._data.alreadyCall = false; - // 0.1 秒后发起二次支付 - setTimeout(() => { - this._wvBrandWCPay(payParam, callback); - }, 100); - // 2.2 秒后,如果 alreadyCall 未变为 true,跳出询问弹窗 - setTimeout(() => { - if (!this._data.alreadyCall) { - askModal.show('reload', next => { - if (next) { - callback('fail', '页面重载中...'); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-pageReload', 0]); - setTimeout(() => { - if (window.location.href.split('#')[0].indexOf('?') < 0) { - window.location.href = - window.location.href.split(/[#?]/)[0] + '?' + window.location.hash; - } - window.location.reload(); - }, 1000); - } else { - callback('cancel', '支付已取消!(微信未响应)'); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-noResponse', 0]); - } - }); - } - }, 2200); - } - } - - _wvChooseWXPay(payParam, callback) { - wx.ready(() => { - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-chooseWXPay:start', 0]); - // 发起支付 - const sign = JSON.parse(payParam); - wx.chooseWXPay({ - ...sign, - timestamp: sign.timeStamp, - complete: complete => { - // 关闭询问弹窗 - askModal.cancel(); - this._data.alreadyCall = true; - // 支付结果 - if (complete.errMsg === 'chooseWXPay:ok') { - callback && callback('ok', '支付成功!'); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-chooseWXPay:ok', 0]); - } else if (complete.errMsg === 'chooseWXPay:cancel') { - callback && callback('cancel', '支付已取消!'); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-chooseWXPay:cancel', 0]); - } else { - let msg = '支付失败!'; - // 例如 "chooseWXPay:没有此SDK或暂不支持此SDK模拟" - msg += complete.errMsg ? '(' + complete.errMsg + ')' : ''; - callback && callback('fail', msg); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-chooseWXPay:fail', 0]); - } - }, - }); - }); - } - - _wvBrandWCPay(payParam, callback) { - const jsApiCall = () => { - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-BrandWCPay:start', 0]); - // 发起支付 - const sign = JSON.parse(payParam); - WeixinJSBridge.invoke('getBrandWCPayRequest', sign, res => { - // 关闭询问弹窗 - askModal.cancel(); - this._data.alreadyCall = true; - // 支付结果 - if (res.err_msg === 'get_brand_wcpay_request:ok') { - callback && callback('ok', '支付成功!'); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:ok', 0]); - } else if (res.err_msg === 'get_brand_wcpay_request:cancel') { - callback && callback('cancel', '支付已取消!'); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:cancel', 0]); - } else { - let msg = '支付失败!'; - const errMsg = res.err_msg || res.errMsg || ''; - // 例如 "chooseWXPay:没有此SDK或暂不支持此SDK模拟" - msg += errMsg ? '(' + errMsg + ')' : ''; - callback && callback('fail', msg); - window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:fail', 0]); - } - }); - }; - if (typeof WeixinJSBridge == 'undefined') { - if (document.addEventListener) { - document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); - } else if (document.attachEvent) { - document.attachEvent('WeixinJSBridgeReady', jsApiCall); - document.attachEvent('onWeixinJSBridgeReady', jsApiCall); + } else { + this._jsApiCall(payParam, callback); } - } else { - jsApiCall(); - } + }, 100); + } + + _jsApiCall(payParam, callback) { + window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-BrandWCPay:start', 0]); + // 发起支付 + const sign = JSON.parse(payParam); + WeixinJSBridge.invoke('getBrandWCPayRequest', sign, res => { + // 支付结果 + if (res.err_msg === 'get_brand_wcpay_request:ok') { + callback && callback('ok', '支付成功!'); + window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:ok', 0]); + } else if (res.err_msg === 'get_brand_wcpay_request:cancel') { + callback && callback('cancel', '支付已取消!'); + window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:cancel', 0]); + } else { + let msg = '支付失败!'; + const errMsg = res.err_msg || res.errMsg || ''; + // 例如 "chooseWXPay:没有此SDK或暂不支持此SDK模拟" + msg += errMsg ? '(' + errMsg + ')' : ''; + callback && callback('fail', msg); + window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:fail', 0]); + } + }); } } -- Gitblit v1.9.1