Files
xo_user_client/components/payment/payment.vue
2025-05-21 16:52:47 +08:00

986 lines
31 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view :class="theme_view">
<!-- 支付二维码展示 -->
<component-popup :propShow="popup_view_pay_qrcode_is_show" propPosition="bottom" @onclose="popup_view_pay_qrcode_event_close">
<view class="padding-top-xxxl padding-bottom-xxxl padding-left-xxxl padding-right-xxxl tc">
<block v-if="(popup_view_pay_data || null) == null || (popup_view_pay_data.qrcode_url || null) == null || (popup_view_pay_data.name || null) == null || (popup_view_pay_data.order_no || null) == null">
<text class="cr-grey">{{ $t('payment.payment.973g2e') }}</text>
</block>
<block v-else>
<view class="fw-b text-size cr-base margin-bottom-sm">{{ popup_view_pay_data.name }}</view>
<image :src="popup_view_pay_data.qrcode_url" mode="aspectFit" class="dis-block auto max-w"></image>
<view v-if="(popup_view_pay_data.msg || null) != null" class="cr-yellow margin-top-sm">{{ popup_view_pay_data.msg }}</view>
<!-- #ifdef H5 -->
<view v-if="popup_view_pay_data.pay_url != null" class="margin-top-xl">
<a :href="popup_view_pay_data.pay_url" target="_blank" class="dis-inline-block cr-green">{{ $t('payment.payment.z3y296') }}</a>
</view>
<!-- #endif -->
</block>
</view>
</component-popup>
<!-- 支付方式 popup -->
<component-popup :propShow="is_show_payment_popup" propPosition="bottom" @onclose="payment_popup_event_close">
<view class="poupon-title padding-main tc text-size-md pr">{{ $t('payment.payment.iu792d') }}<iconfont name="icon-close-o" propClass="pa right-0 margin-right-main margin-top-xs" size="30rpx" color="#999" @tap="payment_popup_event_close"></iconfont> </view>
<view class="payment-price tc padding-top-sm padding-bottom-sm br-b">
<text class="text-size-md">{{ propCurrencySymbol }}</text>
{{ propPayPrice }}
</view>
<view v-if="payment_list.length > 0" class="oh">
<view class="payment-list">
<scroll-view scroll-y="true" class="scroll-y wh-auto">
<view v-for="(item, index) in payment_list" :key="index" class="item br-b flex-row jc-sb align-c" :data-value="item.id" @tap="checked_payment">
<view class="flex-1">
<image v-if="(item.logo || null) != null" class="icon va-m margin-right-sm" :src="item.logo" mode="widthFix"></image>
<text class="va-m">{{ item.name }}</text>
<text v-if="(item.tips || null) !== null" class="va-m cr-red">{{ item.tips }}</text>
</view>
<iconfont :name="payment_id == item.id ? 'icon-zhifu-yixuan' : 'icon-zhifu-weixuan'" size="44rpx" :color="payment_id == item.id ? '#E22C08' : '#ccc'"></iconfont>
</view>
</scroll-view>
</view>
<view class="payment-submit">
<view class="bottom-line-exclude">
<button class="bg-main br-main cr-white round text-size" type="default" hover-class="none" @tap="popup_payment_event" :disabled="submit_disabled_status">{{ $t('payment.payment.25r53g') }}</button>
</view>
</view>
</view>
<view v-else class="padding-top-xxxl padding-bottom-xxxl oh bg-white tc cr-grey">{{ $t('payment.payment.058a46') }}</view>
</component-popup>
<!-- 支付html展示 -->
<component-popup :propShow="popup_view_pay_html_is_show" propPosition="bottom" @onclose="popup_view_pay_html_event_close">
<view class="popup-pay-html-content padding-top-xxxl padding-bottom-xxxl padding-left-xxxl padding-right-xxxl tc">
<block v-if="(popup_view_pay_data || null) == null">
<text class="cr-grey">{{ $t('payment.payment.973g2e') }}</text>
</block>
<block v-else>
<mp-html :content="popup_view_pay_data" />
</block>
</view>
</component-popup>
<!-- 支付中提示弹窗 -->
<view v-if="payment_confirm_modal_status" class="payment-confirm-modal">
<view class="content padding-xl margin-xxl tc bg-white border-radius-main">
<view class="padding-vertical-xxxxl">{{ $t('common.payment_in_text') }}</view>
<view class="margin-top-lg">
<button type="default" size="mini" class="bg-white br-black cr-black text-size-sm round margin-right-xxxxl" data-type="0" @tap="payment_confirm_event">{{ $t('common.not_have_name') }}</button>
<button type="default" size="mini" class="bg-main br-main cr-white text-size-sm round margin-left-xxxxl" data-type="1" @tap="payment_confirm_event">{{ $t('order.order.s8g966') }}</button>
</view>
</view>
</view>
</view>
</template>
<script>
const app = getApp();
import base64 from '@/common/js/lib/base64.js';
import componentPopup from '@/components/popup/popup';
import wx from 'weixin-js-sdk';
export default {
name: 'pay',
data() {
return {
theme_view: app.globalData.get_theme_value_view(),
// 支付方式列表
payment_list: [],
// 弹窗开关
is_show_payment_popup: false,
popup_view_pay_qrcode_is_show: false,
// 支付弹窗展示数据
popup_view_pay_data: null,
// 定时器
pay_statuc_check_timer: null,
// 支付id
payment_id: 0,
submit_disabled_status: true,
order_id: 0,
popup_view_pay_html_is_show: false,
// 打开url地址定时任务和状态
open_pay_url_timer: null,
open_pay_url_status: true,
// 支付返回数据
pay_response_data: {},
// 支付确认弹窗
payment_confirm_modal_status: false,
};
},
props: {
propCurrencySymbol: {
type: String,
default: app.globalData.currency_symbol(),
},
propPayUrl: {
type: String,
default: '',
},
propQrcodeUrl: {
type: String,
default: '',
},
propPaymentList: {
type: Array,
default: () => {
return [];
},
},
propIsShowPayment: {
type: Boolean,
default: false,
},
// 订单id
propTempPayValue: {
type: [String, Number],
default: '',
},
// 订单id参数名默认为id
propPayDataKey: {
type: String,
default: 'id',
},
// 订单下标 ---- 用于处理支付成功后前端修改成功状态
propTempPayIndex: {
type: [Number, String],
default: 0,
},
// 支付id 值为0表示没有配置支付方式
propPaymentId: {
type: [Number, String],
default: 0,
},
// 默认支付id 值为0表示没有默认
propDefaultPaymentId: {
type: [Number, String],
default: 0,
},
// 付款金额
propPayPrice: {
type: [Number, String],
default: 0,
},
// 支付跳转页面------跳转成功页面---后返回的页面
propToPageBack: {
type: Object,
default: () => {
return {};
},
},
// 指定所有页面跳转到指定页面------除现金支付外
propToPage: {
type: String,
default: '',
},
// 现金支付-指定跳转页面----不进入充值成功页面:不配置则表示不跳转
propToAppointPage: {
type: String,
default: '',
},
// 支付失败跳转页面------不传则停留在当前页面
propToFailPage: {
type: String,
default: '',
},
//是否需要关闭页面进行跳转
propIsRedirectTo: {
type: Boolean,
default: false,
},
// 判断错误时是否需要弹窗提示
propIsFailAlert: {
type: Boolean,
default: true,
},
},
components: {
componentPopup,
},
watch: {
// 支付方式是否改变
propPaymentList(value, old_value) {
this.setData({
payment_list: value,
});
},
// 是否显示支付方式
propIsShowPayment(new_val, old_val) {
if (new_val !== old_val) {
let bool = true;
if (this.payment_list.length == 1) {
bool = false;
this.setData({
payment_id: this.payment_list[0].id,
});
} else {
let self = this;
self.payment_list.forEach((item) => {
let new_payment_id = Number(self.propPaymentId) == 0 ? self.propDefaultPaymentId : Number(self.propPaymentId);
if (item.id == new_payment_id) {
bool = false;
}
});
this.setData({
payment_id: Number(this.propPaymentId) == 0 ? this.propDefaultPaymentId : Number(this.propPaymentId),
});
}
this.setData({
is_show_payment_popup: new_val,
submit_disabled_status: bool,
});
}
},
},
// 页面被展示
created: function () {
this.setData({
payment_list: this.propPaymentList,
payment_id: Number(this.propPaymentId) == 0 ? this.propDefaultPaymentId : Number(this.propPaymentId),
});
},
methods: {
// 支付弹窗关闭
payment_popup_event_close(e) {
this.setData({
is_show_payment_popup: false,
});
this.$emit('close-payment-popup', false);
},
// 支付二维码展示窗口事件
popup_view_pay_qrcode_event_close(e) {
// 关闭弹窗
this.setData({
popup_view_pay_qrcode_is_show: false,
});
// 清除定时和支付数据
clearInterval(this.pay_statuc_check_timer);
},
// 选择支付方式
checked_payment(e) {
this.setData({
payment_id: e.currentTarget.dataset.value,
submit_disabled_status: false,
});
},
// 支付弹窗发起支付
popup_payment_event() {
if (this.submit_disabled_status) {
app.globalData.showToast(this.$t('payment.payment.x6d585'));
return false;
}
this.setData({
is_show_payment_popup: false,
});
this.pay_handle(this.propTempPayValue, this.payment_id);
this.$emit('close-payment-popup', false);
},
// 支付方法
pay_handle(order_id, payment_id = 0, payment_list = []) {
// 没有指定支付方式则使用属性传过来的值
if ((payment_list || null) != null && payment_list.length > 0) {
this.setData({
payment_list: payment_list,
});
}
// 没有支付方式
if ((payment_id || 0) == 0) {
this.pay_handle_event(order_id, payment_id);
} else {
// 循环匹配支付方式
this.payment_list.forEach((item) => {
if (item.id == payment_id) {
if (item.payment == 'WalletPay') {
var self = this;
uni.showModal({
title: self.$t('common.warm_tips'),
content: self.$t('payment.payment.011cj4'),
confirmText: self.$t('common.confirm'),
cancelText: self.$t('common.not_yet'),
success(res) {
if (res.confirm) {
console.log('1111111111111111');
self.pay_handle_event(order_id, payment_id);
} else {
console.log('22222222222222');
self.order_item_pay_fail_handle(null, order_id, self.$t('paytips.paytips.6mpsl7'));
}
},
});
} else {
this.pay_handle_event(order_id, payment_id);
}
}
});
}
},
// 支付处理
pay_handle_event(order_id, payment_id = 0) {
console.log('pay_handle_event===', order_id);
// 没有指定支付方式则不匹配支付标识
var payment = null;
if ((payment_id || 0) != 0) {
// 支付方式
for (var i in this.payment_list) {
if (this.payment_list[i]['id'] == (payment_id || this.payment_id)) {
payment = this.payment_list[i];
}
}
if (payment == null) {
app.globalData.showToast(this.$t('payment.payment.7ihx9u'));
return false;
}
}
// 从一开始就判断支付方式,如果是无忧支付直接进入支付状态判断页面
console.log('payment===', payment);
if (payment.payment == 'IEPayPoli') {
console.log('直接进入无忧支付,开始跳转');
uni.setStorageSync('wuyouPay', '');
uni.redirectTo({
url: `/pages/buy/wu_you_status?payment_id=${payment.id}&order_id=${order_id}`,
});
} else if (payment.payment == 'WalletPay') {
console.log('支付宝支付order_id===', order_id);
// console.log('支付宝支付===', data);
} else {
// 请求数据
var post_data = {
[this.propPayDataKey]: order_id,
payment_id: payment_id || this.payment_id,
};
// h5自定义重定向地址
// #ifdef H5
var redirect_url = app.globalData.page_url_protocol(this.propToAppointPage || app.globalData.get_page_url(false));
post_data['redirect_url'] = encodeURIComponent(base64.encode(redirect_url));
// 存在支付标识、指定支付方式使用respond_url返回地址、移除重定向地址
if (payment != null) {
var respond_arr = ['PayPal', 'UniPayment'];
if (respond_arr.indexOf(payment.payment) != -1) {
post_data['respond_url'] = post_data['redirect_url'];
delete post_data['redirect_url'];
}
}
// #endif
// 请求支付接口
uni.showLoading({
title: this.$t('payment.payment.e1f54e'),
mask: true,
});
console.log('this.propPayUrl===', this.propPayUrl);
if (this.propPayUrl) {
console.log('post_data===', post_data);
uni.request({
url: this.propPayUrl,
method: 'POST',
data: post_data,
dataType: 'json',
success: (res) => {
console.log('this.propPayUrl.res===', res);
uni.hideLoading();
var data = res.data.data;
this.setData({
pay_response_data: data || {},
});
if (res.data.code == 0) {
// 是否直接支付成功
if ((data.is_success || 0) == 1) {
// 数据设置
this.order_item_pay_success_handle(data, order_id, false);
app.globalData.showToast(this.$t('paytips.paytips.679rxu'), 'success');
setTimeout(() => {
this.to_success_page_event();
}, 2000);
} else {
// 支付方式类型
let payment_type = Number(data.is_payment_type || 0);
switch (payment_type) {
// 正常线上支付
case 0:
// #ifdef APP
this.app_pay_handle(this, data, order_id);
// #endif
// #ifdef MP-TOUTIAO
// 头条是否非普通版本支持
if (parseInt(data.data.pay_type || 0) == 1) {
this.toutiao_transaction_pay_handle(this, data, order_id);
} else {
this.mp_pay_handle(this, data, order_id);
}
// #endif
// #ifdef MP-WEIXIN || MP-ALIPAY || MP-BAIDU
this.mp_pay_handle(this, data, order_id);
// #endif
// #ifdef MP-KUAISHOU
this.kuaishou_pay_handle(this, data, order_id);
// #endif
// #ifdef MP-QQ
this.qq_pay_handle(this, data, order_id);
// #endif
// #ifdef H5
this.h5_pay_handle(this, data, order_id);
// #endif
break;
// 线下支付
case 1:
// 现金支付
let self = this;
uni.showModal({
content: res.data.msg,
showCancel: false,
confirmText: self.$t('common.confirm'),
success(res) {
if (res.confirm) {
self.to_other(order_id);
} else {
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6mpsl7'));
}
},
});
break;
// 钱包支付
case 2:
this.order_item_pay_success_handle(data, order_id);
break;
// 默认
default:
app.globalData.showToast(this.$t('payment.payment.vhx5dv'));
}
}
} else {
// 是否返回html代码展示、则提示错误
if (res.data.code == -6666 && (data || null) != null) {
this.setData({
popup_view_pay_data: data,
popup_view_pay_html_is_show: true,
});
} else {
this.order_item_pay_fail_handle(data, order_id, res.data.msg);
}
}
},
fail: (res) => {
console.log('fail', res);
uni.hideLoading();
app.globalData.showToast(this.$t('common.internet_error_tips'));
},
});
} else {
console.log('为什么不进支付');
app.globalData.showToast(this.$t('payment.payment.597s8b'));
}
}
},
// APP支付
app_pay_handle(self, data, order_id) {
var arr = {
Alipay: 'alipay',
Weixin: 'wxpay',
PayPal: 'paypal',
};
var pay_value = arr[data.payment.payment] || null;
if (pay_value != null) {
uni.getProvider({
service: 'payment',
success: function (res) {
if (~res.provider.indexOf(pay_value)) {
var pay_data = (data.data.pay_data || null) == null ? data.data : data.data.pay_data;
uni.requestPayment({
provider: pay_value,
orderInfo: pay_data,
success: function (res) {
// 是否需要回调捕获
var call_back_url = data.data.call_back_url || null;
if (call_back_url != null) {
uni.request({ url: call_back_url, method: 'GET' });
}
// 成功处理数据
self.order_item_pay_success_handle(data, order_id);
},
fail: function (err) {
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6y488i'));
},
});
} else {
app.globalData.showToast(data.payment.payment + self.$t('payment.payment.bv637f'));
}
},
});
} else {
// 先清除定时任务
if (self.open_pay_url_timer != null) {
clearTimeout(self.open_pay_url_timer);
}
// 显示加载层
uni.showLoading({
title: self.$t('common.loading_in_text'),
mask: true,
});
// 设置打开url状态
self.setData({
open_pay_url_status: true,
});
// 打开url
plus.runtime.openURL(data.data, function (error) {
uni.hideLoading();
// 打开url失败、并进入提示失败环节
self.setData({
open_pay_url_status: false,
});
self.order_item_pay_fail_handle(data, order_id, error.message + '(' + error.code + ')');
});
// 定时3秒后提示用户确认支付状态
self.open_pay_url_timer = setTimeout(function () {
if (self.open_pay_url_status) {
uni.hideLoading();
uni.showModal({
content: self.$t('payment.payment.sdfs31'),
showCancel: true,
cancelText: self.$t('common.not_have_name'),
confirmText: self.$t('order.order.s8g966'),
success(res) {
if (res.confirm) {
self.order_item_pay_success_handle(data, order_id);
} else {
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6y488i'));
}
},
});
}
}, 3000);
}
},
// 快手小程序
kuaishou_pay_handle(self, data, order_id) {
uni.pay({
orderInfo: data.data,
serviceId: '1',
success: (res) => {
// 数据设置
self.order_item_pay_success_handle(data, order_id);
},
fail: (res) => {
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6y488i'));
},
});
},
// 头条小程序非普通交易支付处理
toutiao_transaction_pay_handle(self, data, order_id) {
if (!uni.canIUse('requestOrder') || !uni.canIUse('getOrderPayment')) {
app.globalData.showToast(self.$t('payment.payment.4dszme'));
return false;
}
uni.requestOrder({
data: data.data.data,
byteAuthorization: data.data.auth,
success: (res) => {
uni.getOrderPayment({
orderId: res.orderId,
success: (res) => {
// 数据设置
self.order_item_pay_success_handle(data, order_id);
},
fail: (res) => {
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6y488i'));
},
});
},
fail: (res) => {
app.globalData.showToast(res.errMsg + '(' + res.errNo + ')');
},
});
},
// 小程序: 微信、支付宝、百度、头条、QQ
mp_pay_handle(self, data, order_id) {
// 是否打开另一个小程序
if (typeof data.data != 'string' && (data.data.appid || null) != null && (data.data.path || null) != null && (data.data.order_no || null) != null) {
uni.navigateToMiniProgram({
appId: data.data.appid,
path: data.data.path,
extraData: data.data.extra_data || {},
success(res) {
// 支付状态验证
self.pay_status_check_handle(self, data, order_id);
// 提示弹窗
self.setData({
payment_confirm_modal_status: true,
});
},
fail(res) {
app.globalData.showToast(self.$t('paytips.paytips.6y488i'));
},
});
} else {
uni.requestPayment({
// #ifdef MP-ALIPAY || MP-BAIDU || MP-TOUTIAO
orderInfo: data.data,
// #endif
// #ifdef MP-QQ
package: data.data,
// #endif
// #ifdef MP-WEIXIN
timeStamp: data.data.timeStamp,
nonceStr: data.data.nonceStr,
package: data.data.package,
signType: data.data.signType,
paySign: data.data.paySign,
// #endif
// #ifdef MP-TOUTIAO
service: 5,
// #endif
success: (res) => {
console.log('支付成功1111===', res);
// #ifdef MP-ALIPAY
if (res.resultCode != 9000) {
self.order_item_pay_fail_handle(data, order_id, res.memo || self.$t('paytips.paytips.6y488i'));
return false;
}
// #endif
// #ifdef MP-TOUTIAO
if (res.code != 0) {
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6y488i'));
return false;
}
// #endif
// 数据设置
self.order_item_pay_success_handle(data, order_id);
},
fail: (res) => {
console.log('支付失败2222===', res);
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6y488i'));
},
});
}
},
// QQ支付处理
qq_pay_handle(self, data, order_id) {
// 是否微信支付
if (data.payment.payment == 'Weixin') {
uni.requestWxPayment({
url: data.data,
referer: app.globalData.data.request_url,
success: function (res) {
app.globalData.alert({
msg: self.$t('payment.payment.k2i010'),
is_show_cancel: 0,
});
// 支付接口调用成功,但是不知道是否支付成功,所以需要重新获取列表数据
self.$emit('reset-event');
},
fail: function (res) {
self.order_item_pay_fail_handle(data, order_id, self.$t('paytips.paytips.6y488i'));
},
});
} else {
self.mp_pay_handle(self, data, order_id);
}
},
// h5支付处理
h5_pay_handle(self, data, order_id) {
console.log('h5_pay_handle===', order_id);
// 字符串则为跳转地址直接进入
if (typeof data.data == 'string') {
window.location.href = data.data;
} else {
var status = false;
// 微信jsapi
if (data.payment.payment == 'Weixin' && (data.data.appId || null) != null && (data.data.timeStamp || null) != null && (data.data.nonceStr || null) != null && (data.data.package || null) != null && (data.data.signType || null) != null && (data.data.paySign || null) != null) {
status = true;
// 调用微信支付接口
wx.chooseWXPay({
timestamp: data.data.timeStamp,
nonceStr: data.data.nonceStr,
package: data.data.package,
signType: data.data.signType,
paySign: data.data.paySign,
success: (res) => {
console.log('支付成功:', res);
self.order_item_pay_success_handle(data, order_id);
},
cancel: (res) => {
console.log('支付取消:', res);
self.order_item_pay_fail_handle(data, order_id, '取消支付');
},
fail: (res) => {
console.error('支付失败:', res);
self.order_item_pay_fail_handle(data, order_id, res.errMsg);
},
});
// function onBridgeReady() {
// WeixinJSBridge.invoke(
// 'getBrandWCPayRequest',
// {
// appId: data.data.appId,
// timeStamp: data.data.timeStamp,
// nonceStr: data.data.nonceStr,
// package: data.data.package,
// signType: data.data.signType,
// paySign: data.data.paySign,
// },
// function (res) {
// if (res.err_msg == 'get_brand_wcpay_request:ok') {
// // 数据设置
// self.order_item_pay_success_handle(data, order_id);
// } else {
// self.order_item_pay_fail_handle(data, order_id, res.err_msg);
// }
// }
// );
// }
// if (typeof WeixinJSBridge == 'undefined') {
// if (document.addEventListener) {
// document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
// } else if (document.attachEvent) {
// document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
// document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
// }
// } else {
// onBridgeReady();
// }
}
// 无忧支付
if (data.payment.payment == 'IEPayPoli') {
console.log('无忧支付order_id===', order_id);
console.log('无忧支付===', data);
uni.setStorageSync('wuyouPay', '');
uni.redirectTo({
url: `/pages/buy/wu_you_status?payment_id=${data.payment.id}&order_id=${order_id}`,
});
return;
}
// 支付宝支付
if (data.payment.payment == 'WalletPay') {
console.log('支付宝支付order_id===', order_id);
console.log('支付宝支付===', data);
return;
}
// 二维码展示
if ((data.data.qrcode_url || null) != null && (data.data.name || null) != null && (data.data.order_no || null) != null) {
status = true;
// 显示支付窗口
self.setData({
popup_view_pay_data: data.data,
popup_view_pay_qrcode_is_show: true,
});
// 状态验证
self.pay_status_check_handle(self, data, order_id);
}
// 返回html表单
if ((data.data.html || null) != null) {
status = true;
var div = document.createElement('paydivform');
div.innerHTML = data.data.html;
document.body.appendChild(div);
var fm = document.forms;
var fm_len = fm.length;
if (fm_len > 0) {
fm[fm_len - 1].submit();
}
}
// 未匹配到的支付处理方式
if (!status) {
app.globalData.showToast(data.payment.name + self.$t('payment.payment.2rw3qh'));
}
}
},
// 支付状态验证处理
pay_status_check_handle(self, data, order_id) {
// 先清除已存在的定时
clearInterval(self.pay_statuc_check_timer);
// 定时校验支付状态
var timer = setInterval(function () {
uni.request({
url: self.propQrcodeUrl,
method: 'POST',
data: {
order_no: data.data.order_no,
},
dataType: 'json',
success: (res) => {
if (res.data.code == 0) {
// 清除定时、支付数据、弹窗
clearInterval(self.pay_statuc_check_timer);
self.setData({
popup_view_pay_data: null,
popup_view_pay_qrcode_is_show: false,
payment_confirm_modal_status: false,
});
// 数据设置
self.order_item_pay_success_handle(data, order_id);
} else {
// -333支付中、其它状态则提示错误
if (res.data.code != -333) {
clearInterval(self.pay_statuc_check_timer);
app.globalData.showToast(res.data.msg);
}
}
},
fail: () => {
clearInterval(self.pay_statuc_check_timer);
self.order_item_pay_fail_handle(data, order_id, self.$t('common.internet_error_tips'));
},
});
}, 3000);
self.setData({
pay_statuc_check_timer: timer,
});
},
// 支付确认弹窗事件
payment_confirm_event(e) {
// 关闭弹窗清除定时任务
this.setData({
payment_confirm_modal_status: false,
});
clearInterval(this.pay_statuc_check_timer);
// 回调处理
if (parseInt(e.currentTarget.dataset.type || 0) == 1) {
this.order_item_pay_success_handle(this.pay_response_data, this.order_id);
} else {
this.order_item_pay_fail_handle(this.pay_response_data, this.order_id, this.$t('paytips.paytips.6y488i'));
}
},
// 支付成功数据设置 data:后台返回的参数, order_id: 订单idis_to_page是否需要跳转页面的参数控制
order_item_pay_success_handle(data, order_id, is_to_page = true) {
let back_data = {
data: data,
order_id: order_id,
temp_pay_index: this.propTempPayIndex,
payment_id: this.payment_id,
is_to_page: is_to_page,
};
this.$emit('pay-success', back_data);
if (is_to_page) {
this.to_success_page_event();
}
},
// 支付失败数据设置 data:后台返回的参数, order_id: 订单id, msg: 错误提示信息
order_item_pay_fail_handle(data, order_id, msg) {
let back_data = {
data: data,
order_id: order_id,
temp_pay_index: this.propTempPayIndex,
payment_id: this.payment_id,
};
this.$emit('pay-fail', back_data);
this.to_fail_page_event(msg);
},
// 成功跳转
to_success_page_event() {
if (this.propToPage) {
// 跳转支付页面
app.globalData.url_open(this.propToPage, true);
} else {
let url_data = {
code: '9000',
};
url_data = Object.assign({}, url_data, this.propToPageBack);
// 跳转支付页面
app.globalData.url_open('/pages/paytips/paytips?params=' + encodeURIComponent(base64.encode(JSON.stringify(url_data))), this.propIsRedirectTo);
}
},
// 失败跳转
to_fail_page_event(msg) {
let to_fail_page = this.propToFailPage || null;
if (to_fail_page != null) {
let join = to_fail_page.indexOf('?') == -1 ? '?' : '&';
to_fail_page += join + 'msg=' + msg;
if (this.propIsFailAlert) {
// 现金支付
uni.showModal({
content: msg,
showCancel: false,
confirmText: this.$t('common.confirm'),
success(res) {
if (res.confirm) {
// 跳转支付页面
app.globalData.url_open(to_fail_page, true);
}
},
});
} else {
// 跳转支付页面
app.globalData.url_open(to_fail_page, true);
}
} else {
if (msg) {
app.globalData.showToast(msg);
}
}
},
to_other(order_id) {
if (this.propToAppointPage) {
// 跳转订单列表页
app.globalData.url_open(this.propToAppointPage, true);
}
},
// 页面卸载
onUnload(e) {
clearInterval(this.pay_statuc_check_timer);
},
// 支付html展示窗口事件
popup_view_pay_html_event_close(e) {
this.setData({
popup_view_pay_html_is_show: false,
});
this.to_other();
},
},
};
</script>
<style scoped>
/**
* 支付方式
*/
.payment-price {
font-size: 80rpx;
}
.payment-list .scroll-y {
max-height: 430rpx;
}
.payment-list .item {
padding: 28rpx 28rpx 28rpx 32rpx;
}
.payment-list .icon {
width: 50rpx;
height: 50rpx !important;
}
.payment-submit {
padding: 40rpx;
}
/**
* 支付确认弹窗
*/
.payment-confirm-modal {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.6);
z-index: 100;
width: 100%;
height: 100%;
}
.payment-confirm-modal .content {
margin-top: 60%;
z-index: 101;
}
</style>