import BasePlatform from './BasePlatform'; import RequestManager from '@/common/request.js' import { sleep, parseQueryString } from '@/common/util.js' import { getOrderStatus } from '@/common/server/order.js' /** * 小程序平台 */ class MiniProgramPlatform extends BasePlatform { constructor() { super(); this.code = 'MP-WEIXIN'; this.env = 'miniProgram'; this.config = null; } async getConfig() { if (this.config) { return this.config; } this.config = { isWebPay: true }; return this.config; } getPayData(url, data) { return data; } pay({ data }, event) { console.log(this, event); return new Promise(async (resolve, reject) => { let config = await this.getConfig(); if (config.isWebPay) { console.log('开启H5支付', data); console.log(data); let fullPath = event.$scope.$page.fullPath; //页面路径 console.log(fullPath, "fullPath"); let tips = data.tips ? data.tips : "您即将进入客服聊天界面完成支付,也可前往「我的」页面下载官方APP,享受更便捷的购物及充值服务。"; const res = await event.$refs.payDialog.showDialogContact("支付提示", tips, "前往支付"); if (res == 'success') { // resolve('success'); console.log(data.data, 'data.data'); let url = data.requestPay; await sleep(500); let payPostData = data.data; payPostData['return_url'] = fullPath; let respay = await RequestManager.post(url, payPostData, false); if (respay.status === 1) { event.$refs.payDialog.showDialogHand("支付提示", "支付成功后,请点击「支付已完成」按钮查看所购商品。如支付完成1分钟后仍显示异常,请关闭当前窗口,前往「我的」-「消费记录」查看订单状态。", "支付已完成", "关闭", async () => { let resPayStatus = await getOrderStatus(data.data['order_num']); if (resPayStatus.data == 1) { event.$refs.payDialog.closeHand(); resolve('success'); } else { uni.showToast({ title: resPayStatus.msg, icon: 'none', duration: 1000 }); } }); } } } let provider = "weixin"; uni.requestPayment({ provider, ...data, success: res => { // console.log(res) }, fail: err => { // console.log('common.wxMpPay-error', err) }, complete: res => { console.log('complete (res)', res) if (res.errMsg == 'requestPayment:fail cancel') { uni.showToast({ title: '取消支付', icon: 'none', duration: 500, success: () => { /* 取消订单 */ resolve('cancel') } }) } if (res.errMsg == 'requestPayment:ok') { uni.showToast({ title: '支付成功', icon: 'success', duration: 500, success: () => { resolve('success') } }) } } }) }) } share({ title, desc, image, url }) { wx.showShareMenu({ withShareTicket: true, menus: ['shareAppMessage', 'shareTimeline'] }); // 监听用户点击分享按钮 wx.onShareAppMessage(() => ({ title, imageUrl: image })); } /** * 选择地址 * @returns */ chooseAddress() { return new Promise((resolve, reject) => { uni.chooseAddress({ success: res => { res.detailed_address = res.provinceName + res.cityName + res.countyName + res.detailInfo; resolve(res) }, fail: err => { reject(err) } }); }); } downloadFile(url) { return new Promise((resolve, reject) => { // 下载图片到本地 wx.downloadFile({ url: url, success: (res) => { if (res.statusCode === 200) { const tempFilePath = res.tempFilePath; // 获取临时文件路径 // 保存图片到相册 wx.saveImageToPhotosAlbum({ filePath: tempFilePath, success: () => { uni.showToast({ title: '保存成功', icon: 'success', }); }, fail: (err) => { uni.showToast({ title: '保存失败', icon: 'none', }); console.error('保存失败', err); }, }); } else { uni.showToast({ title: '图片下载失败', icon: 'none', }); console.error('图片下载失败', res); } }, fail: (err) => { uni.showToast({ title: '图片下载失败', icon: 'none', }); console.error('图片下载失败', err); }, }); }); } AppLaunch(options) { console.log("AppLaunch", options); } async getOrderNo(event) { return new Promise(async (resolve, reject) => { console.log(event.$scope.$page.fullPath, 'this.$scope.$page.fullPath'); const query = parseQueryString(event.$scope.$page.fullPath); console.log(query, 'query'); if (query.order_num) { let old_order_num = uni.getStorageSync('order_num'); //判断是否已经获取过了 if (old_order_num != query.order_num) { uni.showLoading({ title: '获取订单中...' }); uni.setStorageSync('order_num', query.order_num); await sleep(1500); uni.hideLoading(); resolve(query.order_num); } else { console.log('重复执行获取订单'); uni.hideLoading(); resolve(null); } } else { uni.hideLoading(); resolve(null); } }); } delOrderNo() { } /** * 重写获取用户中心菜单列表,添加微信小程序特有菜单 * @returns {Array} 菜单项数组 */ getUserMenuList() { // 获取基础菜单列表 const baseMenuList = super.getUserMenuList(); // 添加客服菜单项(仅微信小程序) const customServiceMenu = { id: 9, show: true, title: '客服', icon: 'my/s9.png', path: '', isCustomService: true, // 客服按钮不需要处理函数,由微信小程序原生组件处理 handler: () => { } }; // 将客服菜单插入到第二个位置 return [...baseMenuList.slice(0, 1), customServiceMenu, ...baseMenuList.slice(1)]; } } export default MiniProgramPlatform;