import $http from '@/common/request/index' // #ifdef H5 import wxsdk from '@/common/wechat/sdk' // #endif import wechat from '@/common/wechat/wechat' import { router as $Router } from '@/common/router/index.js' import store from '@/common/store'; import $platform from '@/common/platform'; import req from '@/common/request/apis.js' import http from '@/common/request/index' // console.log('12213', req.userInfo.info); /** * 支付 * * @param {String} payment = ['wechat','alipay','wallet'] - 支付方式 * @param {Object} order = {} - 订单详情 * @param {String} orderType = ['goods','recharge'] - 订单类型 */ export default class ShoproPay { // wxOfficialAccount wxMiniProgram App H5 // wechat 公众号JSSDK支付 小程序支付 微信开放平台支付 H5网页支付 // alipay 复制网址 复制网址 支付宝开放平台支付 直接跳转链接 // wallet v v v v constructor(payment, order, orderType) { this.payment = payment; this.order = order; this.orderType = orderType; this.platform = $platform.get(); let payMehod = this.getPayMethod(); payMehod(); } getPayMethod() { var payMethod = { 'wxOfficialAccount': { 'wechat': () => { this.wxOfficialAccountPay() }, 'alipay': () => { this.copyPayLink() }, 'wallet': () => { this.walletPay() } }, 'wxMiniProgram': { 'wechat': () => { this.wxMiniProgramPay() }, 'alipay': () => { this.copyPayLink() }, 'wallet': () => { this.walletPay() } }, 'App': { 'wechat': () => { this.wechatPay() }, 'alipay': () => { this.aliPay() }, 'wallet': () => { this.walletPay() }, }, 'H5': { 'wechat': () => { this.wechatWapPay() }, 'alipay': () => { this.goToPayLink() }, 'wallet': () => { this.walletPay() }, }, } return payMethod[this.platform][this.payment]; } // 预支付 prepay() { let that = this; // console.log(this.platform); return new Promise((resolve, reject) => { let that = this; let params = { order_number: that.order.order_number, payment: that.payment, platform: that.platform, is_commission: that.orderType } if (uni.getStorageSync('openid')) { params.openid = uni.getStorageSync('openid'); } $http('pay.prepay', params, '支付中').then(res => { // console.log(res); if (res.code === 0) { res.data === 'no_openid' ? uni.showModal({ title: '微信支付', content: '请先绑定微信再使用微信支付', confirmColor: '#00CA88', success: function(res) { if (res.confirm) { wechat.bind(); } }, }) : resolve(res); } }) }); } // 微信H5支付 async wxOfficialAccountPay() { let that = this; let result = await this.prepay(); wxsdk.wxpay(result.data, (res) => { res.errMsg == "chooseWXPay:ok" ? that.payResult('success') : that.payResult('fail') }); } //浏览器微信支付 async wechatWapPay() { let that = this; let result = await this.prepay(); if (result.code === 1) { var url = result.data.pay_data.match(/url\=\'(\S*)\'/); let reg = new RegExp('&', 'g') //g代表全部 let newUrl = url[1].replace(reg, '&'); let domain = store.getters.initShop.domain; //域名需要https let params = encodeURIComponent( `${domain}pages/order/payment/result?orderId=${that.order.id}&type=${that.payment}&orderType=${that.orderType}` ) // let params = encodeURIComponent( // `${domain}pages/user/public/paymentdetail?orderId=${that.order.id}&type=${that.payment}&orderType=${that.orderType}` // ) window.location.href = newUrl + '&redirect_url=' + params; } } // 微信小程序支付 async wxMiniProgramPay() { let that = this; let result = await this.prepay(); uni.requestPayment({ provider: 'wxpay', ...result.data, success: res => { console.log(res); that.payResult('success') }, fail: err => { console.log('支付取消或者失败:', err); err.errMsg !== "requestPayment:fail cancel" && that.payResult('fail') uni.showModal({ title: '失败', content: '支付取消或者失败', confirmText: '重新支付', confirmColor: '#00CA88', success: (res) => { if (res.confirm) { that.wxMiniProgramPay() } } }) } }); } // 余额支付 async walletPay() { let that = this; let result = await this.prepay(); result.code === 1 && that.payResult('success') } // 支付宝复制链接支付 async copyPayLink() { let that = this; let result = await this.prepay(); if (result.code === 1) { //引入showModal 点击确认 复制链接; uni.showModal({ title: '支付宝支付', content: '复制链接到外部浏览器', confirmText: '复制链接', confirmColor: '#00CA88', success: (res) => { if (res.confirm) { uni.setClipboardData({ data: result.data.pay_data, success: function(data) { that.$u.toast('已复制到剪切板'); } }); } } }) } } // 支付链接 async goToPayLink() { let that = this; let result = await this.prepay(); if (result.code === 1) { window.location = result.data.pay_data; } } // 支付宝支付 async aliPay() { let that = this; let result = await this.prepay(); if (result.code === 1) { uni.requestPayment({ provider: 'alipay', orderInfo: result.data.pay_data, //支付宝订单数据 success: res => { that.payResult('success') }, fail: err => { console.log('支付取消或者失败:', err); err.errMsg !== "requestPayment:fail cancel" && that.payResult('fail') } }); } } // 微信支付 async wechatPay() { let that = this; let result = await this.prepay(); if (result.code === 1) { uni.requestPayment({ provider: 'wxpay', orderInfo: JSON.parse(result.data.pay_data), //微信订单数据(官方说是string。实测为object) success: res => { that.payResult('success') }, fail: err => { err.errMsg !== "requestPayment:fail cancel" && that.payResult('fail') console.log('支付取消或者失败:', err); } }); } } // 支付结果跳转,success:成功,fail:失败 // payResult(resultType) { // const that = this; // if(resultType == 'success'){ // store.dispatch('getUserInfo') // $Router.replace({ // path: '/pages/user/public/paymentdetail', // query: { // orderId: that.order.id, // type: that.payment, //重新支付的时候使用 // payState: resultType, // orderType: that.orderType // } // }); // store.commit("subscribeMessage", 'unread_msg'); // }else{ // uni.showToast({ // title:'支付失败', // icon:'none' // }) // } // } payResult(resultType) { const that = this; if (resultType == 'success') { store.dispatch('getUserInfo') setTimeout(() => { let isNewUser = store.getters.userInfo.is_new if (isNewUser) { $Router.replace({ path: '/pages/user/userinfo', query: { isNewUser: true } }); store.commit("subscribeMessage", 'unread_msg'); } else { $Router.replace({ path: '/pages/user/public/paymentdetail', query: { orderId: that.order.id, type: that.payment, //重新支付的时候使用 payState: resultType, orderType: that.orderType } }); store.commit("subscribeMessage", 'unread_msg'); } }, 1500) } else { uni.showToast({ title: '支付失败', icon: 'none' }) } } // payResult(resultType) { // const that = this; // if (resultType == 'success') { // store.dispatch('getUserInfo') // uni.request({ // url: req.userInfo.info, //仅为示例,并非真实接口地址。 // data: {}, // header: { // 'Token': uni.getStorageSync('token') //自定义请求头信息 // }, // success: (res) => { // if (res.data.code == 0) { // if (res.data.data.is_new) { // $Router.replace({ // path: '/pages/user/userinfo', // query: { // isNewUser: true // } // }); // store.commit("subscribeMessage", 'unread_msg'); // } else { // $Router.replace({ // path: '/pages/user/public/paymentdetail', // query: { // orderId: that.order.id, // type: that.payment, //重新支付的时候使用 // payState: resultType, // orderType: that.orderType // } // }); // store.commit("subscribeMessage", 'unread_msg'); // } // } else { // uni.showToast({ // title: res.data.msg, // icon: 'none' // }) // } // }, // fail: (err) => { // uni.showToast({ // title: err, // icon: 'none' // }) // } // }); // } else { // uni.showToast({ // title: '支付失败', // icon: 'none' // }) // } // } // payResult(resultType) { // const that = this; // if (resultType == 'success') { // store.dispatch('getUserInfo') // uni.request({ // url: req.userInfo.info, //仅为示例,并非真实接口地址。 // data: {}, // header: { // 'Token': uni.getStorageSync('token') //自定义请求头信息 // }, // success: (res) => { // if (res.data.code == 0) { // if (res.data.data.is_new) { // $Router.replace({ // path: '/pages/user/userinfo', // query: { // isNewUser: true // } // }); // store.commit("subscribeMessage", 'unread_msg'); // } else { // $Router.replace({ // path: '/pages/user/public/paymentdetail', // query: { // orderId: that.order.id, // type: that.payment, //重新支付的时候使用 // payState: resultType, // orderType: that.orderType // } // }); // store.commit("subscribeMessage", 'unread_msg'); // } // } else { // uni.showToast({ // title: res.data.msg, // icon: 'none' // }) // } // }, // fail: (err) => { // uni.showToast({ // title: err, // icon: 'none' // }) // } // }); // } else { // uni.showToast({ // title: '支付失败', // icon: 'none' // }) // } // } // payResult(resultType) { // const that = this; // if (resultType == 'success') { // http('user.info').then(res => { // if (res.code === 0) { // if (res.data.is_new) { // $Router.replace({ // path: '/pages/user/userinfo', // query: { // isNewUser: true // } // }); // store.commit("subscribeMessage", 'unread_msg'); // } else { // $Router.replace({ // path: '/pages/user/public/paymentdetail', // query: { // orderId: that.order.id, // type: that.payment, //重新支付的时候使用 // payState: resultType, // orderType: that.orderType // } // }); // store.commit("subscribeMessage", 'unread_msg'); // } // } else { // uni.showToast({ // title: res.msg, // icon: 'none' // }) // } // }) // } else { // uni.showToast({ // title: '支付失败', // icon: 'none' // }) // } // } }