Commit 6b286309f323d735bc1f75cb7609c9f6c7ace0b6

Authored by liuqimichale
1 parent 3c184204

支付方式 -- 微信

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', // 公共请求设备信息