Commit 544f25d22aed5ecd037dc8188c9c0894526d24fe
1 parent
ed71fe63
扫码支付。。。
Showing
11 changed files
with
217 additions
and
116 deletions
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 = "/keyTopQrCodeInOutPark/noCarQRcodeInOutPark"; | @@ -38,7 +36,7 @@ webAppH5.comServer = "/keyTopQrCodeInOutPark/noCarQRcodeInOutPark"; | ||
| 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 = "/alipay/aliH5Pay"; | @@ -79,7 +77,7 @@ webAppH5.aliPayServer = "/alipay/aliH5Pay"; | ||
| 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 = "/alipay/aliH5Pay"; | @@ -97,22 +95,5 @@ webAppH5.aliPayServer = "/alipay/aliH5Pay"; | ||
| 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 | +} |
doc.txt
| 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&parkingId=1&channelId=172 | @@ -37,40 +52,15 @@ http://39.98.54.240/codepay/index.html?plNo=P11011700C&parkingId=1&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 | <!-- |