Commit 6b286309f323d735bc1f75cb7609c9f6c7ace0b6
1 parent
3c184204
支付方式 -- 微信
Showing
4 changed files
with
179 additions
and
30 deletions
src/api/orderPay/orderPay.js
1 | import request from '@/utils/request' | 1 | import request from '@/utils/request' |
2 | 2 | ||
3 | -export function aliPay(params) { | 3 | +export function aliPay(params) { // 支付宝 |
4 | return request({ | 4 | return request({ |
5 | url: '/api/alipay/aliH5Pay', | 5 | url: '/api/alipay/aliH5Pay', |
6 | method: 'post', | 6 | method: 'post', |
@@ -8,3 +8,22 @@ export function aliPay(params) { | @@ -8,3 +8,22 @@ export function aliPay(params) { | ||
8 | }) | 8 | }) |
9 | } | 9 | } |
10 | 10 | ||
11 | + | ||
12 | +export function getOpenId(params) { // 获取OpenId | ||
13 | + return request({ | ||
14 | + url: '/api//weixinPublicPay/getOpenIdByCode', | ||
15 | + method: 'post', | ||
16 | + data: params | ||
17 | + }) | ||
18 | +} | ||
19 | + | ||
20 | +export function vxPayQuery(params) { // 微信 | ||
21 | + return request({ | ||
22 | + url: '/api//weixinpay/publicUnifiedOrder', | ||
23 | + method: 'post', | ||
24 | + data: params | ||
25 | + }) | ||
26 | +} | ||
27 | + | ||
28 | + | ||
29 | + |
src/components/orderPay.vue
@@ -38,7 +38,8 @@ | @@ -38,7 +38,8 @@ | ||
38 | </template> | 38 | </template> |
39 | 39 | ||
40 | <script> | 40 | <script> |
41 | -import { aliPay } from '@/api/orderPay/orderPay' | 41 | +import {aliPay, getOpenId, vxPayQuery} from '@/api/orderPay/orderPay' |
42 | + | ||
42 | export default { | 43 | export default { |
43 | name: 'orderPay', | 44 | name: 'orderPay', |
44 | data() { | 45 | data() { |
@@ -46,9 +47,12 @@ export default { | @@ -46,9 +47,12 @@ export default { | ||
46 | carWrapBG: 0, | 47 | carWrapBG: 0, |
47 | carNumber: '京A12312', | 48 | carNumber: '京A12312', |
48 | arrearageActFee: 0, | 49 | arrearageActFee: 0, |
49 | - arrearageDiscFee:0, | ||
50 | - arrearageActFee:0, | ||
51 | - clientBrowser:'', // 客户端 | 50 | + arrearageDiscFee: 0, |
51 | + arrearageActFee: 0, | ||
52 | + clientBrowser: '', // 客户端 | ||
53 | + paySrcType: '', //支付的类型 101 是本次 103是历史欠费 | ||
54 | + orderId: '', //支付的订单 | ||
55 | + webAppCode: '', // 微信code | ||
52 | } | 56 | } |
53 | }, | 57 | }, |
54 | created() { | 58 | created() { |
@@ -58,32 +62,147 @@ export default { | @@ -58,32 +62,147 @@ export default { | ||
58 | this.arrearageDiscFee = this.$route.query.arrearageDiscFee // 优惠 | 62 | this.arrearageDiscFee = this.$route.query.arrearageDiscFee // 优惠 |
59 | this.arrearageActFee = this.$route.query.arrearageActFee // 实收 | 63 | this.arrearageActFee = this.$route.query.arrearageActFee // 实收 |
60 | this.clientBrowser = this.$utils.clientBrowser() //支付方式 | 64 | this.clientBrowser = this.$utils.clientBrowser() //支付方式 |
65 | + this.paySrcType = this.$route.query.paySrcType // 实收 | ||
66 | + this.orderId = this.$route.query.ordeID | ||
67 | + | ||
68 | + if (this.clientBrowser == "微信") { | ||
69 | + this.webAppCode = this.getCode(); | ||
70 | + } | ||
61 | }, | 71 | }, |
62 | - methods:{ | ||
63 | - toPay(){ | ||
64 | - if(this.clientBrowser == '支付宝') { | 72 | + methods: { |
73 | + getCode() { | ||
74 | + var appID = this.$utils.myVxAppId; | ||
75 | + var code = this.$route.query.code | ||
76 | + var local = window.location.href; | ||
77 | + if (code == null || code === '') { | ||
78 | + 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#wechat_redirect' | ||
79 | + } else { | ||
80 | + return code; | ||
81 | + } | ||
82 | + }, | ||
83 | + toPay() { | ||
84 | + let me = this | ||
85 | + let _order = [] | ||
86 | + this.orderId = JSON.parse(this.orderId) | ||
87 | + console.log(this.orderId) | ||
88 | + if (this.paySrcType == 103) { | ||
89 | + this.orderId.forEach(item => { | ||
90 | + _order.push({ | ||
91 | + orderId: item | ||
92 | + }) | ||
93 | + }) | ||
94 | + this.orderId = [] | ||
95 | + this.orderId = _order | ||
96 | + } | ||
97 | + | ||
98 | + if (this.clientBrowser == '支付宝') { // 支付宝支付 | ||
65 | var aliParams = {}; | 99 | var aliParams = {}; |
66 | - aliParams.orderId = orderID; | 100 | + aliParams.orderId = this.orderId; |
67 | aliParams.carNumber = this.carNumber; | 101 | aliParams.carNumber = this.carNumber; |
68 | aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | 102 | aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 |
69 | aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | 103 | aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 |
70 | - aliParams.paySrcType = _paySrcType;//101停车支付 | ||
71 | - aliParams.orgId = '10003', | ||
72 | - aliParams.backType=2, | ||
73 | - // aliParams.recordArreaInfos = JSON.stringify([{ | ||
74 | - // "orderId": webAppParams.orderId, | ||
75 | - // "orderNotPayFee": _mon * 100, | ||
76 | - // "parkId": getQueryString(window.location).parkCode | ||
77 | - // }]); | ||
78 | - | ||
79 | - aliParams.recordArreaInfos = JSON.stringify(orderID); | 104 | + aliParams.paySrcType = this.paySrcType;//101停车支付 |
105 | + aliParams.orgId = this.$utils.myOrgId, | ||
106 | + aliParams.backType = 2, | ||
107 | + aliParams.recordArreaInfos = JSON.stringify(this.orderId); | ||
108 | + | ||
109 | + aliPay(aliParams).then(response => { | ||
110 | + console.log(response) | ||
111 | + if (response.code == 0) {//进场 | ||
112 | + document.write(response.data);//打开支付表单 | ||
113 | + } else {//其他情况如【该卡号场内已存在】 | ||
114 | + console.log(response.message); | ||
115 | + } | ||
116 | + | ||
117 | + }) | ||
80 | } | 118 | } |
81 | 119 | ||
120 | + if (this.clientBrowser == '微信') { // 微信支付 | ||
121 | + //第一步获取openid | ||
122 | + var codeParams = { | ||
123 | + code: this.webAppCode, | ||
124 | + appId: this.$utils.myVxAppId | ||
125 | + }; | ||
126 | + getOpenId(codeParams).then(res => { | ||
127 | + if (res.code == 0) { | ||
128 | + me.vxPay(res.data, this.orderId) | ||
129 | + } else if (res.code == 40163) { //code been used, hints[重复code问题] | ||
130 | + alert(res.message) | ||
131 | + console.log(res.message); | ||
132 | + } else { | ||
133 | + alert(res.message) | ||
134 | + } | ||
135 | + }) | ||
82 | 136 | ||
83 | - } | 137 | + } |
138 | + | ||
139 | + }, | ||
140 | + vxPay(openIdData, orderIdData) { | ||
141 | + var wxParams = {}; | ||
142 | + wxParams.orderId = orderIdData; | ||
143 | + wxParams.backType = 2, | ||
144 | + wxParams.orgId = this.$utils.myOrgId, | ||
145 | + wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
146 | + wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
147 | + wxParams.carNumber = this.carNumber; | ||
148 | + wxParams.paySrcType = this.paySrcType;//101停车支付 | ||
149 | + wxParams.recordArreaInfos = JSON.stringify(orderIdData); | ||
150 | + wxParams.openId = openIdData; | ||
151 | + wxParams.appId = this.$utils.myVxAppId; | ||
152 | + vxPayQuery(wxParams).then( res => { | ||
153 | + if (res.code == 0) { // | ||
154 | + //alertMsg("出场成功"); | ||
155 | + if (res.data) { | ||
156 | + var data = res.data; | ||
157 | + console.log(JSON.stringify(data)); | ||
158 | + if (typeof WeixinJSBridge === 'undefined') { // 微信浏览器内置对象。参考微信官方文档 | ||
159 | + if (document.addEventListener) { | ||
160 | + document.addEventListener('WeixinJSBridgeReady', vm.onBridgeReady(data), false) | ||
161 | + } else if (document.attachEvent) { | ||
162 | + document.attachEvent('WeixinJSBridgeReady', vm.onBridgeReady(data)) | ||
163 | + document.attachEvent('onWeixinJSBridgeReady', vm.onBridgeReady(data)) | ||
164 | + } | ||
165 | + } else { | ||
166 | + console.log('准备调用微信支付') | ||
167 | + vm.onBridgeReady(data) | ||
168 | + } | ||
169 | + } else { | ||
170 | + alert("没有找到返回值"); | ||
171 | + } | ||
172 | + } else { | ||
173 | + console.log(res.message); | ||
174 | + alert(res.message); | ||
175 | + } | ||
176 | + }) | ||
177 | + }, | ||
178 | + onBridgeReady (data) { | ||
179 | + console.log('调用微信支付WeixinJSBridge') | ||
180 | + var vm = this | ||
181 | + WeixinJSBridge.invoke( | ||
182 | + 'getBrandWCPayRequest', params, | ||
183 | + // | ||
184 | + // 'getBrandWCPayRequest', { // 下面参数内容都是后台返回的 | ||
185 | + // 'appId': data.appId, // 公众号名称,由商户传入 | ||
186 | + // 'timeStamp': data.timeStamp, // 时间戳 | ||
187 | + // 'nonceStr': data.nonceStr, // 随机串 | ||
188 | + // 'package': data.package, // 预支付id | ||
189 | + // 'signType': data.signType, // 微信签名方式 | ||
190 | + // 'paySign': data.paySign // 微信签名 | ||
191 | + // }, | ||
192 | + function (res) { | ||
193 | + // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 | ||
194 | + if (res.err_msg === 'get_brand_wcpay_request:ok') { | ||
195 | + console.log('成功') | ||
196 | + } else { | ||
197 | + console.log('失败') | ||
198 | + alert('支付失败') | ||
199 | + } | ||
200 | + } | ||
201 | + ) | ||
202 | + }, | ||
84 | }, | 203 | }, |
85 | - filters:{ | ||
86 | - formateColor(val){ | 204 | + filters: { |
205 | + formateColor(val) { | ||
87 | switch (val) { | 206 | switch (val) { |
88 | case '0': | 207 | case '0': |
89 | return 'carBlue' | 208 | return 'carBlue' |
@@ -116,23 +235,28 @@ export default { | @@ -116,23 +235,28 @@ export default { | ||
116 | width: 100%; | 235 | width: 100%; |
117 | height: 130px; | 236 | height: 130px; |
118 | } | 237 | } |
119 | - .carBlue{ | 238 | + |
239 | + .carBlue { | ||
120 | background: url("../assets/images/blueBG.png") no-repeat; | 240 | background: url("../assets/images/blueBG.png") no-repeat; |
121 | background-size: 100% 100%; | 241 | background-size: 100% 100%; |
122 | } | 242 | } |
123 | - .carYellow{ | 243 | + |
244 | + .carYellow { | ||
124 | background: url("../assets/images/yellowBG.png") no-repeat; | 245 | background: url("../assets/images/yellowBG.png") no-repeat; |
125 | background-size: 100% 100%; | 246 | background-size: 100% 100%; |
126 | } | 247 | } |
127 | - .carGreen{ | 248 | + |
249 | + .carGreen { | ||
128 | background: url("../assets/images/greenBG.png") no-repeat; | 250 | background: url("../assets/images/greenBG.png") no-repeat; |
129 | background-size: 100% 100%; | 251 | background-size: 100% 100%; |
130 | } | 252 | } |
131 | - .carWhite{ | 253 | + |
254 | + .carWhite { | ||
132 | background: url("../assets/images/whiteBG.png") no-repeat; | 255 | background: url("../assets/images/whiteBG.png") no-repeat; |
133 | background-size: 100% 100%; | 256 | background-size: 100% 100%; |
134 | } | 257 | } |
135 | - .carBlack{ | 258 | + |
259 | + .carBlack { | ||
136 | background: url("../assets/images/blackBG.png") no-repeat; | 260 | background: url("../assets/images/blackBG.png") no-repeat; |
137 | background-size: 100% 100%; | 261 | background-size: 100% 100%; |
138 | } | 262 | } |
@@ -179,7 +303,8 @@ export default { | @@ -179,7 +303,8 @@ export default { | ||
179 | color: #FFF; | 303 | color: #FFF; |
180 | cursor: pointer; | 304 | cursor: pointer; |
181 | } | 305 | } |
182 | - .tip{ | 306 | + |
307 | + .tip { | ||
183 | padding-left: 40px; | 308 | padding-left: 40px; |
184 | background: url("../assets/images/free-tip.png") no-repeat 18px center; | 309 | background: url("../assets/images/free-tip.png") no-repeat 18px center; |
185 | background-size: 16px 16px; | 310 | background-size: 16px 16px; |
src/components/parkRecord.vue
@@ -269,6 +269,7 @@ export default { | @@ -269,6 +269,7 @@ export default { | ||
269 | var salt = this.$utils.myCommonSalt(32); | 269 | var salt = this.$utils.myCommonSalt(32); |
270 | 270 | ||
271 | var list = "[" + this.orderIds + "]" | 271 | var list = "[" + this.orderIds + "]" |
272 | + | ||
272 | // var orderlist = this.orderIds | 273 | // var orderlist = this.orderIds |
273 | // var codes = "[" + fun.parkCodes + "]" | 274 | // var codes = "[" + fun.parkCodes + "]" |
274 | // | 275 | // |
@@ -305,6 +306,7 @@ export default { | @@ -305,6 +306,7 @@ export default { | ||
305 | console.log(response) | 306 | console.log(response) |
306 | let res = response.data.carArrearages[0] | 307 | let res = response.data.carArrearages[0] |
307 | console.log(res) | 308 | console.log(res) |
309 | + this.orderIds = JSON.stringify(this.orderIds) | ||
308 | this.$router.push( | 310 | this.$router.push( |
309 | { | 311 | { |
310 | path:'orderPay', | 312 | path:'orderPay', |
@@ -313,7 +315,9 @@ export default { | @@ -313,7 +315,9 @@ export default { | ||
313 | arrearageTotalFee: res.arrearageTotalFee,// 应收 | 315 | arrearageTotalFee: res.arrearageTotalFee,// 应收 |
314 | arrearageDiscFee: res.arrearageDiscFee,// 优惠 | 316 | arrearageDiscFee: res.arrearageDiscFee,// 优惠 |
315 | arrearageActFee: res.arrearageActFee,// 实收 | 317 | arrearageActFee: res.arrearageActFee,// 实收 |
316 | - carNumber: this.carNumber // 车牌 | 318 | + carNumber: this.carNumber, // 车牌 |
319 | + paySrcType: 103, //支付的类型 101 是本次 103是历史欠费 | ||
320 | + ordeID: this.orderIds, //支付的订单号 | ||
317 | } | 321 | } |
318 | } | 322 | } |
319 | ) | 323 | ) |
src/utils/utils.js
@@ -109,7 +109,8 @@ export default { | @@ -109,7 +109,8 @@ export default { | ||
109 | return '支付宝' | 109 | return '支付宝' |
110 | } | 110 | } |
111 | }, | 111 | }, |
112 | - | 112 | + // 0eca8f5373ca4866aec2f8e9d9367104 老的id |
113 | + // 14318527b13840c2a4af63fef52c2d6e 老的签名 | ||
113 | myVarAppid:'ud8yq5tv0inxupc05xfeau39jywlqoj2',// 公共请求Appid | 114 | myVarAppid:'ud8yq5tv0inxupc05xfeau39jywlqoj2',// 公共请求Appid |
114 | 115 | ||
115 | myDeviceInfo: 'BC0703A4-AFB0-4B51-9089-9B7487C0CC6E', // 公共请求设备信息 | 116 | myDeviceInfo: 'BC0703A4-AFB0-4B51-9089-9B7487C0CC6E', // 公共请求设备信息 |