From 229641a5130664f41562d905bee61a44e46fa342 Mon Sep 17 00:00:00 2001 From: sangelxiu1 <15781802@163.com> Date: Thu, 11 Sep 2025 11:54:28 +0800 Subject: [PATCH] =?UTF-8?q?##=20Opt=20-=20=E5=85=BC=E5=AE=B9ios=20open?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/pay/hiPay.vue | 857 +++++++++++++----------- pages/pay/index.vue | 1552 +++++++++++++++++++++---------------------- 2 files changed, 1221 insertions(+), 1188 deletions(-) diff --git a/pages/pay/hiPay.vue b/pages/pay/hiPay.vue index 001f437..2f6d51b 100644 --- a/pages/pay/hiPay.vue +++ b/pages/pay/hiPay.vue @@ -6,254 +6,312 @@ --> @@ -262,15 +320,24 @@ import * as api from '@/config/pay.js' import QRCode from 'qrcodejs2' import { removeToken } from '@/config/auth.js' -import hiSuccess from '@/components/hiSuccess.vue' +import successDialog from '@/components/successDialog.vue' import * as act from '@/config/activity.js' +import { + PAY_REDIRECT_URL, + PAY_TYPE, + PAY_CHANEL, + PAY_AUTH, +} from '@/util/constant.js' var payStatus +let getRegisterInfoTimeoutFlag = null export default { components: { - hiSuccess, + successDialog, }, data() { return { + PAY_TYPE, + PAY_AUTH, payList: {}, isLoading: false, clockTime: '', @@ -285,12 +352,12 @@ export default { }, paramsPost: '', isShare: false, //分享用户第一次爆单 - userInfo: '', + userInfo: uni.getStorageSync('User'), activeNames: 1, whatPay: '', hfList: [], jdList: [], - businessType: '', + businessType: 1, isBank: '', isPw: false, codeValue: '', @@ -299,89 +366,36 @@ export default { sucPay: 0, content: '支付成功', wxPopup: false, - luckydrawData: {}, - ifcz: false, - czJe: '', + isRecharge: false, tlList: [], } }, onLoad(options) { this.paramsPost = JSON.parse(options.paramsPost) console.log( - '%c [ this.paramsPost ]-170', - 'font-size:13px; background:#669153; color:#aad597;', - this.paramsPost + '%c [ this.paramsPost ]-170', + 'font-size:13px; background:#669153; color:#aad597;', + this.paramsPost ) this.pkCountry = uni.getStorageSync('pkCountry') - // if (this.paramsPost.ifcz) { - // this.ifcz = this.paramsPost.ifcz - // this.businessType = 3 - // uni.setNavigationBarTitle({ - // title: '充值' - // }); - // } else { - // uni.setNavigationBarTitle({ - // title: '订单支付' - // }); - // this.ifcz = false - // if (JSON.parse(options.paramsPost).orderType == 4) { + this.orderCode = this.paramsPost.orderCode - // this.luckydrawData = this.paramsPost.luckydrawData - // // 抽奖支付处理(查询订单支付信息以及显示等) - // this.businessType = 4 //抽奖 - // this.specialArea = this.paramsPost.specialArea - // this.getLuckdrawDetail() - // } else { - // this.userInfo = uni.getStorageSync('User') - // if ( - // this.userInfo.registerFans == 0 - // ) { - // this.isShare = true - // } - - // this.specialArea = - // this.paramsPost.specialArea || this.paramsPost.orderType - // this.orderCode = this.paramsPost.orderCode - // this.businessType = options.businessType - // // this.getInfo() - - // // 获取订单信息 - // this.getOrderInfo() - // if (!this.isShare) { - // // 获取消费信息 - // this.getSpendInfo() - // } - // } - // } // 获取支付配置 this.getPayConfig() - this.downTime() - // clearInterval(this.clockTime) + // this.downTime() }, onShow() { // 获取银行卡 // this.getBankList() }, + onUnload() { + clearTimeout(getRegisterInfoTimeoutFlag) + clearInterval(payStatus) + }, methods: { - //查询充值抽奖次数 - getLuckdrawDetail() { - // 抽奖支付处理(查询订单支付信息以及显示等) - act - .getLuckdrawDetail({ - pkBaseId: this.luckydrawData.pkBaseId, - payNum: this.luckydrawData.payNum, - }) - .then((res) => { - if (res.code == 200) { - this.orderData.orderAmount = res.data.toBePaidMoney - this.payDetail = res.data - // this.downTime() - } - }) - }, closewxPopup() { this.wxPopup = false this.$refs.qrCodeUrlWx.innerHTML = '' @@ -411,11 +425,17 @@ export default { }) }, fansOrder() { - api.fansOrder(this.orderCode).then((res) => { - this.isLoading = false - this.isPw = false - removeToken() - this.$refs.hiSuccess.showSuccess(res.data) + api.fansOrder(this.orderCode).then(res => { + if (res.data) { + this.isLoading = false + this.isPw = false + removeToken() + this.$refs.successDialog.showSuccess(res.data) + } else { + getRegisterInfoTimeoutFlag = setTimeout(() => { + this.fansOrder() + }, 3000) + } }) }, payPw() { @@ -436,10 +456,10 @@ export default { pkSettleCountry: this.pkCountry, } this.isLoading = true - url(obj).then((res) => { + url(obj).then(res => { if (res.code == 200) { // this.isPw = false - // this.$refs.hiSuccess.showSuccess(res.data) + // this.$refs.successDialog.showSuccess(res.data) uni.showToast({ title: res.msg, icon: 'none', @@ -459,66 +479,52 @@ export default { } }) }, - quickPay(cz) { - // 非银行卡 - if (typeof this.whatPay == 'number') { - if (this.whatPay == 12) { - this.scanPayBfWx(5) - } else if (this.whatPay == 13) { - this.scanPayBfWx(6) - } else if (this.whatPay == 11) { - this.scanPayBfWxJump(5) - } else if (this.whatPay == 32) { - this.scanPayTlWxJump(3) + async quickPay() { + if ( + ![ + PAY_TYPE.HUI_FU_BANK_CARD, + PAY_TYPE.JING_DONG_BANK_CARD, + PAY_TYPE.TONG_LIAN_BANK_CARD, + ].includes(this.whatPay.slice(0, 2)) + ) { + if ([PAY_TYPE.JING_DONG_H5].includes(this.whatPay)) { + this.redirectPay(PAY_CHANEL[this.whatPay]) + } else if ( + [PAY_TYPE.BAO_FU_WECHAT_SCAN, PAY_TYPE.HUI_FU_WECHAT].includes( + this.whatPay + ) + ) { + this.scanPayBfWx(PAY_CHANEL[this.whatPay]) + } else if (this.whatPay == PAY_TYPE.WECHAT_PAY) { + this.scanPayWx(PAY_CHANEL[this.whatPay]) + } else if (this.whatPay == PAY_TYPE.ALI_PAY) { + this.scanPayAl(PAY_CHANEL[this.whatPay]) } } else { - if (this.whatPay.slice(0, 2) == 'hf') { - let indexed = this.whatPay.slice(2, 4) - let params = { - businessType: 1, //订单类型 - businessCode: this.orderCode, - payChannel: 6, //汇付 - payType: 3, //银行卡 - bindCode: this.hfList[indexed].bindCode, - } - api.unifiedorder(params).then((response) => { - this.isBank = 'hf' - this.bindCode = this.hfList[indexed].bindCode - this.isPw = true - }) - this.checkPayStatus(params) - } else if (this.whatPay.slice(0, 2) == 'jd') { - let indexed = this.whatPay.slice(2, 4) - - let params = { - businessType: 1, //订单类型 - businessCode: this.orderCode, - payChannel: 4, //京东 - payType: 3, //银行卡 - bindCode: this.jdList[indexed].bindCode, - } - api.unifiedorder(params).then((response) => { - this.isBank = 'jd' - this.bindCode = this.jdList[indexed].bindCode - this.isPw = true - }) - this.checkPayStatus(params) - } else if (this.whatPay.slice(0, 2) == 'tl') { - let indexed = this.whatPay.slice(2, 4) - let params = { - businessType: 1, //订单类型 - businessCode: this.orderCode, - payChannel: 3, //通联 - payType: 3, //银行卡 - bindCode: this.tlList[indexed].bindCode, - } - api.unifiedorder(params).then((response) => { - this.isBank = 'tl' - this.bindCode = this.tlList[indexed].bindCode - this.isPw = true - }) - this.checkPayStatus(params) + const indexed = this.whatPay.slice(2, 4) + const payTypeEnum = this.whatPay.slice(0, 2) + const bankListMap = { + [PAY_TYPE.HUI_FU_BANK_CARD]: this.hfList[indexed].bindCode, + [PAY_TYPE.JING_DONG_BANK_CARD]: this.jdList[indexed].bindCode, + [PAY_TYPE.TONG_LIAN_BANK_CARD]: this.tlList[indexed].bindCode, } + this.bindCode = bankListMap[payTypeEnum] + const params = { + businessType: this.businessType, //订单类型 + payChannel: PAY_CHANEL[payTypeEnum], + payType: 3, //银行卡 + bindCode: bankListMap[payTypeEnum], + } + if (!isRecharge) { + Object.assign(params, { + businessCode: this.orderCode, + }) + } + api.unifiedorder(params).then(response => { + this.isBank = this.whatPay.slice(0, 2) + this.isPw = true + this.checkPayStatus(params) + }) } }, // 宝付微信支付 @@ -530,10 +536,10 @@ export default { payType: 2, appletFlag: 0, } - api.unifiedorder(params).then((res) => { + api.unifiedorder(params).then(res => { let url = - 'https://cloud1-8gp1n6uofa17e2e2-1315820965.tcloudbaseapp.com/jump_mp.html?sign=8587800b05c859700944247c03eeae1c&t=1698224973&state=' + - res.data + 'https://cloud1-8gp1n6uofa17e2e2-1315820965.tcloudbaseapp.com/jump_mp.html?sign=8587800b05c859700944247c03eeae1c&t=1698224973&state=' + + res.data window.open(url) }) this.checkPayStatus(params) @@ -547,14 +553,57 @@ export default { payType: 2, appletFlag: 0, } - api.unifiedorder(params).then((res) => { + api.unifiedorder(params).then(res => { let url = - 'https://cloud1-1gql8u3v1fe85a37-1322999719.tcloudbaseapp.com/jump_mp.html?sign=d77deffc9e8aecd2b721f8430c376370&t=1705374125&state=' + - res.data + 'https://cloud1-1gql8u3v1fe85a37-1322999719.tcloudbaseapp.com/jump_mp.html?sign=d77deffc9e8aecd2b721f8430c376370&t=1705374125&state=' + + res.data window.open(url) }) this.checkPayStatus(params) }, + redirectPay(payChannel) { + this.getPayAuthToken(payChannel).then(url => { + if (navigator.userAgent.includes('MicroMessenger')) { + window.location.href = url + } else { + requestAnimationFrame(()=>{ + window.open(url) + }); + } + }) + }, + getPayAuthToken(payChannel) { + return new Promise((resolve, reject) => { + const extParam = { + isRecharge: false, + orderCode: this.orderCode, + specialArea: 1, + isSharePay: true, + } + // 将extParam对象转换为JSON字符串,再转换为base64编码 + const extParamBase64 = btoa(JSON.stringify(extParam)) + const params = { + payChannel: payChannel, + payType: 2, + appletFlag: 0, + businessType: this.businessType, + businessCode: this.orderCode, + extParam: extParamBase64, + } + api.unifiedorder(params).then(res => { + if (res.code === 200) { + resolve(res.data) + this.checkPayStatus(params) + } else { + uni.showToast({ + title: res.msg, + icon: 'none', + }) + reject(res.msg) + } + }) + }) + }, scanPayBfWx(val) { let params = { businessType: 1, @@ -562,21 +611,21 @@ export default { payChannel: val, payType: 2, } - api.unifiedorder(params).then((res) => { + api.unifiedorder(params).then(res => { this.wxPopup = true this.$nextTick(() => { new QRCode( - this.$refs.qrCodeUrlWx, - { - width: 280, - height: 280, - text: res.data, - colorDark: '#000000', - colorLight: '#ffffff', - correctLevel: QRCode.CorrectLevel.Q, - textAlign: 'center', - }, - 1000 + this.$refs.qrCodeUrlWx, + { + width: 280, + height: 280, + text: res.data, + colorDark: '#000000', + colorLight: '#ffffff', + correctLevel: QRCode.CorrectLevel.Q, + textAlign: 'center', + }, + 1000 ) }) }) @@ -593,16 +642,14 @@ export default { } }, getPayConfig() { - api.payConfig().then((res) => { + api.payConfig().then(res => { this.payList = res.data - this.$nextTick(() => { - this.$refs.collapse.init() - }) + this.$forceUpdate() }) }, getBankList() { - api.jdBankList().then((res) => { + api.jdBankList().then(res => { this.jdList = res.data }) // api.hfBankList().then((res) => { @@ -618,15 +665,15 @@ export default { }, getOrderInfo() { api - .orderInfo({ - specialArea: this.specialArea, - orderCode: this.orderCode, - pkSettleCountry: this.pkCountry, - }) - .then((res) => { - this.orderData = res.data - this.downTime() - }) + .orderInfo({ + specialArea: this.specialArea, + orderCode: this.orderCode, + pkSettleCountry: this.pkCountry, + }) + .then(res => { + this.orderData = res.data + this.downTime() + }) }, downTime() { let that = this @@ -640,18 +687,18 @@ export default { }, getSpendInfo() { api - .spendDetails({ - specialArea: this.specialArea, - orderCode: this.orderCode, - pkSettleCountry: this.pkCountry, - }) - .then((res) => { - // this.payDetail = res.data - this.$set(this, 'payDetail', res.data) - }) + .spendDetails({ + specialArea: this.specialArea, + orderCode: this.orderCode, + pkSettleCountry: this.pkCountry, + }) + .then(res => { + // this.payDetail = res.data + this.$set(this, 'payDetail', res.data) + }) }, reset() { - this.$store.dispatch('GetInfo').then((res) => { + this.$store.dispatch('GetInfo').then(res => { uni.reLaunch({ url: '/pages/index/index', }) @@ -667,9 +714,14 @@ export default { clearInterval(payStatus) this.wxPopup = false // this.showSucce = true - this.fansOrder() + uni.showLoading({ + title: '正在获取注册信息,请不要关闭当前页面', + }) + setTimeout(() => { + this.fansOrder() + }, 2000) } else { - api.payStatus(data).then((res) => { + api.payStatus(data).then(res => { that.sucPay = res.data }) } @@ -710,7 +762,9 @@ export default { .tit { font-size: 24px; - font-family: PingFang SC-Semibold, PingFang SC; + font-family: + PingFang SC-Semibold, + PingFang SC; font-weight: 600; text-align: center; color: #333333; @@ -719,7 +773,9 @@ export default { .tit1 { font-size: 24px; - font-family: PingFang SC-Semibold, PingFang SC; + font-family: + PingFang SC-Semibold, + PingFang SC; font-weight: 600; color: #e02b26; text-align: center; @@ -728,7 +784,9 @@ export default { .tit2 { font-size: 11px; - font-family: PingFang SC-Regular, PingFang SC; + font-family: + PingFang SC-Regular, + PingFang SC; font-weight: 400; color: #666666; display: flex; @@ -755,7 +813,9 @@ export default { display: flex; align-items: center; font-size: 12px; - font-family: PingFang SC-Semibold, PingFang SC; + font-family: + PingFang SC-Semibold, + PingFang SC; font-weight: 600; color: #333333; @@ -773,10 +833,9 @@ export default { .flex_ac { display: flex; align-items: center; - width: 100%; justify-content: space-between; border-bottom: 1px solid rgba(0, 0, 0, 0.1); - padding: 18rpx 0; + padding: 18rpx 20rpx; } .flex_ac1 { @@ -786,14 +845,16 @@ export default { width: 100%; justify-content: space-between; border-bottom: 1px solid rgba(0, 0, 0, 0.1); - padding: 18rpx 0; + // padding: 18rpx 0; } .flex_ac_i { display: flex; align-items: center; font-size: 12px; - font-family: PingFang SC-Regular, PingFang SC; + font-family: + PingFang SC-Regular, + PingFang SC; font-weight: 400; color: #333333; @@ -804,10 +865,6 @@ export default { } } -::v-deep .u-collapse-item__content__text { - padding: 0px 15px; -} - .pad { width: 100%; display: flex; @@ -915,14 +972,18 @@ export default { justify-content: space-between; color: #666; font-size: 12px; - font-family: PingFang SC-Semibold, PingFang SC; + font-family: + PingFang SC-Semibold, + PingFang SC; font-weight: 600; color: #999; } .tTit { font-size: 12px; - font-family: PingFang SC-Semibold, PingFang SC; + font-family: + PingFang SC-Semibold, + PingFang SC; font-weight: 600; color: #666; } diff --git a/pages/pay/index.vue b/pages/pay/index.vue index e1126a7..6b02a7b 100644 --- a/pages/pay/index.vue +++ b/pages/pay/index.vue @@ -1,391 +1,397 @@ -