Commit 544f25d22aed5ecd037dc8188c9c0894526d24fe

Authored by songchongxian
1 parent ed71fe63

扫码支付。。。

billCodePay.html
@@ -13,10 +13,10 @@ @@ -13,10 +13,10 @@
13 <meta http-equiv="Cache-control" content="no-cache"> 13 <meta http-equiv="Cache-control" content="no-cache">
14 <meta http-equiv="Cache" content="no-cache"> 14 <meta http-equiv="Cache" content="no-cache">
15 <meta http-equiv="Expires" content="0"> 15 <meta http-equiv="Expires" content="0">
16 - <link rel="stylesheet" href="css/index.css?v=0.1"> 16 + <link rel="stylesheet" href="css/index.css?v=0.121">
17 <script src="config.js?v=0.1"></script> 17 <script src="config.js?v=0.1"></script>
18 - <script src="js/common.js?v=0.1"></script>  
19 - <script src="js/billCodePay.js?v=0.1"></script> 18 + <script src="js/common.js?v=0.121"></script>
  19 + <script src="js/billCodePay.js?v=0.121"></script>
20 <!--<script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js"></script>--> 20 <!--<script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js"></script>-->
21 <!--<script src="config.js"></script>--> 21 <!--<script src="config.js"></script>-->
22 <!-- 22 <!--
@@ -34,7 +34,8 @@ @@ -34,7 +34,8 @@
34 <!--<noscript>--> 34 <!--<noscript>-->
35 <!--You need to enable JavaScript to run this app.--> 35 <!--You need to enable JavaScript to run this app.-->
36 <!--</noscript>--> 36 <!--</noscript>-->
37 - <header id="header" class="flexBoxRow panelBgColor"> 37 + <header id="header" class="flexBoxRow_column panelBgColor">
  38 + <div class="headTip" id="headTip"><span>订单获取成功,请您尽快完成支付,剩余时间:</span><span id="countDownTime"></span> </div>
