182 lines
5.4 KiB
JavaScript
182 lines
5.4 KiB
JavaScript
import {
|
|
payH5API,
|
|
alipayH5API
|
|
} from '@/request/index/index.js';
|
|
import {
|
|
WXpayAPI,
|
|
WXpayDYPAPI
|
|
} from '@/request/restaurant/index.js';
|
|
import {
|
|
WXpayH5API
|
|
} from '@/request/recharge/index.js';
|
|
import {
|
|
// createOrderNewAPI,
|
|
agOrderPayAPI,
|
|
} from '@/request/restaurant/index.js';
|
|
// 获取配置文件
|
|
import config from '@/static/js/config.js';
|
|
import {
|
|
mapGetters,
|
|
} from 'vuex';
|
|
// 公共mixins
|
|
export default {
|
|
computed:{
|
|
...mapGetters({
|
|
// 获取品牌Id
|
|
BrandInfor: 'shopping/BrandInfor',
|
|
}),
|
|
},
|
|
// 方法
|
|
methods: {
|
|
// 获取当前品牌配置
|
|
Brand() {
|
|
// console.log( this['BrandInfor'],'11111111111111');
|
|
return config[`Brand_${this['BrandInfor']['brand_id']}`]
|
|
},
|
|
// 支付
|
|
payment(data) {
|
|
uni.showLoading({
|
|
title: '加载中'
|
|
});
|
|
/**
|
|
* @param {String} order_sn订单号
|
|
* @param {Number} type订单类型
|
|
* @param {String} redirect_url回调地址(查询支付状态完成之后的回调地址,并非请求支付接口时的回调地址)
|
|
* @payment方法的回调地址是查询完订单状态之后要进入的页面
|
|
*/
|
|
|
|
let {
|
|
type = 1,
|
|
Number = 0,
|
|
order_sn = '',
|
|
redirect_url = '',
|
|
} = data;
|
|
|
|
console.log(data, '新支付方法参数');
|
|
|
|
// 微信跳转H5下单支付时需要先获取支付参数然后跳转微信小程序支付
|
|
if (getApp()['globalData']['parameters']?.isWechat) {
|
|
this._H5WXPAY(data).then(res => {
|
|
uni.hideLoading();
|
|
console.log(res['data'], '微信支付参数');
|
|
const miniPayRequest = {
|
|
timeStamp: encodeURIComponent(res['data']['result']['timestamp']),
|
|
nonceStr: encodeURIComponent(res['data']['result']['nonceStr']),
|
|
package: encodeURIComponent(res['data']['result']['package']),
|
|
signType: encodeURIComponent(res['data']['result']['signType']),
|
|
paySign: encodeURIComponent(res['data']['result']['paySign']),
|
|
order_sn: res['data']['out_trade_no'],
|
|
type,
|
|
business: 'restaurant',
|
|
// 微信结算付款页面需要return_url字段
|
|
return_url: redirect_url
|
|
};
|
|
console.log(encodeURIComponent(JSON.stringify(miniPayRequest)), '编码');
|
|
// return
|
|
wx.miniProgram.navigateTo({
|
|
url: `/pages/wxpay/wxpay?data=${encodeURIComponent(JSON.stringify(miniPayRequest))}&isencodeURL=true`
|
|
});
|
|
})
|
|
|
|
} else {
|
|
// 测试
|
|
// location.href = `/pages/pay/index?order_sn=${order_sn}&type=${type}&redirect_url=${redirect_url}`;
|
|
// return
|
|
|
|
// 反之直接获取支付链接
|
|
// 回调地址添加标识。用于点击返回上一页
|
|
// redirect_url = `${redirect_url}`;
|
|
WXpayH5API({
|
|
order_sn,
|
|
type,
|
|
redirect_url: `${getApp()['globalData']['urlfileName']}/pages/pay/index?order_sn=${order_sn}&type=${type}&redirect_url=${redirect_url}`
|
|
}).then(res => {
|
|
console.log(
|
|
`${getApp()['globalData']['urlfileName']}/pages/pay/index?order_sn=${order_sn}&type=${type}&redirect_url=${redirect_url}`
|
|
)
|
|
console.log(res['data']['redirect_url'], '支付方法地址');
|
|
location.href = res['data']['redirect_url'];
|
|
})
|
|
}
|
|
},
|
|
|
|
|
|
// H5在小程序环境下支付时每个接口不同所以封装为统一方法
|
|
_H5WXPAY(PayPara) {
|
|
// 点餐微信支付接口
|
|
if (PayPara['type'] == 3) {
|
|
let { order_sn: out_order_num, money } = PayPara;
|
|
return WXpayAPI({ out_order_num, money });
|
|
};
|
|
|
|
// 电影票微信支付接口
|
|
if (PayPara['type'] == 4) {
|
|
let { order_sn: orderNo } = PayPara;
|
|
return WXpayDYPAPI({ orderNo });
|
|
}
|
|
},
|
|
|
|
|
|
/**
|
|
* @支付回调统一管理方法
|
|
* @查询订单状态完成之后的回调地址redirect_url
|
|
*/
|
|
pay_statepage(parameters, redirect_url) {
|
|
// console.log(order_sn,'pay_statepage方法参数');
|
|
let url = '';
|
|
url += redirect_url;
|
|
console.log(url, '判断跳转链接');
|
|
// 拼接参数将对象转换为URL参数
|
|
console.log('拼接参数')
|
|
if (typeof parameters !== 'undefined') {
|
|
for (let key in parameters) {
|
|
if (url.indexOf('?') == -1) {
|
|
url += `?${key}=${parameters[key]}`;
|
|
continue;
|
|
};
|
|
url += `&${key}=${parameters[key]}`
|
|
}
|
|
};
|
|
console.log(url, '地址');
|
|
if (redirect_url) {
|
|
uni.redirectTo({
|
|
url
|
|
})
|
|
}
|
|
},
|
|
|
|
// 订单立即支付
|
|
againpayment(order_sn,money = 0) {
|
|
console.log(this['BrandInfor']['brand_id'], '品牌ID');
|
|
let redirect_url;
|
|
// 肯德基
|
|
if (this['BrandInfor']['brand_id'] == 1 || this['BrandInfor']['brand_id'] == 5) {
|
|
redirect_url = `/pages/restaurant/order/order-status/order-status`;
|
|
} else if (this['BrandInfor']['brand_id'] == 10 || this['BrandInfor']['brand_id'] == 13) {
|
|
redirect_url = `/pages/restaurant/order/order-details/details`
|
|
}
|
|
// 小程序再次支付
|
|
// 微信跳转H5后的逻辑为必须携带token
|
|
const isWechat = getApp()['globalData']['parameters']?.isWechat;
|
|
if(isWechat){
|
|
this.payment({
|
|
order_sn,
|
|
type:3,
|
|
redirect_url,
|
|
money,
|
|
});
|
|
}else{
|
|
// H5再次支付
|
|
agOrderPayAPI({
|
|
order_sn,
|
|
type: 3,
|
|
redirect_url: `${getApp()['globalData']['urlfileName']}/pages/pay/index?order_sn=${order_sn}&type=${3}&redirect_url=${redirect_url}`
|
|
}).then(data => {
|
|
location.href = data['data']['redirect_url'];
|
|
})
|
|
}
|
|
},
|
|
},
|
|
|
|
}
|