<template> <!-- 支付方式选择 微信or贵阳银行 --> <view> <u-modal v-model="payWayPop" :title-style="{color: '#404040'}" title="缴费方式" :show-confirm-button="false" :show-cancel-button="false"> <view class="slot-content"> <view class="pay-way"> <view class="pay-way-item" @click="gyBankPay"> <image src="../../static/img/gy-bank-pay-icon.png" mode=""></image> <view>贵州银行</view> </view> <view class="pay-way-item" @click="wechatPay"> <image src="../../static/img/wechat-pay-icon.png" mode=""></image> <view>微信支付</view> </view> </view> <button class="pay-way-close-btn" @click="closePaymentMethod">关闭</button> </view> </u-modal> <u-toast ref="uToast" /> </view> </template> <script> import getUrlParams from "@/utils/getUrlParams.js"; export default { props: { // 弹框显示 payWayPop: { type: Boolean, default: false }, // 订单数组 curOrderList: { type: Array, default: null }, // 设备编号 deviceNo: { type: String, default: null } }, data() { return {} }, methods: { /** * 贵阳银行支付 * @param {Array} orderList 需要支付的订单号组成的数组 * @param {String} deviceNo 设备编号(只有车位锁部分有) * */ gyBankPay() { const params = { orderList: this.curOrderList, deviceNo: this.deviceNo, jumpUrl: window.location.href }; this.$u.api.payGzbank(params).then(res=>{ let payUrl = res.data.url; window.location.href = payUrl; }).catch(err=>{ this.$refs.uToast.show({ title: err.msg, type: 'error', }); }); }, /** * 微信支付 * 判断vuex中是否存在openId * 存在直接调起微信支付 * 不存在则通过微信登录去获取用户的code * 完成后通过code去获取用户的openId等信息 * 最后再调起微信支付 * */ wechatPay() { const openId = this.$store.state.vuex_wxinfo.openId if (openId) { this.getWXPay(this.curOrderList, this.deviceNo) } else { this.getCode() } }, /** * 调起微信支付接口 * @param {Array} list 需要支付的订单组合数组 * @param {Number} deviceNo 设备编号(在停车锁部分需要) * */ async getWXPay(orderList, deviceNo){ let params = { orderList: orderList, openid: this.$store.state.vuex_wxinfo.openId, deviceNo: deviceNo ? deviceNo : null }; await this.$wxApi.config(); this.$pay.wechatPay(params).then(res =>{ switch (Number(res.code)) { case 0: // 成功 //#ifdef H5 window.location.reload(); //#endif break; case 1: // 取消 this.$refs.uToast.show({ title: '已取消支付', type: 'info', }); break; case 2: // 支付失败 this.$refs.uToast.show({ title: '支付失败,请检查!', type: 'error', }); break; } }); }, /** * 获取code * 1 微信登录获取code * 2 url中截取 * */ getCode () { // 获取页面完整url const local = window.location.href // 获取url后面的参数 const locationLocaturl = window.location.search; // 截取url中的code this.code = getUrlParams(locationLocaturl, "code"); // 如果没有code,则去请求 if (this.code == null || this.code === '') { window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.config.wxAppid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&#wechat_redirect` } else { // 把code传给后台获取用户信息 this.handleGetWXInfo(this.code) } }, /** * 通过code获取openId等用户信息 * 拿到用户信息后再调起微信支付 * */ handleGetWXInfo (code) { let _this = this this.$u.api.getWXInfo(code).then((res) => { if (res.code === 200 ) { this.$u.vuex('vuex_wxinfo', res.data); this.getWXPay(this.currentItem) } }).catch((err) => { this.$refs.uToast.show({ title: err.msg, type: 'error', }); }) }, /** * 关闭弹框 * */ closePaymentMethod() { this.$emit('closePaymentMethod') } } } </script> <style lang="scss" scoped> @import './paymentMethod.scss' </style>