38 <div class="headerBox"> 39 <div class="headerBox">
39 <div class="carNumBox"><span></span><span id="carNum"></span></div> 40 <div class="carNumBox"><span></span><span id="carNum"></span></div>
40 <div class="moneyBox"><span>¥</span><span id="sumMoney">0.00</span></div> 41 <div class="moneyBox"><span>¥</span><span id="sumMoney">0.00</span></div>
config.js
@@ -6,12 +6,10 @@ @@ -6,12 +6,10 @@
6 window.webAppH5 = {}; 6 window.webAppH5 = {};
7 7
8 //微信appID 8 //微信appID
9 -var appWxID = "wx1e9001e5940605b1";//wx945eccc8163fd75b 9 +var appWxID = "wx945eccc8163fd75b";
10 10
11 /*服务器地址*/ 11 /*服务器地址*/
12 -//var webAppRoot = "http://39.98.54.240:8090";  
13 -var webAppRoot = "http://pay.service.renniting.cn/v1";  
14 - 12 +var webAppRoot = "http://pay.service.renniting.cn/v1";//http://39.98.54.240:8090"; //"http://39.98.54.240:8090";
15 //微信支付结果回调地址 13 //微信支付结果回调地址
16 var webAppPayResult = "http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/page/wxpayResult.html"; 14 var webAppPayResult = "http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/page/wxpayResult.html";
17 15
@@ -25,7 +23,7 @@ webAppH5.comParams = { @@ -25,7 +23,7 @@ webAppH5.comParams = {
25 token: '666' 23 token: '666'
26 } 24 }
27 25
28 -//小票扫码支付参数codeType[0静态码、1小票二维码、2动态二维码] 26 +//小票扫码支付参数
29 webAppH5.dynCode = {//卫岗固定参数 27 webAppH5.dynCode = {//卫岗固定参数
30 direction: 1, 28 direction: 1,
31 codeType: 1, 29 codeType: 1,
@@ -38,7 +36,7 @@ webAppH5.comServer = &quot;/keyTopQrCodeInOutPark/noCarQRcodeInOutPark&quot;; @@ -38,7 +36,7 @@ webAppH5.comServer = &quot;/keyTopQrCodeInOutPark/noCarQRcodeInOutPark&quot;;
38 //缴费-微信 36 //缴费-微信
39 webAppH5.wxPayServer = "/weixinpay/publicUnifiedOrder"; 37 webAppH5.wxPayServer = "/weixinpay/publicUnifiedOrder";
40 38
41 -//微信获取openID 39 +//缴费-微信
42 webAppH5.wxGetOpenIdServer = "/weixinPublicPay/getOpenIdByCode"; 40 webAppH5.wxGetOpenIdServer = "/weixinPublicPay/getOpenIdByCode";
43 41
44 //缴费-支付宝 42 //缴费-支付宝
@@ -79,7 +77,7 @@ webAppH5.aliPayServer = &quot;/alipay/aliH5Pay&quot;; @@ -79,7 +77,7 @@ webAppH5.aliPayServer = &quot;/alipay/aliH5Pay&quot;;
79 77
80 //小票二维码出场 78 //小票二维码出场
81 //http://39.98.54.240/codepay/index.html?appid=0&lotId=1&payConfigId=2&receiptNo=3 79 //http://39.98.54.240/codepay/index.html?appid=0&lotId=1&payConfigId=2&receiptNo=3
82 -//http://localhost:1260/codepay/index.html?appid=0&lotId=3504&payConfigId=2&receiptNo=3& 80 +//http://localhost:1260/codepay/index.html?appid=0&lotId=1&payConfigId=2&receiptNo=3
83 81
84 82
85 //首页 83 //首页
@@ -97,22 +95,5 @@ webAppH5.aliPayServer = &quot;/alipay/aliH5Pay&quot;; @@ -97,22 +95,5 @@ webAppH5.aliPayServer = &quot;/alipay/aliH5Pay&quot;;
97 95
98 //http://localhost:1260/pay.html?orderId=101526715300086198272&parkName=%E9%9D%99%E9%9B%85%E5%9C%B0%E4%B8%8A&parkCode=B1504020C7&inparktime=2018-12-24%2010%3A58%3A24&outtime=2018-12-24%2011%3A05%3A10&staytime=420&due=70&paid=0&orderTotalFee=70&orderFee=7&discountFee=63&plateno=%E8%92%99DTK366&outPayOrderNo=B1504020C720181224110510813DTK366-172192102&appOrderTimeout=%E8%AF%B7%E5%9C%A8%E6%94%AF%E4%BB%98%E5%AE%8C%E6%88%9010%E5%88%86%E9%92%9F%E5%86%85%E5%87%BA%E5%9C%BA%EF%BC%8C%E5%A6%82%E8%B6%85%E6%97%B6%E6%9C%AA%E5%87%BA%E5%9C%BA%EF%BC%8C%E4%BC%9A%E7%BB%A7%E7%BB%AD%E8%AE%A1%E8%B4%B9%E3%80%82&discountDesc=1%E6%8A%98%E4%BC%98%E6%83%A0&queryOrderInfo=%7B%22app_id%22%3A%221%22%2C%22carNumber%22%3A%22%E8%92%99DTK366%22%2C%22channelId%22%3A%22172192102%22%2C%22codeType%22%3A0%2C%22deviceInfo%22%3A%223%22%2C%22direction%22%3A1%2C%22parkingId%22%3A%22B1504020C7%22%2C%22plNo%22%3A%22B1504020C7%22%2C%22salt%22%3A%222%22%2C%22sign%22%3A%224%22%2C%22sign_type%22%3A%22md5%22%2C%22terminalSource%22%3A%227%22%2C%22token%22%3A%22666%22%7D&needPay=true 96 //http://localhost:1260/pay.html?orderId=101526715300086198272&parkName=%E9%9D%99%E9%9B%85%E5%9C%B0%E4%B8%8A&parkCode=B1504020C7&inparktime=2018-12-24%2010%3A58%3A24&outtime=2018-12-24%2011%3A05%3A10&staytime=420&due=70&paid=0&orderTotalFee=70&orderFee=7&discountFee=63&plateno=%E8%92%99DTK366&outPayOrderNo=B1504020C720181224110510813DTK366-172192102&appOrderTimeout=%E8%AF%B7%E5%9C%A8%E6%94%AF%E4%BB%98%E5%AE%8C%E6%88%9010%E5%88%86%E9%92%9F%E5%86%85%E5%87%BA%E5%9C%BA%EF%BC%8C%E5%A6%82%E8%B6%85%E6%97%B6%E6%9C%AA%E5%87%BA%E5%9C%BA%EF%BC%8C%E4%BC%9A%E7%BB%A7%E7%BB%AD%E8%AE%A1%E8%B4%B9%E3%80%82&discountDesc=1%E6%8A%98%E4%BC%98%E6%83%A0&queryOrderInfo=%7B%22app_id%22%3A%221%22%2C%22carNumber%22%3A%22%E8%92%99DTK366%22%2C%22channelId%22%3A%22172192102%22%2C%22codeType%22%3A0%2C%22deviceInfo%22%3A%223%22%2C%22direction%22%3A1%2C%22parkingId%22%3A%22B1504020C7%22%2C%22plNo%22%3A%22B1504020C7%22%2C%22salt%22%3A%222%22%2C%22sign%22%3A%224%22%2C%22sign_type%22%3A%22md5%22%2C%22terminalSource%22%3A%227%22%2C%22token%22%3A%22666%22%7D&needPay=true
99 97
100 -/*正式环境前缀*/  
101 -//http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay  
102 -  
103 -/*类型1:  
104 -lotId -->parkingId  
105 -receiptNo --> carNumber 车牌号  
106 -direction 固定 1  
107 -codeType 固定 1  
108 -terminalSource 固定 7  
109 -channelId 固定 小票二维码  
110 -*/  
111 -//http://localhost:1260/dynCodePay.html?appid=0&lotId=3504&payConfigId=2&receiptNo=%E8%92%99D9203C  
112 -//http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/index.html?appid=0&lotId=3504&payConfigId=2&receiptNo=%E8%92%99D9203C  
113 -  
114 -//http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/index.html?appid=0&lotId=3504&payConfigId=2&receiptNo=蒙D871R2  
115 98
116 -/*类型2:codeType2动态二维码正式环境地址前缀*/  
117 -//http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/index.html?codeType=2&isNeedPay=1&orderId=001&parkName=万达停车场&parkCode=a001&inparktime=2018-12-26 00:00:00&outtime=2018-12-26 10:00:00&staytime=360&orderFee=100&plateno=蒙DY2408  
118 99
css/index.css
@@ -33,11 +33,20 @@ body { @@ -33,11 +33,20 @@ body {
33 } 33 }
34 .flexBoxRow { 34 .flexBoxRow {
35 display: flex; 35 display: flex;
  36 + display: -webkit-flex;
36 justify-content: left; 37 justify-content: left;
37 flex-direction:row; 38 flex-direction:row;
38 align-items:center; 39 align-items:center;
39 width:100%; 40 width:100%;
40 } 41 }
  42 +.flexBoxRow_column {
  43 + display: flex;
  44 + display: -webkit-flex;
  45 + justify-content: left;
  46 + flex-direction:column;
  47 + align-items:center;
  48 + width:100%;
  49 +}
41 .carNumBox { 50 .carNumBox {
42 font-size:1.4rem; 51 font-size:1.4rem;
43 font-weight:bold; 52 font-weight:bold;
@@ -169,4 +178,17 @@ body { @@ -169,4 +178,17 @@ body {
169 transition: all 0.2s ease; 178 transition: all 0.2s ease;
170 transform: scale(1, 1); 179 transform: scale(1, 1);
171 display: inline-block; 180 display: inline-block;
172 -}  
173 \ No newline at end of file 181 \ No newline at end of file
  182 +}
  183 +
  184 +.headTip {
  185 + display:none;text-align: center;
  186 + background-color:rgba(253, 201, 11, 0.95);
  187 + width: 100%;
  188 + line-height:25px;
  189 +}
  190 +.headTip > span:first-child {
  191 +
  192 +}
  193 +.headTip > span:last-child {
  194 + color:red;font-size: 1.6rem;
  195 +}
1 -git  
2 -http://192.168.1.195:9998/web_developers/codepay.git 1 +http://132.232.101.107/webApp/paywxali/index.html
  2 +
  3 +http://132.232.101.107/webApp/paywxali/demo.html
  4 +判断当前手机端浏览器是微信还是支付宝
  5 +
  6 +
  7 +
  8 +
  9 +调用微信和支付宝第三方接口方法总结
  10 +https://blog.csdn.net/yufeng005/article/details/54583467
  11 +
  12 +
  13 +
  14 +ajax支付
  15 +https://www.cnblogs.com/junjieok/p/4538580.html
  16 +
  17 +
3 18
4 19
5 //进出场接口文档-卫岗 20 //进出场接口文档-卫岗
@@ -37,40 +52,15 @@ http://39.98.54.240/codepay/index.html?plNo=P11011700C&amp;parkingId=1&amp;channelId=172 @@ -37,40 +52,15 @@ http://39.98.54.240/codepay/index.html?plNo=P11011700C&amp;parkingId=1&amp;channelId=172
37 http://39.98.54.240/codepay/index.html?plNo=P11011700C&parkingId=1&channelId=172198243&direction=1&codeType=0&expireDate=expireDate&extendData=extendData 52 http://39.98.54.240/codepay/index.html?plNo=P11011700C&parkingId=1&channelId=172198243&direction=1&codeType=0&expireDate=expireDate&extendData=extendData
38 53
39 54
  55 +//server通过--12
  56 +//出场--支付校验
  57 +http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/page/out6.html?plNo=B1504020C7&parkingId=1&channelId=172198243&direction=1&codeType=0&expireDate=expireDate&extendData=extendData
40 58
41 -说明:  
42 -支付宝:后台返回form表单,直接支付,简单。  
43 -微信支付麻烦,1服务号需要配置支付目录;2:获取code;3:获取openid;4:获取参数;5:发起支付; JSAPI支付流程  
44 -  
45 -pay.html,先校验订单,在发起请求  
46 -  
47 -//小票固定参数  
48 -[billCodePay.html,扫码二维码,纸质]  
49 -对应关系:  
50 -lotId -->parkingId 停车场编号  
51 -receiptNo --> carNumber 车牌号  
52 -direction 固定 1  
53 -codeType 固定 1  
54 -terminalSource 固定 7  
55 -channelId 固定 小票二维码  
56 -  
57 -  
58 -//动态二维码[dynCodePay.html]  
59 -String qrcodeType;//2-动态二维码  
60 -private Boolean isNeedPay=true;  
61 -private String orderId;//订单号  
62 -private String parkName;//停车场名称  
63 -private String parkCode;//停车场编号  
64 -private String inparktime;//进场时间 格式:yyyy-MM-dd HH:mm:ss  
65 -private String outtime;//出场时间 格式:yyyy-MM-dd HH:mm:ss  
66 -private String staytime;//停车时长1  
67 -private String orderFee;//本次出场实际应付金额(减去折扣,优惠券等之后的应付金额)分  
68 -private String plateno;// 车牌号  
69 -  
70 -?codeType=2&isNeedPay=1&orderId=001&parkName=万达停车场&parkCode=a001&inparktime=2018-12-26 00:00:00&outtime=2018-12-26 10:00:00&staytime=1&orderFee=100&plateno=蒙DY2408  
71 -  
72 -  
73 -//动态二维码测试,订单号:101527546939039301632 车牌:蒙D11111 可以测试  
74 -http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/dynCodePay.html?codeType=2&isNeedPay=1&orderId=101527546939039301632&parkName=%E4%B8%87%E8%BE%BE%E5%81%9C%E8%BD%A6%E5%9C%BA&parkCode=a001&inparktime=2018-12-26%2000%3A00%3A00&outtime=2018-12-26%2010%3A00%3A00&staytime=360&orderFee=100&plateno=%E8%92%99DY2408 59 +//动态码-钱在url中,没有校验
  60 +http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/dynCodePay6.html?codeType=2&isNeedPay=1&orderId=101527546939039301632&parkName=%E4%B8%87%E8%BE%BE%E5%81%9C%E8%BD%A6%E5%9C%BA&parkCode=a001&inparktime=2018-12-26%2000%3A00%3A00&outtime=2018-12-26%2010%3A00%3A00&staytime=360&orderFee=100&plateno=%E8%92%99DY2408
75 61
76 62
  63 +//出场码
  64 +http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/pay.html?orderId=101536977652977254400&parkName=%E9%9D%99%E9%9B%85%E5%B0%81%E9%97%AD%E8%BD%A6%E5%9C%BA&parkCode=B1504020C7&inparktime=2019-01-21%2018%3A37%3A26&outtime=2019-01-22%2012%3A01%3A48&staytime=62640&due=1100&paid=0&orderTotalFee=1100&orderFee=990&discountFee=110&plateno=%E8%92%99DJF612&outPayOrderNo=B1504020C720190122120148594DJF612-172198243&appOrderTimeout=%E8%AF%B7%E5%9C%A8%E6%94%AF%E4%BB%98%E5%AE%8C%E6%88%9010%E5%88%86%E9%92%9F%E5%86%85%E5%87%BA%E5%9C%BA%EF%BC%8C%E5%A6%82%E8%B6%85%E6%97%B6%E6%9C%AA%E5%87%BA%E5%9C%BA%EF%BC%8C%E4%BC%9A%E7%BB%A7%E7%BB%AD%E8%AE%A1%E8%B4%B9%E3%80%82&discountDesc=9%E6%8A%98%E4%BC%98%E6%83%A0&queryOrderInfo=%7B%22app_id%22%3A%221%22%2C%22carNumber%22%3A%22%E8%92%99DJF612%22%2C%22channelId%22%3A%22172198243%22%2C%22codeType%22%3A0%2C%22deviceInfo%22%3A%223%22%2C%22direction%22%3A1%2C%22expireDate%22%3A%22expireDate%22%2C%22extendData%22%3A%22extendData%22%2C%22parkingId%22%3A%223504%22%2C%22plNo%22%3A%22B1504020C7%22%2C%22salt%22%3A%222%22%2C%22sign%22%3A%224%22%2C%22sign_type%22%3A%22md5%22%2C%22terminalSource%22%3A%227%22%2C%22token%22%3A%22666%22%7D&needPay=true
  65 +//动态码
  66 +http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/dynCodePay.html?codeType=2&isNeedPay=1&orderId=101536977652977254400&parkName=%E4%B8%87%E8%BE%BE%E5%81%9C%E8%BD%A6%E5%9C%BA&parkCode=a001&inparktime=2018-12-26%2000%3A00%3A00&outtime=2018-12-26%2010%3A00%3A00&staytime=360&orderFee=100&plateno=%E8%92%99D3C187
77 \ No newline at end of file 67 \ No newline at end of file
dynCodePay.html
@@ -13,10 +13,10 @@ @@ -13,10 +13,10 @@
13 <meta http-equiv="Cache-control" content="no-cache"> 13 <meta http-equiv="Cache-control" content="no-cache">
14 <meta http-equiv="Cache" content="no-cache"> 14 <meta http-equiv="Cache" content="no-cache">
15 <meta http-equiv="Expires" content="0"> 15 <meta http-equiv="Expires" content="0">
16 - <link rel="stylesheet" href="css/index.css?v=0.10">  
17 - <script src="config.js?v=0.10"></script>  
18 - <script src="js/common.js?v=0.10"></script>  
19 - <script src="js/dynCodePay.js?v=0.10"></script> 16 + <link rel="stylesheet" href="css/index.css?v=0.1">
  17 + <script src="config.js?v=0.1"></script>
  18 + <script src="js/common.js?v=0.12"></script>
  19 + <script src="js/dynCodePay.js?v=0.12"></script>
20 <!--<script src="config.js"></script>--> 20 <!--<script src="config.js"></script>-->
21 <!-- 21 <!--
22 Notice the use of %PUBLIC_URL% in the tags above. 22 Notice the use of %PUBLIC_URL% in the tags above.
js/billCodePay.js
@@ -21,28 +21,30 @@ window.onload = function () { @@ -21,28 +21,30 @@ window.onload = function () {
21 var wx = document.getElementById("rowWxPay"); 21 var wx = document.getElementById("rowWxPay");
22 ali.onclick = webAppClass.aliClick; 22 ali.onclick = webAppClass.aliClick;
23 wx.onclick = webAppClass.wxClick; 23 wx.onclick = webAppClass.wxClick;
24 - $btnObj.onclick = webAppClass.okClick; 24 + $btnObj.onclick = webAppClass.okClick;//确认支付按钮
25 document.getElementById("payTip").innerHTML = ""; 25 document.getElementById("payTip").innerHTML = "";
26 //参数 26 //参数
27 var tmpURLparams = getQueryString(window.location); 27 var tmpURLparams = getQueryString(window.location);
28 - if (tmpURLparams != null) {  
29 - //设置UI参数  
30 - //webAppClass.setUI(webAppParams);  
31 - webAppClass.init(tmpURLparams);  
32 - } else {  
33 - alertMsg("没有接收到url参数信息");  
34 - }  
35 -  
36 - //获取微信code  
37 - //webAppClass.getCode(); 28 +
  29 + //当前浏览器环境
38 var state = clientBrowserEx(); 30 var state = clientBrowserEx();
39 if (state == "wxPay") { 31 if (state == "wxPay") {
  32 + //wx先获取code, 在获取订单
40 webAppCode = webAppClass.getCode(); 33 webAppCode = webAppClass.getCode();
  34 + } else {
  35 + if (tmpURLparams != null) {
  36 + //设置UI参数
  37 + //webAppClass.setUI(webAppParams);
  38 + webAppClass.init(tmpURLparams);
  39 + } else {
  40 + alertMsg("没有接收到url参数信息");
  41 + }
41 } 42 }
42 } 43 }
43 /**/ 44 /**/
44 var webAppClass = { 45 var webAppClass = {
45 //appid={0}&lotId={1}&payConfigId={2}&receiptNo= 46 //appid={0}&lotId={1}&payConfigId={2}&receiptNo=
  47 + //初始化获取订单
46 init: function (params) { 48 init: function (params) {
47 var urlParams = params; 49 var urlParams = params;
48 var newParams = urlParams || {}; 50 var newParams = urlParams || {};
@@ -70,6 +72,7 @@ var webAppClass = { @@ -70,6 +72,7 @@ var webAppClass = {
70 //window.location.href = "../pay.html?" + queryParams; 72 //window.location.href = "../pay.html?" + queryParams;
71 webAppParams = tmpObj; 73 webAppParams = tmpObj;
72 webAppClass.setUI(tmpObj); 74 webAppClass.setUI(tmpObj);
  75 + countDownTime("countDownTime");//订单支付倒计时
73 } else { 76 } else {
74 var tipStr = "无需缴费,欢迎下次光临"; 77 var tipStr = "无需缴费,欢迎下次光临";
75 alertMsg(tipStr); 78 alertMsg(tipStr);
@@ -88,14 +91,41 @@ var webAppClass = { @@ -88,14 +91,41 @@ var webAppClass = {
88 $btnLoad.style.display = "none"; 91 $btnLoad.style.display = "none";
89 }); 92 });
90 }, 93 },
91 - //OK 94 + //1:先获取微信code; 2:然后获取订单信息
  95 + getCode: function () {
  96 + var appID = appWxID;
  97 + var code = getUrlParam('code');
  98 + var local = window.location.href;
  99 + if (code == null || code == "") {
  100 + //alert(code);
  101 + 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'
  102 + } else {
  103 + //alert(code);
  104 + var tmpURLparams = getQueryString(window.location);
  105 + webAppClass.init(tmpURLparams);
  106 + //去掉url中旧code
  107 + window.history.replaceState(null, document.title, funcUrlDel("code"));
  108 + return code;
  109 + }
  110 + function getUrlParam(name) {
  111 + var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
  112 + var r = window.location.search.substr(1).match(reg)
  113 + if (r != null) return unescape(r[2])
  114 + return null
  115 + }
  116 + },
  117 + //OK按钮
92 okClick: function (ev) { 118 okClick: function (ev) {
93 document.getElementById("payTip").innerHTML = ""; 119 document.getElementById("payTip").innerHTML = "";
94 if (webAppParams == null) { 120 if (webAppParams == null) {
95 - alertMsg("暂无订单信息");return; 121 + alertMsg("暂无订单信息"); return;
96 } 122 }
97 - //先校验停车费用后缴费提交  
98 - webAppClass.checkParkCost(); 123 + //[方式一]先校验停车费用后缴费提交
  124 + //webAppClass.checkParkCost();
  125 + //[方式二,倒计时支付]
  126 + $btnObj.style.display = "none";
  127 + $btnLoad.style.display = "block";
  128 + webAppClass.okPay(webAppParams);//唤醒支付
99 }, 129 },
100 //校验该订单当前支付时的费用(排除扫描订单后不支付时长) 130 //校验该订单当前支付时的费用(排除扫描订单后不支付时长)
101 checkParkCost: function () { 131 checkParkCost: function () {
@@ -117,6 +147,8 @@ var webAppClass = { @@ -117,6 +147,8 @@ var webAppClass = {
117 webAppClass.okPay(tmpObj);//唤醒支付 147 webAppClass.okPay(tmpObj);//唤醒支付
118 } else { 148 } else {
119 alertMsg("没有找到相应订单"); 149 alertMsg("没有找到相应订单");
  150 + $btnLoad.style.display = "none";
  151 + $btnObj.style.display = "block";
120 } 152 }
121 } else {//其他情况如【该卡号场内已存在】 153 } else {//其他情况如【该卡号场内已存在】
122 $btnLoad.style.display = "none"; 154 $btnLoad.style.display = "none";
@@ -141,7 +173,7 @@ var webAppClass = { @@ -141,7 +173,7 @@ var webAppClass = {
141 var clientType = clientBrowserEx(); 173 var clientType = clientBrowserEx();
142 switch (clientType) { 174 switch (clientType) {
143 case "wxPay"://微信[内置浏览器] 175 case "wxPay"://微信[内置浏览器]
144 - webAppClass.payAjaxJDK(orderID); 176 + webAppClass.payAjaxJDK(orderID);
145 console.log("wxPay");//微信支付 177 console.log("wxPay");//微信支付
146 break; 178 break;
147 case "aliPay"://支付宝 179 case "aliPay"://支付宝
@@ -185,25 +217,7 @@ var webAppClass = { @@ -185,25 +217,7 @@ var webAppClass = {
185 break; 217 break;
186 } 218 }
187 }, 219 },
188 - getCode: function () {  
189 - var appID = appWxID;  
190 - var code = getUrlParam('code');  
191 - var local = window.location.href;  
192 - //alert("local:" + local);  
193 - if (code == null || code === '') {  
194 - //alert(code);  
195 - 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'  
196 - } else {  
197 - //alert(code);  
198 - return code;  
199 - }  
200 - function getUrlParam(name) {  
201 - var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');  
202 - var r = window.location.search.substr(1).match(reg)  
203 - if (r != null) return unescape(r[2])  
204 - return null  
205 - }  
206 - }, 220 +
207 //Ali 221 //Ali
208 aliClick: function (ev) { 222 aliClick: function (ev) {
209 console.log("AliClick"); 223 console.log("AliClick");
@@ -295,11 +309,21 @@ var webAppClass = { @@ -295,11 +309,21 @@ var webAppClass = {
295 if (res.code == 0) { 309 if (res.code == 0) {
296 //alert(res.data); 310 //alert(res.data);
297 webAppClass.getPayParams(res.data, orderID); 311 webAppClass.getPayParams(res.data, orderID);
298 - } else { 312 + }
  313 + else if (res.code == 40163) {
  314 + alertMsg("请您重新扫码!");
  315 + $btnLoad.style.display = "none";
  316 + $btnObj.style.display = "block";
  317 + }
  318 + else {
299 alertMsg(res.message); 319 alertMsg(res.message);
  320 + $btnLoad.style.display = "none";
  321 + $btnObj.style.display = "block";
300 } 322 }
301 }, function (err) { 323 }, function (err) {
302 console.log("网络地址出错..." + openIdUrl); 324 console.log("网络地址出错..." + openIdUrl);
  325 + $btnLoad.style.display = "none";
  326 + $btnObj.style.display = "block";
303 }); 327 });
304 //2:获取支付参数 328 //2:获取支付参数
305 //function getPayParams(openId) { 329 //function getPayParams(openId) {
@@ -388,7 +412,7 @@ var webAppClass = { @@ -388,7 +412,7 @@ var webAppClass = {
388 alertMsg(res.message); 412 alertMsg(res.message);
389 } 413 }
390 }, function (err) { 414 }, function (err) {
391 - console.log("网络地址出错...");alertMsg("网络地址出错..."); 415 + console.log("网络地址出错..."); alertMsg("网络地址出错...");
392 $btnLoad.style.display = "none"; 416 $btnLoad.style.display = "none";
393 btnOBj.style.display = "block"; 417 btnOBj.style.display = "block";
394 }); 418 });
@@ -411,7 +435,7 @@ var webAppClass = { @@ -411,7 +435,7 @@ var webAppClass = {
411 $discountDesc = getObjectByID("discountDesc"),//8折优惠折扣费用 435 $discountDesc = getObjectByID("discountDesc"),//8折优惠折扣费用
412 $discountFee = getObjectByID("discountFee");//优惠金额 436 $discountFee = getObjectByID("discountFee");//优惠金额
413 437
414 - if (params != null && params!="") { 438 + if (params != null && params != "") {
415 var price = keepTwoDecimalFull((params.orderFee / 100));//(params.orderFee / 100); 439 var price = keepTwoDecimalFull((params.orderFee / 100));//(params.orderFee / 100);
416 $carNum.innerHTML = params.plateno;//手机号 440 $carNum.innerHTML = params.plateno;//手机号
417 $orderNum.innerHTML = params.orderId;//订单号 441 $orderNum.innerHTML = params.orderId;//订单号
@@ -423,7 +447,7 @@ var webAppClass = { @@ -423,7 +447,7 @@ var webAppClass = {
423 $parkName.innerHTML = params.parkName; 447 $parkName.innerHTML = params.parkName;
424 $inparktime.innerHTML = params.inparktime; 448 $inparktime.innerHTML = params.inparktime;
425 $staytime.innerHTML = formatSeconds(params.staytime); 449 $staytime.innerHTML = formatSeconds(params.staytime);
426 - 450 +
427 $due.innerHTML = keepTwoDecimalFull((params.due / 100));//停车总费用 451 $due.innerHTML = keepTwoDecimalFull((params.due / 100));//停车总费用
428 $paid.innerHTML = params.paid; 452 $paid.innerHTML = params.paid;
429 $discountFee.innerHTML = keepTwoDecimalFull((params.discountFee / 100));//优惠金额 453 $discountFee.innerHTML = keepTwoDecimalFull((params.discountFee / 100));//优惠金额
@@ -445,4 +469,4 @@ var webAppClass = { @@ -445,4 +469,4 @@ var webAppClass = {
445 $payDetail.style.height = "55px"; 469 $payDetail.style.height = "55px";
446 } 470 }
447 } 471 }
448 -}  
449 \ No newline at end of file 472 \ No newline at end of file
  473 +}
js/common.js
1 -/*自定义异步请求*/ 1 +/*
  2 + state
  3 +*/
  4 +var appState = {
  5 + defaultTime: 120,//默认2分钟倒计时
  6 + countDownTime_timer: null,//支付倒计时
  7 + codeNullTip: "微信授权失败,请您尝试重新扫码 !",//code获取失败提示语
  8 + expandField_1: null,//扩展字段1-备用
  9 + expandObj_1: null,//扩展字段1-备用
  10 +}
  11 +
  12 +/*自定义异步请求*/
2 function ajax() { 13 function ajax() {
3 var ajaxData = { 14 var ajaxData = {
4 type: (arguments[0].type || "GET").toUpperCase(), 15 type: (arguments[0].type || "GET").toUpperCase(),
@@ -236,3 +247,42 @@ function clientBrowserEx() { @@ -236,3 +247,42 @@ function clientBrowserEx() {
236 } 247 }
237 248
238 249
  250 +/*支付倒计时 @id*/
  251 +function countDownTime(id) {
  252 + $obj = getObjectByID(id);
  253 + getObjectByID("headTip").style.display = "block";
  254 + var count = appState.defaultTime;
  255 + appState.countDownTime_timer = setInterval(function () {
  256 + if (count==0) {
  257 + clearInterval(appState.countDownTime_timer);
  258 + appState.countDownTime_timer = null;
  259 + $obj.innerHTML = count + "秒";
  260 + //删除code后刷新
  261 + window.location.href = funcUrlDel("code");
  262 + } else {
  263 + --count;
  264 + $obj.innerHTML = count + "秒";
  265 + }
  266 + }, 1000);
  267 +}
  268 +
  269 +/*删除url中某个参数*/
  270 +function funcUrlDel(name) {
  271 + var loca = window.location;
  272 + var baseUrl = loca.origin + loca.pathname + "?";
  273 + var query = loca.search.substr(1);
  274 + if (query.indexOf(name) > -1) {
  275 + var obj = {}
  276 + var arr = query.split("&");
  277 + for (var i = 0; i < arr.length; i++) {
  278 + arr[i] = arr[i].split("=");
  279 + obj[arr[i][0]] = arr[i][1];
  280 + };
  281 + delete obj[name];
  282 + var url = baseUrl + JSON.stringify(obj).replace(/[\"\{\}]/g, "").replace(/\:/g, "=").replace(/\,/g, "&");
  283 + return url
  284 + } else {
  285 + return loca.href;
  286 + }
  287 +}
  288 +
js/dynCodePay.js
@@ -184,6 +184,11 @@ var webAppClass = { @@ -184,6 +184,11 @@ var webAppClass = {
184 //0:页面初始化获取code[webAppCode] 184 //0:页面初始化获取code[webAppCode]
185 var codeParams = { code: webAppCode, appId: appWxID }; 185 var codeParams = { code: webAppCode, appId: appWxID };
186 var openIdUrl = webAppRoot + window.webAppH5.wxGetOpenIdServer; 186 var openIdUrl = webAppRoot + window.webAppH5.wxGetOpenIdServer;
  187 + //debugger;
  188 + if (webAppCode == null || webAppCode == "") {
  189 + alertMsg(appState.codeNullTip);
  190 + return;
  191 + }
187 $btnObj.style.display = "none"; $btnLoad.style.display = "block"; 192 $btnObj.style.display = "none"; $btnLoad.style.display = "block";
188 //1:有code获取OpenId 193 //1:有code获取OpenId
189 postRequest(openIdUrl, codeParams, function (res) { 194 postRequest(openIdUrl, codeParams, function (res) {
@@ -191,7 +196,12 @@ var webAppClass = { @@ -191,7 +196,12 @@ var webAppClass = {
191 //alert(JSON.stringify(res)); 196 //alert(JSON.stringify(res));
192 if (res.code == 0) { 197 if (res.code == 0) {
193 webAppClass.getPayParams(res.data, orderID); 198 webAppClass.getPayParams(res.data, orderID);
194 - } else { 199 + }
  200 + else if (res.code == 40163) {//code been used, hints
  201 + alertMsg(appState.codeNullTip);
  202 + console.log(res.message);
  203 + }
  204 + else {
195 alertMsg(res.message); 205 alertMsg(res.message);
196 } 206 }
197 }, function (err) { 207 }, function (err) {
js/pay.js
@@ -55,7 +55,7 @@ var webAppClass = { @@ -55,7 +55,7 @@ var webAppClass = {
55 checkParkCost: function () { 55 checkParkCost: function () {
56 $btnObj.style.display = "none"; 56 $btnObj.style.display = "none";
57 $btnLoad.style.display = "block"; 57 $btnLoad.style.display = "block";
58 - if (typeof (webAppParams.queryOrderInfo) == "undefined") {//没有queryOrderInfo返回第一页 58 + if (typeof(webAppParams.queryOrderInfo) == "undefined") {//没有queryOrderInfo返回第一页
59 window.history.back(-1); 59 window.history.back(-1);
60 } 60 }
61 var tmpParams = JSON.parse(webAppParams.queryOrderInfo); 61 var tmpParams = JSON.parse(webAppParams.queryOrderInfo);
@@ -101,6 +101,13 @@ var webAppClass = { @@ -101,6 +101,13 @@ var webAppClass = {
101 //wxParams.orderId = orderID; 101 //wxParams.orderId = orderID;
102 //wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 102 //wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号
103 //wxParams.terminalSource = 3;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 103 //wxParams.terminalSource = 3;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付
  104 + //debugger;
  105 + if (webAppCode == null || webAppCode == "") {//code检测
  106 + alertMsg(appState.codeNullTip);
  107 + $btnObj.style.display = "block";
  108 + $btnLoad.style.display = "none";
  109 + return;
  110 + }
104 webAppClass.payAjaxJDK(orderID); 111 webAppClass.payAjaxJDK(orderID);
105 console.log("wxPay");//微信支付 112 console.log("wxPay");//微信支付
106 break; 113 break;
@@ -257,18 +264,29 @@ var webAppClass = { @@ -257,18 +264,29 @@ var webAppClass = {
257 //0:页面初始化获取code[webAppCode] 264 //0:页面初始化获取code[webAppCode]
258 var codeParams = { code: webAppCode, appId: appWxID }; 265 var codeParams = { code: webAppCode, appId: appWxID };
259 var openIdUrl = webAppRoot + window.webAppH5.wxGetOpenIdServer; 266 var openIdUrl = webAppRoot + window.webAppH5.wxGetOpenIdServer;
260 - //alert(openIdUrl); 267 +
261 //1:有code获取OpenId 268 //1:有code获取OpenId
262 postRequest(openIdUrl, codeParams, function (res) { 269 postRequest(openIdUrl, codeParams, function (res) {
263 //alert(JSON.stringify(res)); 270 //alert(JSON.stringify(res));
264 if (res.code == 0) { 271 if (res.code == 0) {
265 //alert(res.data); 272 //alert(res.data);
266 webAppClass.getPayParams(res.data, orderID); 273 webAppClass.getPayParams(res.data, orderID);
267 - } else { 274 + }
  275 + else if (res.code == 40163) {//code been used, hints[重复code问题]
  276 + alertMsg(appState.codeNullTip);
  277 + console.log(res.message);
  278 + $btnObj.style.display = "block";
  279 + $btnLoad.style.display = "none";
  280 + }
  281 + else {
268 alertMsg(res.message); 282 alertMsg(res.message);
  283 + $btnObj.style.display = "block";
  284 + $btnLoad.style.display = "none";
269 } 285 }
270 }, function (err) { 286 }, function (err) {
271 console.log("网络地址出错..." + openIdUrl); 287 console.log("网络地址出错..." + openIdUrl);
  288 + $btnObj.style.display = "block";
  289 + $btnLoad.style.display = "none";
272 }); 290 });
273 //2:获取支付参数 291 //2:获取支付参数
274 //function getPayParams(openId) { 292 //function getPayParams(openId) {
pay.html
@@ -15,9 +15,9 @@ @@ -15,9 +15,9 @@
15 <meta http-equiv="Expires" content="0"> 15 <meta http-equiv="Expires" content="0">
16 <link rel="stylesheet" href="css/index.css?v=0.1"> 16 <link rel="stylesheet" href="css/index.css?v=0.1">
17 <script src="config.js?v=0.1"></script> 17 <script src="config.js?v=0.1"></script>
18 - <script src="js/common.js?v=0.1"></script> 18 + <script src="js/common.js?v=0.12"></script>
19 <!--<script src="js/jweixin-1.0.0.js?v=0.1"></script>--> 19 <!--<script src="js/jweixin-1.0.0.js?v=0.1"></script>-->
20 - <script src="js/pay.js?v=0.110"></script> 20 + <script src="js/pay.js?v=0.12"></script>
21 <!--<script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js"></script>--> 21 <!--<script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.min.js"></script>-->
22 <!--<script src="config.js"></script>--> 22 <!--<script src="config.js"></script>-->
23 <!-- 23 <!--
v.txt 0 → 100644
  1 +******2019/1/18
  2 +判断code为null时提示
  3 +
  4 +******2019/1/28
  5 +未获取code验证
0 \ No newline at end of file 6 \ No newline at end of file