Commit 49f85de6e92de9f94796f0fda899368974f68f8e

Authored by liuqimichale
1 parent 4087b794

黄石微信公众号 -- 临停支付

No preview for this file type
src/api/binDing/binDing.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function sendverificode(params) { // 获取验证码
  4 + return request({
  5 + url: 'user/sendverificode',
  6 + method: 'post',
  7 + data: params
  8 + })
  9 +}
  10 +
  11 +
  12 +export function bindCustByOpenId(params) { // 绑定用户
  13 + return request({
  14 + url: 'wxPublicUser/bindCustByOpenId',
  15 + method: 'post',
  16 + data: params
  17 + })
  18 +}
  19 +
  20 +
  21 +export function queryUserInfo(params) { // 获取用户信息
  22 + return request({
  23 + url: 'user/queryUserInfo',
  24 + method: 'post',
  25 + data: params
  26 + })
  27 +}
  28 +
  29 +
  30 +
  31 +
  32 +
  33 +
  34 +
  35 +
  36 +
  37 +
... ...
src/api/orderPay/orderPay.js
... ... @@ -17,6 +17,7 @@ export function getOpenId(params) { // 获取OpenId
17 17 })
18 18 }
19 19  
  20 +
20 21 export function vxPayQuery(params) { // 微信
21 22 return request({
22 23 url: 'weixinpay/publicUnifiedOrder',
... ... @@ -25,18 +26,22 @@ export function vxPayQuery(params) { // 微信
25 26 })
26 27 }
27 28  
  29 +// 新接口银联
28 30  
29   -export function bankH5Pay(params) { // 农行
  31 +export function doPay(params) { // 微信
30 32 return request({
31   - url: 'abcBankPay/bankPayForH5',
  33 + url: 'unionpay/doPay',
32 34 method: 'post',
33 35 data: params
34 36 })
35 37 }
36 38  
37   -export function queryParkingRecordPageByCarNumbers(params) { // 支付完成后查询记录
  39 +
  40 +// 创建订单
  41 +
  42 +export function doOrderCreate(params) { // 创建订单
38 43 return request({
39   - url: 'queryParkOrder/queryParkingRecordPageByCarNumbers',
  44 + url: 'unionpay/doOrderCreate',
40 45 method: 'post',
41 46 data: params
42 47 })
... ... @@ -45,8 +50,3 @@ export function queryParkingRecordPageByCarNumbers(params) { // 支付完成后
45 50  
46 51  
47 52  
48   -
49   -
50   -
51   -
52   -
... ...
src/api/selfNav/selfNav.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +export function getOpenIdByCode(params) { // 获取opendid
  4 + return request({
  5 + url: 'weixinPublicPay/getOpenIdByCode',
  6 + method: 'post',
  7 + data: params
  8 + })
  9 +}
  10 +
  11 +
  12 +export function getTokenByOpenId(params) { // 获取token和手机号
  13 + return request({
  14 + url: 'wxPublicUser/getTokenByOpenId',
  15 + method: 'post',
  16 + data: params
  17 + })
  18 +}
  19 +
  20 +
  21 +export function queryUserInfo(params) { // 获取用户信息
  22 + return request({
  23 + url: 'user/queryUserInfo',
  24 + method: 'post',
  25 + data: params
  26 + })
  27 +}
  28 +
  29 +
  30 +
  31 +
  32 +
  33 +
  34 +
  35 +
  36 +
  37 +
  38 +
  39 +
  40 +
  41 +
... ...
src/main.js
... ... @@ -6,19 +6,21 @@ import router from './router'
6 6  
7 7 import './assets/css/reset.css' // 引入公共样式
8 8  
9   -import h5Popup from 'vue-h5-popup' // 引入弹窗
10   -Vue.use(h5Popup)
  9 +// import h5Popup from 'vue-h5-popup' // 引入弹窗
  10 +// Vue.use(h5Popup)
11 11  
12 12  
13   -// import MintUI from 'mint-ui'
14   -// import 'mint-ui/lib/style.css'
15   -// Vue.use(MintUI) // 引入MintUI
16 13  
17 14  
  15 +import Mint from 'mint-ui';
18 16 import 'mint-ui/lib/style.css'
  17 +Vue.use(Mint);
  18 +
19 19 import { MessageBox } from 'mint-ui'
20   -// Vue.use(MessageBox)
  20 +import { Toast } from 'mint-ui';
  21 +
21 22 Vue.prototype.$msgbox = MessageBox
  23 +Vue.prototype.$toast = Toast
22 24  
23 25 //全局设置的基本样式
24 26 import './assets/css/base.scss'
... ... @@ -33,13 +35,11 @@ Vue.prototype.$moment = moment
33 35 import utils from './utils/utils' // 工具类
34 36 Vue.prototype.$utils = utils
35 37  
36   -import Mint from 'mint-ui';
37   -import 'mint-ui/lib/style.css'
38   -Vue.use(Mint);
39 38  
40 39  
41   -import 'swiper/dist/css/swiper.min.css' // 轮播
42   -import 'swiper/dist/js/swiper.min'
  40 +
  41 +// import 'swiper/dist/css/swiper.min.css' // 轮播
  42 +// import 'swiper/dist/js/swiper.min'
43 43  
44 44 import vueFilter from './utils/filters' // 公共filter
45 45 for (let key in vueFilter){
... ...
src/router/index.js
... ... @@ -2,7 +2,7 @@ import Vue from 'vue'
2 2 import Router from 'vue-router'
3 3 import plateNumber from '@/views/parkPay/plateNumber'
4 4 // import parkRecord from '@/views/parkPay/parkRecord'
5   -// import selfNav from '@/views/mySelf/selfNav'
  5 +import selfNav from '@/views/mySelf/selfNav'
6 6  
7 7 Vue.use(Router)
8 8  
... ... @@ -37,12 +37,12 @@ export default new Router({
37 37 component: () => import("@/views/parkPay/orderPay.vue")
38 38 },
39 39  
40   - // //---------------- 个人页面导航
41   - // {
42   - // path: '/selfNav',
43   - // name: 'selfNav',
44   - // component: () => import("@/views/mySelf/selfNav.vue")
45   - // },
  40 + //---------------- 个人页面导航
  41 + {
  42 + path: '/selfNav',
  43 + name: 'selfNav',
  44 + component: () => import("@/views/mySelf/selfNav.vue")
  45 + },
46 46 //
47 47 // // ------------------------建议反馈
48 48 // {
... ... @@ -60,11 +60,11 @@ export default new Router({
60 60 //
61 61 //
62 62 // // ------------------------停车记录
63   - // {
64   - // path: '/binDing',
65   - // name: 'binDing',
66   - // component: () => import("@/views/binding/binDing.vue")
67   - // },
  63 + {
  64 + path: '/binDing',
  65 + name: 'binDing',
  66 + component: () => import("@/views/binding/binDing.vue")
  67 + },
68 68 //
69 69 //
70 70 // // ------------------------购买会员卡提示
... ...
src/utils/utils.js
1 1 import md5 from './md5.min.js';
  2 +
2 3 export default {
3 4 myCommonSalt: function (val) { // 获取盐值
4 5 let len = parseInt(val);
... ... @@ -12,36 +13,45 @@ export default {
12 13 return pwd;
13 14 },
14 15  
15   - formatDate: function(secs, type=0){ //type是可选参数,因为json中时间的格式是year-month-date,不能识别XX年XX月XX日
  16 + formatDate: function (secs, type = 0) { //type是可选参数,因为json中时间的格式是year-month-date,不能识别XX年XX月XX日
16 17 var t = new Date(secs)
17 18 var year = t.getFullYear()
18 19 var month = t.getMonth() + 1
19   - if(month < 10){ month = '0' + month }
  20 + if (month < 10) {
  21 + month = '0' + month
  22 + }
20 23 var date = t.getDate()
21   - if(date < 10){ date = '0' + date }
  24 + if (date < 10) {
  25 + date = '0' + date
  26 + }
22 27 var hour = t.getHours()
23   - if(hour < 10){ hour = '0' + hour }
  28 + if (hour < 10) {
  29 + hour = '0' + hour
  30 + }
24 31 var minute = t.getMinutes()
25   - if(minute < 10){ minute = '0' + minute }
  32 + if (minute < 10) {
  33 + minute = '0' + minute
  34 + }
26 35 var second = t.getSeconds()
27   - if(second < 10){ second = '0' + second }
28   - if(type==0){
  36 + if (second < 10) {
  37 + second = '0' + second
  38 + }
  39 + if (type == 0) {
29 40 return year + '年' + month + '月' + date + '日'
30   - }else{
31   - return year + '-'+month+'-'+date
32   - }},
  41 + } else {
  42 + return year + '-' + month + '-' + date
  43 + }
  44 + },
33 45  
34 46 timestampToTime: function (timestamp) {
35 47 var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
36   - var youWant=d.getFullYear() + '-' + this.completedString(d.getMonth() + 1) + '-' + this.completedString(d.getDate()) ;
37   - return youWant
  48 + var youWant = d.getFullYear() + '-' + this.completedString(d.getMonth() + 1) + '-' + this.completedString(d.getDate());
  49 + return youWant
38 50 },
39   - completedString:function(s) {
  51 + completedString: function (s) {
40 52 return s < 10 ? '0' + s : s
41 53 },
42 54  
43   -
44   -
45 55 dateFormat: function (msd) { // 时间转换
46 56 var time = msd
47 57  
... ... @@ -78,21 +88,43 @@ export default {
78 88 parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + "秒";
79 89  
80 90 }
81   -
82 91 else {
83   -
84 92 time = parseInt(time) + "秒";
85   -
86 93 }
87   -
88 94 }
89 95  
90 96 return time;
91 97 },
92 98  
93   - signObject: function (jsonObj){ //签名字段
  99 + GetOpenid: function () { // 获取openid
  100 + let openid = sessionStorage.getItem('wx_openId');
  101 + if (!openid || openid == '') {
  102 + openid = null;
  103 + }
  104 + return openid;
  105 + },
  106 +
  107 + SetOpenid: function (openid) { // 存储openid
  108 + sessionStorage.setItem('wx_openId', openid);
  109 + },
  110 +
  111 + SetToken: function (token) { // 存储 token
  112 + sessionStorage.setItem('wx_Token', token);
  113 + },
  114 + GetToken: function () {
  115 + let token = sessionStorage.getItem('wx_Token');
  116 + //测试环境
  117 + if (!token || token == '') {
  118 + token = null;
  119 + }
  120 + return token;
  121 + },
  122 + SetPhone: function (phone) { // 存储 手机号
  123 + sessionStorage.setItem('WXPhone', phone);
  124 + },
  125 + signObject: function (jsonObj) { //签名字段
94 126 let sort = []
95   - for(let k in jsonObj){
  127 + for (let k in jsonObj) {
96 128 sort.push({
97 129 keyname: k,
98 130 value: jsonObj[k]
... ... @@ -111,10 +143,10 @@ export default {
111 143 } else if (/BankabciPhone/.test(window.navigator.userAgent)) {
112 144 console.log("农行客户端");
113 145 return '立即'
114   - }else if (/BankabcAndroid/.test(window.navigator.userAgent)) {
  146 + } else if (/BankabcAndroid/.test(window.navigator.userAgent)) {
115 147 console.log("农行客户端");
116 148 return '立即'
117   - }else {
  149 + } else {
118 150 console.log("其他浏览器");
119 151 return '支付宝'
120 152 }
... ... @@ -131,10 +163,10 @@ export default {
131 163 } else if (/BankabciPhone/.test(window.navigator.userAgent)) {
132 164 console.log("农行客户端");
133 165 return '34'
134   - }else if (/BankabcAndroid/.test(window.navigator.userAgent)) {
  166 + } else if (/BankabcAndroid/.test(window.navigator.userAgent)) {
135 167 console.log("农行客户端");
136 168 return '34'
137   - }else {
  169 + } else {
138 170 console.log("其他浏览器");
139 171 return '1'
140 172 }
... ... @@ -145,7 +177,7 @@ export default {
145 177 // ud8yq5tv0inxupc05xfeau39jywlqoj2 新的id
146 178 // ny1u72b6k374sg379z0kqjgfxe2ycnpw 新的签名
147 179  
148   - myVarAppid:'0eca8f5373ca4866aec2f8e9d9367104',// 公共请求Appid
  180 + myVarAppid: '0eca8f5373ca4866aec2f8e9d9367104',// 公共请求Appid
149 181  
150 182 myDeviceInfo: 'BC0703A4-AFB0-4B51-9089-9B7487C0CC6E', // 公共请求设备信息
151 183  
... ... @@ -170,15 +202,15 @@ export default {
170 202 }
171 203 objb.sort(compare);
172 204 var strmd5 = '14318527b13840c2a4af63fef52c2d6e';
173   - for(var i=0;i<objb.length;i++){
174   - if(objb[i].value != null&&objb[i].value != ''){
175   - strmd5 += objb[i].keyname+objb[i].value;
  205 + for (var i = 0; i < objb.length; i++) {
  206 + if (objb[i].value != null && objb[i].value != '') {
  207 + strmd5 += objb[i].keyname + objb[i].value;
176 208 }
177 209 }
178 210 strmd5 += '14318527b13840c2a4af63fef52c2d6e';
179 211 // console.log('strmd5-------->'+strmd5);
180 212 strmd5 = md5(strmd5);
181   - strmd5=strmd5.toUpperCase();
  213 + strmd5 = strmd5.toUpperCase();
182 214 return strmd5;
183 215 },
184 216  
... ...
src/views/binding/binDing.vue
1 1 <template>
2 2 <div>
3 3  
4   - <mt-field label="手机号" placeholder="请输入正确的手机号" type="tel" v-model="phone" :attr="{ maxlength: 13 }"></mt-field>
  4 + <mt-field label="手机号" placeholder="请输入正确的手机号" type="tel" v-model.trim="phone" :attr="{ maxlength: 11 }"></mt-field>
5 5  
6   - <mt-field label="验证码" v-model="codeText">
7   - <div class="getCode" @click="getCode">{{timeNum}}</div>
  6 + <mt-field label="验证码" v-model.trim="codeText" :attr="{ maxlength: 6 }">
  7 + <div class="getCode" @click="getCodeHandle">{{timeNum}}</div>
8 8 </mt-field>
9 9  
10 10 <div style="margin-top: 34px" class="leftRightPadding">
11   - <mt-button type="danger" size="large">绑定</mt-button>
  11 + <mt-button type="danger" size="large" @click="bingUser">绑定</mt-button>
12 12 </div>
13 13 </div>
14 14 </template>
15 15  
16 16 <script>
  17 +import { sendverificode, bindCustByOpenId } from '@/api/binDing/binDing'
  18 +
17 19 export default {
18 20 name: 'binDing',
19 21 data() {
... ... @@ -22,23 +24,119 @@ export default {
22 24 phone: '',
23 25 timeText: '获取验证码',
24 26 timeNum: 60,
  27 + clickFlag: true, // 获取验证码按钮是否可以点击
25 28 }
26 29 },
27   - created(){
  30 + created() {
28 31 this.timeNum = this.timeText
29 32 },
30 33 methods: {
31   - getCode: function () {
32   - var _this = this
33   - // this.timeText = this.timeNum+'S'
34   - let Num = 5
35   - var timer = setInterval(function () {
36   - _this.timeNum = Num-- +'s'
37   - if(Num== -1){
38   - _this.timeNum = '获取验证码'
39   - clearInterval(timer)
  34 + getCodeHandle: function () { // 获取验证码事件
  35 + if (!(/^1[3456789]\d{9}$/.test(this.phone))) { // 先判断手机号是否输入正确
  36 + this.$msgbox('提示', '请输入正确手机号')
  37 + } else {
  38 + if (this.clickFlag) {
  39 + let _this = this
  40 + this.clickFlag = false
  41 +
  42 + _this.getCode()
  43 + // this.timeText = this.timeNum+'S'
  44 + let Num = 5
  45 + var timer = setInterval(function () {
  46 + _this.timeNum = Num-- + 's'
  47 + if (Num == -1) {
  48 + _this.clickFlag = true
  49 + _this.timeNum = _this.timeText
  50 + Num = 5
  51 + clearInterval(timer)
  52 + }
  53 + }, 1000)
40 54 }
41   - }, 1000)
  55 + }
  56 + },
  57 + getCode: function () { // 获取验证码接口
  58 + let salt = this.$utils.myCommonSalt(32);
  59 + let jsondata = {
  60 + app_id: this.$utils.myVarAppid,
  61 + deviceInfo: this.$utils.myDeviceInfo,
  62 + salt: salt,
  63 + sign_type: "md5",
  64 + phone: this.phone
  65 + }
  66 + jsondata.sign = this.$utils.signObject(jsondata)
  67 + sendverificode(jsondata).then(response => {
  68 + this.$toast({
  69 + message: '获取验证码成功',
  70 + iconClass: 'icon icon-success',
  71 + duration: 1500
  72 + })
  73 + })
  74 + },
  75 +
  76 + bingUser: function () { // 用户绑定
  77 + let openid = this.$utils.GetOpenid();
  78 +
  79 + if (!(/^1[3456789]\d{9}$/.test(this.phone))) { // 先判断手机号是否输入正确
  80 + this.$toast({
  81 + message: '请输入正常手机号',
  82 + duration: 1500
  83 + });
  84 + return
  85 + }
  86 + if (this.codeText.length < 6) {
  87 + this.$toast({
  88 + message: '请输入正常验证码',
  89 + duration: 1500
  90 + });
  91 + return
  92 + }
  93 +
  94 + let jsondata = {
  95 + phoneNum: this.phone,
  96 + verifyCode: this.codeText,
  97 + openid: openid
  98 + }
  99 +
  100 + bindCustByOpenId(jsondata).then(data => {
  101 + if (data.code == 0 || data.code == '0') {
  102 + // $.alert('亲,您已绑定成功!', '成功', function () {
  103 + // var datas = data.data;
  104 + // var urll = document.referrer;
  105 + // jsajax.gett(openid, function (n) {
  106 + // window.location.href = document.referrer;
  107 + // });
  108 + // });
  109 +
  110 + this.$messagebox.alert('亲,您已绑定成功!').then(action => {
  111 + this.$router.push({
  112 + path:'selfNav'
  113 + })
  114 + });
  115 +
  116 + } else {
  117 + if (data.code == 1017 || data.code == '1017') {
  118 + // $.alert('已经绑定过', function () {
  119 + // var urll = document.referrer;
  120 + // jsajax.gett(openid, function (n) {
  121 + // window.location.href = document.referrer;
  122 + // });
  123 + // });
  124 +
  125 +
  126 + this.$messagebox.alert('亲,您已经绑定过!').then(action => {
  127 +
  128 + });
  129 +
  130 + } else {
  131 + // $.alert('亲,请重新绑定!', '失败', function () {
  132 + // return false;
  133 + // });
  134 + this.$toast('亲,绑定失败,请重新绑定!')
  135 + }
  136 +
  137 + }
  138 + })
  139 +
42 140 }
43 141 }
44 142 }
... ...
src/views/mySelf/selfNav.vue
... ... @@ -4,31 +4,141 @@
4 4 <div class="person-ifo">
5 5 <div class="person-pic"></div>
6 6 <ul class="person-con">
7   - <li>15911111111</li>
8   - <li>账户余额: <span>¥100.00</span></li>
9   - <li>我的卡券:<span>20张</span></li>
  7 + <li>{{ phoneNum }}</li>
  8 + <li>账户余额: <span>¥ {{ acctBalance }}</span></li>
  9 + <li>我的卡券:<span>{{couponNum}} 张</span></li>
10 10 </ul>
11 11 </div>
12 12 </div>
13 13  
14   - <mt-cell title="会员卡" is-link :to="{ name: 'Toast' }"></mt-cell>
  14 + <mt-cell title="会员卡" is-link :to="{ name: 'Toast' }"></mt-cell>
15 15  
16   - <mt-cell title="车辆管理" is-link :to="{ name: 'Toast' }"></mt-cell>
  16 + <mt-cell title="车辆管理" is-link :to="{ name: 'Toast' }"></mt-cell>
17 17  
18   - <mt-cell title="停车记录" is-link :to="{ name: 'parkNotes' }"></mt-cell>
  18 + <mt-cell title="停车记录" is-link :to="{ name: 'parkNotes' }"></mt-cell>
19 19  
20   - <mt-cell title="建议反馈" is-link :to="{ name: 'suggestionBack' }"></mt-cell>
  20 + <mt-cell title="建议反馈" is-link :to="{ name: 'suggestionBack' }"></mt-cell>
21 21  
22 22 <div class="leftRightPadding" style="margin-top: 34px">
23   - <mt-button type="danger" size="large">退出账户</mt-button>
  23 + <mt-button type="danger" size="large" @click="toBinDing">退出账户</mt-button>
24 24 </div>
25 25  
26 26 </div>
27 27 </template>
28 28  
29 29 <script>
  30 +import { getOpenIdByCode, getTokenByOpenId, queryUserInfo } from '@/api/selfNav/selfNav'
  31 +
30 32 export default {
31   - name: 'selfNav'
  33 + name: 'selfNav',
  34 + data(){
  35 + return {
  36 + couponNum:'3', // 卡券数量
  37 + acctBalance: '420.00', // 账户余额
  38 + phoneNum:'',// 用户手机号
  39 + }
  40 + },
  41 + created() {
  42 + if (this.$utils.clientBrowser() == "微信") {
  43 + var appID = this.$utils.myVxAppId;
  44 + var code = this.getUrlParam('code');
  45 + var local = window.location.href;
  46 + if (code == null || code === '') {
  47 + window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appID+'&redirect_uri='+encodeURIComponent(local)+'&response_type=code&scope=snsapi_userinfo&state=1,0#wechat_redirect'
  48 + } else {
  49 + return code;
  50 + }
  51 + }
  52 + },
  53 + mounted() {
  54 + if(this.$utils.GetOpenid()){
  55 + this.getTokenByOpenId(this.$utils.GetOpenid())
  56 + }else{
  57 + this.getOpenId()
  58 + }
  59 +
  60 + },
  61 + methods: {
  62 + getUrlParam(name) {
  63 + var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
  64 + var r = window.location.search.substr(1).match(reg)
  65 + if (r != null) return unescape(r[2])
  66 + return null
  67 + },
  68 + getOpenId: function () { // 第一步获取openid
  69 + let getCode = location.href
  70 + console.log(getCode)
  71 + let dataCode = getCode.split('?')[1]
  72 + let wxCode = dataCode.split('&')[0].split('=')[1]
  73 + let jsondata = {
  74 + appId: this.$utils.myVxAppId,
  75 + code: wxCode
  76 + };
  77 + getOpenIdByCode(jsondata).then(data => {
  78 + console.log(data)
  79 + // SetOpenid
  80 + if(data.code=='0'){
  81 + let openid = data.data;
  82 + this.$utils.SetOpenid(openid);
  83 + // mUrl.setApporWX('wx');
  84 + console.log("用户 openid "+openid);
  85 + this.getTokenByOpenId(openid)
  86 + }
  87 + })
  88 + },
  89 + getTokenByOpenId: function (openid) { // 获取token和手机号
  90 + let jsondata = {
  91 + openid: openid,
  92 + deviceInfo: this.$utils.myDeviceInfo
  93 + }
  94 + getTokenByOpenId(jsondata).then(data => {
  95 + console.log('执行获取token的接口 '+JSON.stringify(data));
  96 + if(data.code==0){
  97 + console.log("用户 token "+data.data.token);
  98 + this.$utils.SetToken(data.data.token)
  99 + this.$utils.SetPhone(data.data.phoneNum)
  100 + this.phoneNum = data.data.phoneNum
  101 + // 用户已经绑定手机号,获取用户信息
  102 + this.getInfoSelf()
  103 + }else{
  104 + // 用户未绑定手机号
  105 + this.$router.push({
  106 + path: 'binDing'
  107 + })
  108 + }
  109 + })
  110 + },
  111 +
  112 + getInfoSelf: function () { // 获取用户信息
  113 + let salt = this.$utils.myCommonSalt(32);
  114 + var jsondata = {
  115 + app_id: this.$utils.myVarAppid,
  116 + deviceInfo: this.$utils.myDeviceInfo,
  117 + salt: salt,
  118 + sign_type: "md5",
  119 + token: this.$utils.GetToken(),
  120 + }
  121 + jsondata.sign = this.$utils.signObject(jsondata)
  122 +
  123 + queryUserInfo(jsondata).then(data => {
  124 + console.log(data)
  125 + if(data.code == '0'){
  126 + let datas = data.data
  127 + this.couponNum = datas.couponNum;//卡券数量
  128 + this.acctBalance = (datas.acctBalance/100).toFixed(2);//账户余额 单位:分
  129 +
  130 + }
  131 + })
  132 +
  133 + },
  134 +
  135 + toBinDing: function () { // 退出账户 去绑定页面
  136 + this.$router.push({
  137 + path:'binDing'
  138 + })
  139 + }
  140 +
  141 + }
32 142 }
33 143 </script>
34 144  
... ... @@ -44,21 +154,22 @@ export default {
44 154 padding-top: 45px;
45 155 display: flex;
46 156 color: #ffbfbf;
47   - .person-pic{
  157 + .person-pic {
48 158 width: 64px;
49 159 height: 64px;
50 160 margin-right: 15px;
51 161 background: url("../../assets/images/mySelf/photoBG.png") no-repeat;
52 162 }
53 163 }
54   - .person-con{
55   - span{
  164 +
  165 + .person-con {
  166 + span {
56 167 font-size: 16px;
57 168 font-weight: bold;
58 169 }
59 170 }
60 171  
61   - .mint-cell{
  172 + .mint-cell {
62 173 border-bottom: 1px solid #EFEDED;
63 174 }
64 175 </style>
... ...
src/views/parkPay/orderPay.vue
... ... @@ -25,7 +25,7 @@
25 25 <div class="toPay" @click="toPay">{{clientBrowser}}支付</div>
26 26 </div>
27 27  
28   - <div v-if="appOrderTimeout.length>0">
  28 + <div v-if="appOrderTimeout">
29 29 <p class="tip">
30 30 温馨提示:
31 31 </p>
... ... @@ -40,31 +40,26 @@
40 40 </template>
41 41  
42 42 <script>
43   -// import CryptoJS from '../utils/AES.js'
44   -// let Base64 = require('js-base64').Base64
45   -
46   -import {aliPay, getOpenId, vxPayQuery, bankH5Pay, queryParkingRecordPageByCarNumbers} from '@/api/orderPay/orderPay'
  43 +import {aliPay, getOpenId, vxPayQuery, doPay, doOrderCreate} from '@/api/orderPay/orderPay'
47 44  
48 45 export default {
49 46 name: 'orderPay',
50 47 data() {
51 48 return {
52 49 carWrapBG: 0,
53   - carNumber: '',
  50 + carNumber: '京A12312',
54 51 arrearageActFee: 0,
55 52 arrearageDiscFee: 0,
56 53 arrearageActFee: 0,
57   - parkingData: [], // 在停数据
58   - historyList: [], // 历史欠费数据
59 54 clientBrowser: '', // 客户端
60 55 paySrcType: '', //支付的类型 101 是本次 103是历史欠费
61 56 orderId: '', //支付的订单
62 57 webAppCode: '', // 微信code
63 58 appOrderTimeout: '', // 超时描述
  59 + isAndroid: '', // 终端类型
64 60 }
65 61 },
66 62 created() {
67   -
68 63 this.carWrapBG = this.$route.query.carColor //车牌颜色
69 64 this.carNumber = this.$route.query.carNumber
70 65 this.arrearageTotalFee = this.$route.query.arrearageTotalFee // 应收
... ... @@ -72,16 +67,16 @@ export default {
72 67 this.arrearageActFee = this.$route.query.arrearageActFee // 实收
73 68 this.clientBrowser = this.$utils.clientBrowser() //支付方式
74 69 this.paySrcType = this.$route.query.paySrcType // 实收
75   - this.orderId = this.$route.query.ordeID
  70 + this.orderId = this.$route.query.ordeID // 订单号
76 71 console.log(this.orderId)
77   - this.appOrderTimeout = this.$route.query.appOrderTimeout
  72 + this.appOrderTimeout = this.$route.query.appOrderTimeout //提示
  73 +
  74 + let userAgent = navigator.userAgent;
  75 + this.isAndroid = userAgent.indexOf('Android') > -1 || userAgent.indexOf('Adr') > -1; //android终端
  76 +
78 77 if (this.clientBrowser == "微信") {
79 78 this.webAppCode = this.getCode();
80 79 }
81   -
82   - },
83   - mounted() {
84   -
85 80 },
86 81 methods: {
87 82 getCode() {
... ... @@ -94,95 +89,130 @@ export default {
94 89 return code;
95 90 }
96 91 },
  92 + doOrderCreate(orderID) { // 欠费创建订单号
  93 + var jsondata = {
  94 + orderBigType: 100,
  95 + payOrderType: this.paySrcType,
  96 + parkOrderIds: orderID,
  97 + terminalSource: 7,
  98 + operName: '',
  99 + operCode: '',
  100 + };
  101 + // jsondata = JSON.stringify(jsondata);
  102 + doOrderCreate(jsondata).then(res => {
  103 + console.log(res)
  104 + this.orderId = res.data.rltOrderId
  105 + console.log(this.orderId)
  106 + this.dopay(this.orderId)
  107 + })
  108 +
  109 + },
97 110 getUrlParam(name) {
98 111 var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
99 112 var r = window.location.search.substr(1).match(reg)
100 113 if (r != null) return unescape(r[2])
101 114 return null
102 115 },
  116 + dopay(orderID) {
  117 + let me = this
  118 +
  119 + if (this.clientBrowser == '微信') { // 微信支付
  120 + var vm = this
  121 + //第一步获取openid
  122 + var codeParams = {
  123 + code: this.webAppCode,
  124 + appId: this.$utils.myVxAppId
  125 + };
  126 + getOpenId(codeParams).then(resu => {
  127 + if (resu.code == 0) {
  128 + // me.vxPay(res.data, this.orderId)
  129 +
  130 + var jsondata = {
  131 + orderBigType: 100,
  132 + payOrderType: this.paySrcType,
  133 + rltOrderId: orderID,
  134 + payType: 2, // 1 是支付宝 2是微信
  135 + terminalSource: 7,
  136 + orderActFee: this.arrearageActFee,
  137 + orderTotalFee: this.arrearageTotalFee,
  138 + orderDicountFee: this.arrearageDiscFee,
  139 + payUserId: resu.data,
  140 + terminalOS: this.isAndroid ? 'AND' : 'IOS',
  141 + couponType: 1, //优惠类型
  142 + couponCode: this.arrearageDiscFee,
  143 + };
  144 +
  145 + doPay(jsondata).then(res => {
  146 + console.log(res)
  147 + if (res.code == 0) { //
  148 + //alertMsg("出场成功");
  149 + if (res.data) {
  150 + var data = JSON.parse(res.data.jsPayRequest);
  151 + console.log(JSON.stringify(data));
  152 + if (typeof WeixinJSBridge === 'undefined') { // 微信浏览器内置对象。参考微信官方文档
  153 + if (document.addEventListener) {
  154 + document.addEventListener('WeixinJSBridgeReady', vm.onBridgeReady(data), false)
  155 + } else if (document.attachEvent) {
  156 + document.attachEvent('WeixinJSBridgeReady', vm.onBridgeReady(data))
  157 + document.attachEvent('onWeixinJSBridgeReady', vm.onBridgeReady(data))
  158 + }
  159 + } else {
  160 + console.log('准备调用微信支付')
  161 + vm.onBridgeReady(data)
  162 + }
  163 + } else {
  164 + alert("没有找到返回值");
  165 + }
  166 + } else {
  167 + alert('支付错误')
  168 + console.log(res.message);
  169 + alert(res.message);
  170 + }
  171 +
  172 + })
  173 +
  174 + } else if (res.code == 40163) { //code been used, hints[重复code问题]
  175 + alert('获取opendid错误--------')
  176 + alert(res.message)
  177 + console.log(res.message);
  178 + } else {
  179 + alert('获取opendid错误')
  180 + alert(res.message)
  181 + }
  182 + })
  183 +
  184 + }
  185 + },
103 186 toPay() {
104 187 let me = this
105 188 let _order = []
106   -
  189 + // this.orderId = JSON.parse(this.orderId)
107 190 console.log(this.orderId)
108 191 if (this.paySrcType == 103) {
109 192 this.orderId = JSON.parse(this.orderId)
110   - this.orderId.forEach(item => {
111   - _order.push({
112   - orderId: item
113   - })
114   - })
115   - this.orderId = []
116   - this.orderId = _order
117   - }
  193 + this.doOrderCreate(this.orderId)
  194 + } else {
  195 + console.log(this.orderId)
  196 + console.log(typeof this.orderId)
118 197  
119   - if (this.clientBrowser == '微信') { // 微信支付
120   - let _openId = sessionStorage.getItem('openIdData')
121   - if (_openId) {
122   - me.vxPay(_openId, this.orderId)
123   - } else {
124   - //第一步获取openid
125   - var codeParams = {
126   - code: this.webAppCode,
127   - appId: this.$utils.myVxAppId
128   - };
129   - getOpenId(codeParams).then(res => {
130   - if (res.code == 0) {
131   - me.vxPay(res.data, this.orderId)
132   - sessionStorage.setItem('openIdData', res.data)
133   - } else if (res.code == 40163) { //code been used, hints[重复code问题]
134   - this.$msgbox('提示', '请重新扫码重复code问题')
135   - console.log(res.message);
136   - } else {
137   - this.$msgbox('提示', '请重新扫码')
138   - }
139   - })
140   - }
  198 + this.dopay(this.orderId)
141 199 }
  200 +
142 201 },
143   - vxPay(openIdData, orderIdData) {
144   - let vm = this
145   - var wxParams = {};
146   - wxParams.orderId = orderIdData;
147   - wxParams.backType = 2,
148   - wxParams.orgId = this.$utils.myOrgId,
149   - wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号
150   - wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付
151   - wxParams.carNumber = this.carNumber;
152   - wxParams.paySrcType = this.paySrcType;//101停车支付
153   - wxParams.recordArreaInfos = JSON.stringify(orderIdData);
154   - wxParams.openId = openIdData;
155   - wxParams.appId = this.$utils.myVxAppId;
156   - vxPayQuery(wxParams).then(res => {
157   - if (res.code == 0) { //
158   - if (res.data) {
159   - var data = res.data;
160   - console.log(JSON.stringify(data));
161   - if (typeof WeixinJSBridge === 'undefined') { // 微信浏览器内置对象。参考微信官方文档
162   - if (document.addEventListener) {
163   - document.addEventListener('WeixinJSBridgeReady', vm.onBridgeReady(data), false)
164   - } else if (document.attachEvent) {
165   - document.attachEvent('WeixinJSBridgeReady', vm.onBridgeReady(data))
166   - document.attachEvent('onWeixinJSBridgeReady', vm.onBridgeReady(data))
167   - }
168   - } else {
169   - console.log('准备调用微信支付')
170   - vm.onBridgeReady(data)
171   - }
172   - } else {
173   - this.$msgbox('提示', '没有找到返回值')
174   - }
175   - } else {
176   - console.log(res.message);
177   - this.$msgbox('提示', res.message)
178   - }
179   - })
180   - },
  202 +
181 203 onBridgeReady(params) {
182   - let me = this
183 204 console.log('调用微信支付WeixinJSBridge')
184 205 WeixinJSBridge.invoke(
185   - 'getBrandWCPayRequest', params,
  206 + 'getBrandWCPayRequest', {
  207 + "appId": params.appId, //公众号名称,由商户传入
  208 + "timeStamp": params.timeStamp, //时间戳,自1970年以来的秒数
  209 + "nonceStr": params.nonceStr, //随机串
  210 + "package": params.package,
  211 + "signType": params.signType, //微信签名方式:
  212 + "paySign": params.paySign //微信签名
  213 + },
  214 +
  215 + // 'getBrandWCPayRequest', params,
186 216 //
187 217 // 'getBrandWCPayRequest', { // 下面参数内容都是后台返回的
188 218 // 'appId': data.appId, // 公众号名称,由商户传入
... ... @@ -196,120 +226,15 @@ export default {
196 226 // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
197 227 if (res.err_msg === 'get_brand_wcpay_request:ok') {
198 228 console.log('成功')
199   - var salt = me.$utils.myCommonSalt(32);
200   - let wxparams = {
201   - pageNum: 1,
202   - pageSize: 10000,
203   - parkState: 10,
204   - terminalSource: 7,
205   - carNumber: me.carNumber,
206   - app_id: me.$utils.myVarAppid,
207   - deviceInfo: me.$utils.myDeviceInfo,
208   - salt: salt,
209   - sign_type: "md5",
210   - token: '',
211   - }
212   - wxparams.sign = me.$utils.signObject(wxparams)
213   - queryParkingRecordPageByCarNumbers(wxparams).then(response => {
214   - console.log(response)
215   - me.parkList = response.data.dataList
216   -
217   - // alert(JSON.stringify(me.parkList))
218   - // alert(me.parkList.length)
219   - if (me.parkList.length == 0) {
220   - me.$router.push({
221   - path: 'parkRecord',
222   - query: {
223   - carNumber: me.carNumber,
224   - carNumberColor: me.carWrapBG,
225   - parkFlag: 0 // 0表示在停 1表示历史
226   - }
227   - })
228   -
229   - } else {
230   - me.parkingData = me.parkList.filter(item => {
231   - return item.parkState == '10'
232   - })
233   - console.log(me.parkingData)
234   - me.historyList = me.parkList.filter(item => {
235   - return item.parkState == '20'
236   - })
237   - console.log(me.historyList)
238   -
239   - if (me.historyList.length > 0) {
240   - MessageBox.confirm('', {
241   - message: '您当前有历史欠费 是否立即补缴?',
242   - title: '温馨提示',
243   - confirmButtonText: '去补缴',
244   - cancelButtonText: '取消'
245   - }).then(action => {
246   - if (action == 'confirm') { //确认的回调
247   - console.log('确定');
248   - me.$router.push({
249   - path: 'parkRecord',
250   - query: {
251   - carNumber: me.carNumber,
252   - carNumberColor: me.carWrapBG,
253   - parkFlag: 1 // 0表示在停 1表示历史
254   - }
255   - })
256   - }
257   - }).catch(err => {
258   - if (err == 'cancel') { //取消的回调
259   - console.log('取消');
260   - }
261   - });
262   - } else {
263   -
264   - if (me.paySrcType == 101) { //缴费了本次
265   - me.$router.push({
266   - path: 'parkRecord',
267   - query: {
268   - carNumber: me.carNumber,
269   - carNumberColor: me.carWrapBG,
270   - parkFlag: 0 // 0表示在停 1表示历史
271   - }
272   - })
273   - } else {
274   - MessageBox.confirm('', {
275   - message: '您当前有在停订单 是否立即支付?',
276   - title: '温馨提示',
277   - confirmButtonText: '去支付',
278   - cancelButtonText: '取消'
279   - }).then(action => {
280   - if (action == 'confirm') { //确认的回调
281   - console.log('确定');
282   - me.$router.push({
283   - path: 'parkRecord',
284   - query: {
285   - carNumber: me.carNumber,
286   - carNumberColor: me.carWrapBG,
287   - parkFlag: 0 // 0表示在停 1表示历史
288   - }
289   - })
290   - }
291   - }).catch(err => {
292   - if (err == 'cancel') { //取消的回调
293   - console.log('取消');
294   - }
295   - });
296   - }
297   -
298   - }
299   - }
300   -
301   - })
302   -
303 229 } else {
304 230 console.log('失败')
305   - this.$msgbox('提示', '支付失败')
306   - me.$router.go(-2);
  231 + alert('支付失败')
307 232 }
308 233 }
309 234 )
310 235 },
311 236 },
312   - filters: {}
  237 +
313 238 }
314 239 </script>
315 240  
... ...