Commit a7b83e0d6a55edbb69d164023bc19f076f100842
1 parent
903c4448
动态二维码
Showing
12 changed files
with
1045 additions
and
231 deletions
billCodePay.html
0 → 100644
1 | +<!doctype html> | ||
2 | +<html lang="en"> | ||
3 | +<head> | ||
4 | + <meta charset="utf-8"> | ||
5 | + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
6 | + <meta name="theme-color" content="#000000"> | ||
7 | + <meta name="google" value="notranslate"> | ||
8 | + <meta name="format-detection" content="telephone=no"> | ||
9 | + <meta name="format-detection" content="email=no"> | ||
10 | + <meta name="apple-mobile-web-app-capable" content="yes"> | ||
11 | + <meta name="apple-mobile-web-app-status-bar-style" content="black"> | ||
12 | + <meta http-equiv="Pragma" content="no-cache"> | ||
13 | + <meta http-equiv="Cache-control" content="no-cache"> | ||
14 | + <meta http-equiv="Cache" content="no-cache"> | ||
15 | + <meta http-equiv="Expires" content="0"> | ||
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.1"></script> | ||
19 | + <script src="js/billCodePay.js?v=0.1"></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>--> | ||
22 | + <!-- | ||
23 | + Notice the use of %PUBLIC_URL% in the tags above. | ||
24 | + It will be replaced with the URL of the `public` folder during the build. | ||
25 | + Only files inside the `public` folder can be referenced from the HTML. | ||
26 | + | ||
27 | + Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will | ||
28 | + work correctly both with client-side routing and a non-root public URL. | ||
29 | + Learn how to configure a non-root public URL by running `npm run build`. | ||
30 | + --> | ||
31 | + <title>订单支付</title> | ||
32 | +</head> | ||
33 | +<body> | ||
34 | + <!--<noscript>--> | ||
35 | + <!--You need to enable JavaScript to run this app.--> | ||
36 | + <!--</noscript>--> | ||
37 | + <header id="header" class="flexBoxRow panelBgColor"> | ||
38 | + <div class="headerBox"> | ||
39 | + <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> | ||
42 | + </header> | ||
43 | + <section id="payDetail" class="panelBgColor marginTop"> | ||
44 | + <div><span>车场名称:</span><span id="parkName"></span><a id="linkPayDetail">详情+</a> </div> | ||
45 | + <div><span>停车时长:</span><span id="staytime"></span></div> | ||
46 | + <div><span>进场时间:</span><span id="inparktime"></span></div> | ||
47 | + <div><span>停车总费用:</span><span id="due"></span></div> | ||
48 | + <div><span>已支付金额:</span><span id="paid"></span></div> | ||
49 | + <div><span>优惠金额:</span><span id="discountFee"></span><span id="discountDesc"></span></div> | ||
50 | + <div><span>订单编号: </span><span id="orderNum"></span> </div> | ||
51 | + </section> | ||
52 | + <section id="section" class="marginTop"> | ||
53 | + <div class="flexBoxRow"> | ||
54 | + <span class="payWayTitle">选择支付方式</span> <span class="orderTime colorGray">出场时间: <span id="outtime"></span></span> | ||
55 | + </div> | ||
56 | + <div class="row marginTop"> | ||
57 | + <!--AliPay--> | ||
58 | + <div class="flexBoxRow" id="rowAliPay"> | ||
59 | + <img class="payIcon" src="img/aliPay.png" /> | ||
60 | + <span class="marginLeft">支付宝支付</span> | ||
61 | + <label for="aliPay" class="radio"> | ||
62 | + <span class="radio-bg"></span> | ||
63 | + <input type="radio" name="radioPayWay" id="aliPay" value="支付宝" checked="checked" /> | ||
64 | + <span class="radio-on"></span> | ||
65 | + </label> | ||
66 | + </div> | ||
67 | + <hr class="splitLine marginTop" id="splitLine" /> | ||
68 | + <!--WxPay--> | ||
69 | + <div class="flexBoxRow marginTop" id="rowWxPay"> | ||
70 | + <img class="payIcon" src="img/wxPay.png" /> | ||
71 | + <span class="marginLeft">微信支付</span> | ||
72 | + <label for="wxPay" class="radio"> | ||
73 | + <span class="radio-bg"></span> | ||
74 | + <input type="radio" name="radioPayWay" id="wxPay" value="微信" /> | ||
75 | + <span class="radio-on"></span> | ||
76 | + </label> | ||
77 | + </div> | ||
78 | + </div> | ||
79 | + </section> | ||
80 | + <footer id="footer" class="flexBoxRow marginTop"> | ||
81 | + <div class="btnOK" id="btnPayOK">确定支付</div> | ||
82 | + <img src="img/loading.gif" id="loading" style="display: none;" /> | ||
83 | + </footer> | ||
84 | + <section id="payTip" style="padding: 5px;margin-top:5px; color: #3385ff; font-size: 14px; "></section> | ||
85 | + | ||
86 | + <!-- | ||
87 | + This HTML file is a template. | ||
88 | + If you open it directly in the browser, you will see an empty page. | ||
89 | + | ||
90 | + You can add webfonts, meta tags, or analytics to this file. | ||
91 | + The build step will place the bundled scripts into the <body> tag. | ||
92 | + | ||
93 | + To begin the development, run `npm start` or `yarn start`. | ||
94 | + To create a production bundle, use `npm run build` or `yarn build`. | ||
95 | + --> | ||
96 | +</body> | ||
97 | + | ||
98 | +</html> |
config.js
@@ -5,10 +5,15 @@ | @@ -5,10 +5,15 @@ | ||
5 | */ | 5 | */ |
6 | window.webAppH5 = {}; | 6 | window.webAppH5 = {}; |
7 | 7 | ||
8 | +//微信appID | ||
9 | +var appWxID = "wx1e9001e5940605b1";//wx945eccc8163fd75b | ||
10 | + | ||
8 | /*服务器地址*/ | 11 | /*服务器地址*/ |
9 | -var webAppRoot = "http://39.98.54.240:8090"; //"http://39.98.54.240:8090"; | ||
10 | -//var webApp | ||
11 | -var webAppPayResult = "http://test.pay.renniting.cn/codepay/page/wxpayResult.html"; | 12 | +//var webAppRoot = "http://39.98.54.240:8090"; |
13 | +var webAppRoot = "http://pay.service.renniting.cn/v1"; | ||
14 | + | ||
15 | +//微信支付结果回调地址 | ||
16 | +var webAppPayResult = "http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay/page/wxpayResult.html"; | ||
12 | 17 | ||
13 | /*公共参数*/ | 18 | /*公共参数*/ |
14 | webAppH5.comParams = { | 19 | webAppH5.comParams = { |
@@ -20,7 +25,7 @@ webAppH5.comParams = { | @@ -20,7 +25,7 @@ webAppH5.comParams = { | ||
20 | token: '666' | 25 | token: '666' |
21 | } | 26 | } |
22 | 27 | ||
23 | -//小票扫码支付参数 | 28 | +//小票扫码支付参数codeType[0静态码、1小票二维码、2动态二维码] |
24 | webAppH5.dynCode = {//卫岗固定参数 | 29 | webAppH5.dynCode = {//卫岗固定参数 |
25 | direction: 1, | 30 | direction: 1, |
26 | codeType: 1, | 31 | codeType: 1, |
@@ -33,6 +38,9 @@ webAppH5.comServer = "/keyTopQrCodeInOutPark/noCarQRcodeInOutPark"; | @@ -33,6 +38,9 @@ webAppH5.comServer = "/keyTopQrCodeInOutPark/noCarQRcodeInOutPark"; | ||
33 | //缴费-微信 | 38 | //缴费-微信 |
34 | webAppH5.wxPayServer = "/weixinpay/publicUnifiedOrder"; | 39 | webAppH5.wxPayServer = "/weixinpay/publicUnifiedOrder"; |
35 | 40 | ||
41 | +//微信获取openID | ||
42 | +webAppH5.wxGetOpenIdServer = "/weixinPublicPay/getOpenIdByCode"; | ||
43 | + | ||
36 | //缴费-支付宝 | 44 | //缴费-支付宝 |
37 | webAppH5.aliPayServer = "/alipay/aliH5Pay"; | 45 | webAppH5.aliPayServer = "/alipay/aliH5Pay"; |
38 | 46 | ||
@@ -71,7 +79,7 @@ webAppH5.aliPayServer = "/alipay/aliH5Pay"; | @@ -71,7 +79,7 @@ webAppH5.aliPayServer = "/alipay/aliH5Pay"; | ||
71 | 79 | ||
72 | //小票二维码出场 | 80 | //小票二维码出场 |
73 | //http://39.98.54.240/codepay/index.html?appid=0&lotId=1&payConfigId=2&receiptNo=3 | 81 | //http://39.98.54.240/codepay/index.html?appid=0&lotId=1&payConfigId=2&receiptNo=3 |
74 | -//http://localhost:1260/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& |
75 | 83 | ||
76 | 84 | ||
77 | //首页 | 85 | //首页 |
@@ -89,5 +97,22 @@ webAppH5.aliPayServer = "/alipay/aliH5Pay"; | @@ -89,5 +97,22 @@ webAppH5.aliPayServer = "/alipay/aliH5Pay"; | ||
89 | 97 | ||
90 | //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 | 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 |
91 | 99 | ||
100 | +/*正式环境前缀*/ | ||
101 | +//http://wxgzh.renniting.cn/wechatwuxi/DEV/Threewf/codepay | ||
102 | + | ||
103 | +/* | ||
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 | ||
92 | 115 | ||
116 | +/*类型1: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 | ||
93 | 118 |
doc.txt
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 | 1 | ||
18 | 2 | ||
19 | 3 | ||
@@ -51,3 +35,38 @@ http://39.98.54.240/codepay/index.html?plNo=P11011700C&parkingId=1&channelId=172 | @@ -51,3 +35,38 @@ http://39.98.54.240/codepay/index.html?plNo=P11011700C&parkingId=1&channelId=172 | ||
51 | //测试服务器出场首页 | 35 | //测试服务器出场首页 |
52 | http://39.98.54.240/codepay/index.html?plNo=P11011700C&parkingId=1&channelId=172198243&direction=1&codeType=0&expireDate=expireDate&extendData=extendData | 36 | http://39.98.54.240/codepay/index.html?plNo=P11011700C&parkingId=1&channelId=172198243&direction=1&codeType=0&expireDate=expireDate&extendData=extendData |
53 | 37 | ||
38 | + | ||
39 | + | ||
40 | +说明: | ||
41 | +支付宝:后台返回form表单,直接支付,简单。 | ||
42 | +微信支付麻烦,1服务号需要配置支付目录;2:获取code;3:获取openid;4:获取参数;5:发起支付; JSAPI支付流程 | ||
43 | + | ||
44 | +pay.html,先校验订单,在发起请求 | ||
45 | + | ||
46 | +//小票固定参数 | ||
47 | +[billCodePay.html,扫码二维码,纸质] | ||
48 | +对应关系: | ||
49 | +lotId -->parkingId 停车场编号 | ||
50 | +receiptNo --> carNumber 车牌号 | ||
51 | +direction 固定 1 | ||
52 | +codeType 固定 1 | ||
53 | +terminalSource 固定 7 | ||
54 | +channelId 固定 小票二维码 | ||
55 | + | ||
56 | + | ||
57 | +//动态二维码[dynCodePay.html] | ||
58 | +String qrcodeType;//2-动态二维码 | ||
59 | +private Boolean isNeedPay=true; | ||
60 | +private String orderId;//订单号 | ||
61 | +private String parkName;//停车场名称 | ||
62 | +private String parkCode;//停车场编号 | ||
63 | +private String inparktime;//进场时间 格式:yyyy-MM-dd HH:mm:ss | ||
64 | +private String outtime;//出场时间 格式:yyyy-MM-dd HH:mm:ss | ||
65 | +private String staytime;//停车时长1 | ||
66 | +private String orderFee;//本次出场实际应付金额(减去折扣,优惠券等之后的应付金额)分 | ||
67 | +private String plateno;// 车牌号 | ||
68 | + | ||
69 | +?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 | ||
70 | + | ||
71 | + | ||
72 | + |
dynCodePay.html
@@ -13,12 +13,11 @@ | @@ -13,12 +13,11 @@ | ||
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"> | ||
17 | - <script src="config.js?v=0.1"></script> | ||
18 | - <script src="js/common.js?v=0.1"></script> | ||
19 | - <script src="js/dynCodePay.js?v=0.1"></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>--> | 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> | ||
20 | + <!--<script src="config.js"></script>--> | ||
22 | <!-- | 21 | <!-- |
23 | Notice the use of %PUBLIC_URL% in the tags above. | 22 | Notice the use of %PUBLIC_URL% in the tags above. |
24 | It will be replaced with the URL of the `public` folder during the build. | 23 | It will be replaced with the URL of the `public` folder during the build. |
@@ -44,10 +43,10 @@ | @@ -44,10 +43,10 @@ | ||
44 | <div><span>车场名称:</span><span id="parkName"></span><a id="linkPayDetail">详情+</a> </div> | 43 | <div><span>车场名称:</span><span id="parkName"></span><a id="linkPayDetail">详情+</a> </div> |
45 | <div><span>停车时长:</span><span id="staytime"></span></div> | 44 | <div><span>停车时长:</span><span id="staytime"></span></div> |
46 | <div><span>进场时间:</span><span id="inparktime"></span></div> | 45 | <div><span>进场时间:</span><span id="inparktime"></span></div> |
47 | - <div><span>停车总费用:</span><span id="due"></span></div> | ||
48 | - <div><span>已支付金额:</span><span id="paid"></span></div> | ||
49 | - <div><span>优惠金额:</span><span id="discountFee"></span><span id="discountDesc"></span></div> | ||
50 | - <div><span>订单编号: </span><span id="orderNum">1234567890</span> </div> | 46 | + <!--<div><span>停车总费用:</span><span id="due"></span></div>--> |
47 | + <!--<div><span>已支付金额:</span><span id="paid"></span></div>--> | ||
48 | + <!--<div><span>优惠金额:</span><span id="discountFee"></span><span id="discountDesc"></span></div>--> | ||
49 | + <div><span>订单编号: </span><span id="orderNum"></span> </div> | ||
51 | </section> | 50 | </section> |
52 | <section id="section" class="marginTop"> | 51 | <section id="section" class="marginTop"> |
53 | <div class="flexBoxRow"> | 52 | <div class="flexBoxRow"> |
@@ -81,18 +80,8 @@ | @@ -81,18 +80,8 @@ | ||
81 | <div class="btnOK" id="btnPayOK">确定支付</div> | 80 | <div class="btnOK" id="btnPayOK">确定支付</div> |
82 | <img src="img/loading.gif" id="loading" style="display: none;" /> | 81 | <img src="img/loading.gif" id="loading" style="display: none;" /> |
83 | </footer> | 82 | </footer> |
84 | - <section id="payTip" style="padding: 5px;margin-top:5px; color: #3385ff; font-size: 14px; "></section> | 83 | + <!--<section id="payTip" style="padding: 5px;margin-top:5px; color: #3385ff; font-size: 14px; "></section>--> |
85 | 84 | ||
86 | - <!-- | ||
87 | - This HTML file is a template. | ||
88 | - If you open it directly in the browser, you will see an empty page. | ||
89 | - | ||
90 | - You can add webfonts, meta tags, or analytics to this file. | ||
91 | - The build step will place the bundled scripts into the <body> tag. | ||
92 | - | ||
93 | - To begin the development, run `npm start` or `yarn start`. | ||
94 | - To create a production bundle, use `npm run build` or `yarn build`. | ||
95 | - --> | ||
96 | </body> | 85 | </body> |
97 | 86 | ||
98 | </html> | 87 | </html> |
index.html
@@ -66,16 +66,22 @@ | @@ -66,16 +66,22 @@ | ||
66 | } | 66 | } |
67 | //type[fail、sucesss] | 67 | //type[fail、sucesss] |
68 | function getResponse(params) { | 68 | function getResponse(params) { |
69 | + //debugger; | ||
69 | var direction = params.direction;//direction=0 [通行方向 入:0,1:出 必填] | 70 | var direction = params.direction;//direction=0 [通行方向 入:0,1:出 必填] |
70 | var queryParams = parseParams(params); | 71 | var queryParams = parseParams(params); |
71 | - //首先判断是否小票二维码标识位lotId | ||
72 | - if (typeof(params.lotId)!="undefined") { | ||
73 | - window.location.href = "dynCodePay.html?" + queryParams; | 72 | + //小票二维码特殊处理[不带codeType] |
73 | + if (typeof(params.lotId) != "undefined") { | ||
74 | + window.location.href = "billCodePay.html?" + queryParams; | ||
74 | } else { | 75 | } else { |
75 | - if (direction == 0) {//入口 | ||
76 | - window.location.href = "page/in.html?" + queryParams; | ||
77 | - } else {//出口 | ||
78 | - window.location.href = "page/out.html?" + queryParams; | 76 | + //跳转标识codeType[0静态码、1小票二维码、2动态二维码] |
77 | + if (params.codeType == 2) { | ||
78 | + window.location.href = "dynCodePay.html?" + queryParams; | ||
79 | + } else { | ||
80 | + if (direction == 0) {//入口 | ||
81 | + window.location.href = "page/in.html?" + queryParams; | ||
82 | + } else {//出口 | ||
83 | + window.location.href = "page/out.html?" + queryParams; | ||
84 | + } | ||
79 | } | 85 | } |
80 | } | 86 | } |
81 | } | 87 | } |
js/billCodePay.js
0 → 100644
1 | +/* | ||
2 | +@songcxa | ||
3 | +@2018-12-14 | ||
4 | +@小票动态扫码移动支付 | ||
5 | +*/ | ||
6 | +var webAppParams = null; | ||
7 | +var $btnObj = null; | ||
8 | +var $btnLoad = null; | ||
9 | +var webAppCode = null;//如果是微信,先获取微信code | ||
10 | +window.onload = function () { | ||
11 | + //var root = document.getElementById("root"); | ||
12 | + $btnObj = document.getElementById("btnPayOK"); | ||
13 | + $btnLoad = document.getElementById("loading"); | ||
14 | + $linkPayDetail = getObjectByID("linkPayDetail"); | ||
15 | + $linkPayDetail.onclick = webAppClass.linkPayDetailClick; | ||
16 | + var webRoot = window.location.href; | ||
17 | + //当前客户端浏览器模式[微信、支付宝、其他] | ||
18 | + webAppClass.clientBrowser(); | ||
19 | + //绑定事件 | ||
20 | + var ali = document.getElementById("rowAliPay"); | ||
21 | + var wx = document.getElementById("rowWxPay"); | ||
22 | + ali.onclick = webAppClass.aliClick; | ||
23 | + wx.onclick = webAppClass.wxClick; | ||
24 | + $btnObj.onclick = webAppClass.okClick; | ||
25 | + document.getElementById("payTip").innerHTML = ""; | ||
26 | + //参数 | ||
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(); | ||
38 | + var state = clientBrowserEx(); | ||
39 | + if (state == "wxPay") { | ||
40 | + webAppCode = webAppClass.getCode(); | ||
41 | + } | ||
42 | +} | ||
43 | +/**/ | ||
44 | +var webAppClass = { | ||
45 | + //appid={0}&lotId={1}&payConfigId={2}&receiptNo= | ||
46 | + init: function (params) { | ||
47 | + var urlParams = params; | ||
48 | + var newParams = urlParams || {}; | ||
49 | + $btnObj.style.display = "none"; | ||
50 | + $btnLoad.style.display = "block"; | ||
51 | + newParams.terminalSource = "7";//1:任你听 3:微信公共号 4:云平台 7:H5 | ||
52 | + //var tmpParams = Object.assign(params, window.webAppH5.comParams, window.webAppH5.appOut); | ||
53 | + newParams.parkingId = params.lotId; | ||
54 | + newParams.carNumber = params.receiptNo; | ||
55 | + var tmpParams = Object.assign(newParams, window.webAppH5.comParams, window.webAppH5.dynCode); | ||
56 | + this.initRequest(webAppRoot + window.webAppH5.comServer, tmpParams, "init"); | ||
57 | + }, | ||
58 | + initRequest: function (url, params, init) { | ||
59 | + var btnObj = $btnObj; | ||
60 | + postRequest(url, params, function (res) { | ||
61 | + btnObj.style.display = "block"; | ||
62 | + $btnLoad.style.display = "none"; | ||
63 | + if (res.code == 0) {//进场 | ||
64 | + //alertMsg("出场成功"); | ||
65 | + if (res.data) { | ||
66 | + var tmpObj = res.data; | ||
67 | + //判断是否需要支付 | ||
68 | + if (tmpObj.needPay) { | ||
69 | + //var queryParams = parseParams(tmpObj); | ||
70 | + //window.location.href = "../pay.html?" + queryParams; | ||
71 | + webAppParams = tmpObj; | ||
72 | + webAppClass.setUI(tmpObj); | ||
73 | + } else { | ||
74 | + var tipStr = "无需缴费,欢迎下次光临"; | ||
75 | + alertMsg(tipStr); | ||
76 | + } | ||
77 | + } else { | ||
78 | + alertMsg("没有找到订单"); | ||
79 | + } | ||
80 | + } else {//其他情况如【该卡号场内已存在】 | ||
81 | + console.log(res.message); alertMsg(res.message); | ||
82 | + if ((init) != "init") { alertMsg(res.message); } | ||
83 | + } | ||
84 | + }, function (err) { | ||
85 | + console.log("网络服务超时..." + url); | ||
86 | + alertMsg("网络服务超时"); | ||
87 | + btnObj.style.display = "block"; | ||
88 | + $btnLoad.style.display = "none"; | ||
89 | + }); | ||
90 | + }, | ||
91 | + //OK | ||
92 | + okClick: function (ev) { | ||
93 | + document.getElementById("payTip").innerHTML = ""; | ||
94 | + if (webAppParams == null) { | ||
95 | + alertMsg("暂无订单信息");return; | ||
96 | + } | ||
97 | + //先校验停车费用后缴费提交 | ||
98 | + webAppClass.checkParkCost(); | ||
99 | + }, | ||
100 | + //校验该订单当前支付时的费用(排除扫描订单后不支付时长) | ||
101 | + checkParkCost: function () { | ||
102 | + $btnObj.style.display = "none"; | ||
103 | + $btnLoad.style.display = "block"; | ||
104 | + if (typeof (webAppParams.queryOrderInfo) == "undefined") {//没有queryOrderInfo返回第一页 | ||
105 | + window.history.back(-1); | ||
106 | + } | ||
107 | + var tmpParams = JSON.parse(webAppParams.queryOrderInfo); | ||
108 | + var url = webAppRoot + window.webAppH5.comServer; | ||
109 | + postRequest(url, tmpParams, function (res) { | ||
110 | + //btnObj.style.display = "block"; //$btnLoad.style.display = "none"; | ||
111 | + //$btnObj.style.display = "block"; | ||
112 | + if (res.code == 0) {//进场 | ||
113 | + var tmpObj = res.data; | ||
114 | + if (tmpObj) { | ||
115 | + webAppClass.setUI(tmpObj); | ||
116 | + webAppParams = tmpObj;//重新赋值 | ||
117 | + webAppClass.okPay(tmpObj);//唤醒支付 | ||
118 | + } else { | ||
119 | + alertMsg("没有找到相应订单"); | ||
120 | + } | ||
121 | + } else {//其他情况如【该卡号场内已存在】 | ||
122 | + $btnLoad.style.display = "none"; | ||
123 | + $btnObj.style.display = "block"; | ||
124 | + console.log(res.message); alertMsg(res.message); | ||
125 | + } | ||
126 | + }, function (err) { | ||
127 | + console.log("网络服务超时..." + url); | ||
128 | + alertMsg("网络服务超时"); | ||
129 | + $btnLoad.style.display = "none"; | ||
130 | + $btnObj.style.display = "block"; | ||
131 | + //$btnLoad.style.display = "none"; | ||
132 | + }); | ||
133 | + }, | ||
134 | + | ||
135 | + //确定支付 | ||
136 | + okPay: function (params) { | ||
137 | + var orderID = params.orderId;//订单号 | ||
138 | + //var moneyID = document.getElementById("sumMoney").innerHTML = webAppParams.orderId;//订单号 | ||
139 | + var root = webAppRoot; | ||
140 | + //第一首先判断当前哪种浏览器方式[微信内置、支付宝内置、第三方浏览器] | ||
141 | + var clientType = clientBrowserEx(); | ||
142 | + switch (clientType) { | ||
143 | + case "wxPay"://微信[内置浏览器] | ||
144 | + webAppClass.payAjaxJDK(orderID); | ||
145 | + console.log("wxPay");//微信支付 | ||
146 | + break; | ||
147 | + case "aliPay"://支付宝 | ||
148 | + console.log("aliPay"); | ||
149 | + //订单号 | ||
150 | + var obj = {}; | ||
151 | + //this.payAjax(url, { orderId: "11111", price: 0.01 }); | ||
152 | + var aliPay = webAppH5.aliPayServer; | ||
153 | + var aliParams = webAppH5.comParams; | ||
154 | + aliParams.orderId = orderID; | ||
155 | + aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
156 | + aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
157 | + aliParams.paySrcType = 101;//101停车支付 | ||
158 | + webAppClass.payAliAjax(root + aliPay, aliParams); | ||
159 | + break; | ||
160 | + default://第三方浏览器other[] | ||
161 | + //默认支付宝 | ||
162 | + if (document.getElementById("aliPay").checked) { | ||
163 | + console.log("aliPay"); | ||
164 | + //订单号 | ||
165 | + var obj = {}; | ||
166 | + //this.payAjax(url, { orderId: "11111", price: 0.01 }); | ||
167 | + var aliPay = webAppH5.aliPayServer; | ||
168 | + var aliParams = webAppH5.comParams; | ||
169 | + aliParams.orderId = orderID; | ||
170 | + aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
171 | + aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
172 | + aliParams.paySrcType = 101;//101停车支付 | ||
173 | + webAppClass.payAliAjax(root + aliPay, aliParams); | ||
174 | + } else {//微信页面支付 | ||
175 | + var url = " https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096"; | ||
176 | + //window.location.href = url; | ||
177 | + var wxPay = webAppH5.wxPayServer; | ||
178 | + var wxParams = webAppH5.comParams; | ||
179 | + wxParams.orderId = orderID; | ||
180 | + wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
181 | + wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
182 | + webAppClass.payAjax(root + wxPay, wxParams); | ||
183 | + console.log("wxPay"); | ||
184 | + } | ||
185 | + break; | ||
186 | + } | ||
187 | + }, | ||
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 | + }, | ||
207 | + //Ali | ||
208 | + aliClick: function (ev) { | ||
209 | + console.log("AliClick"); | ||
210 | + document.getElementById("aliPay").checked = true; | ||
211 | + ev.preventDefault(); | ||
212 | + }, | ||
213 | + //Wx | ||
214 | + wxClick: function (ev) { | ||
215 | + console.log("wxClick"); | ||
216 | + document.getElementById("wxPay").checked = true; | ||
217 | + ev.preventDefault(); | ||
218 | + }, | ||
219 | + //浏览器 | ||
220 | + clientBrowser: function () { | ||
221 | + if (/MicroMessenger/.test(window.navigator.userAgent)) { | ||
222 | + console.log("微信客户端"); | ||
223 | + this.switchShow("wxPay"); | ||
224 | + } else if (/AlipayClient/.test(window.navigator.userAgent)) { | ||
225 | + console.log("支付宝客户端"); | ||
226 | + this.switchShow("aliPay"); | ||
227 | + } else { | ||
228 | + console.log("其他浏览器"); | ||
229 | + this.switchShow("other"); | ||
230 | + } | ||
231 | + }, | ||
232 | + //根据浏览器显示内容[aliPay、wxPay、other] | ||
233 | + switchShow: function (type) { | ||
234 | + var aliObj = document.getElementById("rowAliPay"); | ||
235 | + var wxObj = document.getElementById("rowWxPay"); | ||
236 | + var lineObj = document.getElementById("splitLine"); | ||
237 | + switch (type) { | ||
238 | + case "aliPay": | ||
239 | + lineObj.style.display = "none"; | ||
240 | + wxObj.style.display = "none"; | ||
241 | + document.getElementById("aliPay").checked = true; | ||
242 | + break; | ||
243 | + case "wxPay": | ||
244 | + lineObj.style.display = "none"; | ||
245 | + aliObj.style.display = "none"; | ||
246 | + document.getElementById("wxPay").checked = true; | ||
247 | + break; | ||
248 | + default://其他浏览器[浏览器暂时屏蔽微信] | ||
249 | + lineObj.style.display = "none"; | ||
250 | + wxObj.style.display = "none"; | ||
251 | + document.getElementById("aliPay").checked = true; | ||
252 | + break; | ||
253 | + } | ||
254 | + }, | ||
255 | + | ||
256 | + //异步请求-微信 | ||
257 | + payAjax: function (url, params) { | ||
258 | + var btnOBj = $btnObj; | ||
259 | + postRequest(url, params, function (res) { | ||
260 | + btnOBj.style.display = "block"; | ||
261 | + $btnLoad.style.display = "none"; | ||
262 | + //debugger; | ||
263 | + if (res.code == 0) {//进场 | ||
264 | + if (res.data) { | ||
265 | + var tmpObj = res.data; | ||
266 | + if (typeof (tmpObj.mwebUrl) != "undefined") { | ||
267 | + window.location.href = tmpObj.mwebUrl + "&redirect_url=" + webAppPayResult; | ||
268 | + } else { | ||
269 | + alertMsg("没有返回支付地址mwebUrl"); | ||
270 | + } | ||
271 | + console.log(JSON.stringify(tmpObj)); | ||
272 | + } else { | ||
273 | + alertMsg("没有找到返回值"); | ||
274 | + } | ||
275 | + } else {//其他情况如【该卡号场内已存在】 | ||
276 | + console.log(res.message); | ||
277 | + alertMsg(res.message); | ||
278 | + } | ||
279 | + }, function (err) { | ||
280 | + console.log("网络地址出错..."); | ||
281 | + alertMsg("网络地址出错..."); | ||
282 | + btnOBj.style.display = "block"; | ||
283 | + }); | ||
284 | + }, | ||
285 | + | ||
286 | + payAjaxJDK: function (orderID) { | ||
287 | + var btnOBj = $btnObj; | ||
288 | + //0:页面初始化获取code[webAppCode] | ||
289 | + var codeParams = { code: webAppCode, appId: appWxID }; | ||
290 | + var openIdUrl = webAppRoot + window.webAppH5.wxGetOpenIdServer; | ||
291 | + //alert(openIdUrl); | ||
292 | + //1:有code获取OpenId | ||
293 | + postRequest(openIdUrl, codeParams, function (res) { | ||
294 | + //alert(JSON.stringify(res)); | ||
295 | + if (res.code == 0) { | ||
296 | + //alert(res.data); | ||
297 | + webAppClass.getPayParams(res.data, orderID); | ||
298 | + } else { | ||
299 | + alertMsg(res.message); | ||
300 | + } | ||
301 | + }, function (err) { | ||
302 | + console.log("网络地址出错..." + openIdUrl); | ||
303 | + }); | ||
304 | + //2:获取支付参数 | ||
305 | + //function getPayParams(openId) { | ||
306 | + | ||
307 | + //} | ||
308 | + }, | ||
309 | + getPayParams: function (openId, orderID) { | ||
310 | + var wxPay = window.webAppH5.wxPayServer; | ||
311 | + var wxParams = window.webAppH5.comParams; | ||
312 | + wxParams.orderId = orderID; | ||
313 | + wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
314 | + wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
315 | + //webAppClass.payAjax(root + wxPay, wxParams); | ||
316 | + wxParams.openId = openId; | ||
317 | + wxParams.appId = appWxID; | ||
318 | + var payParamsUrl = webAppRoot + window.webAppH5.wxPayServer; | ||
319 | + //alert(payParamsUrl);alert(orderID); | ||
320 | + postRequest(payParamsUrl, wxParams, function (res) { | ||
321 | + $btnObj.style.display = "block"; | ||
322 | + $btnLoad.style.display = "none"; | ||
323 | + //debugger; | ||
324 | + if (res.code == 0) {//进场 | ||
325 | + //alertMsg("出场成功"); | ||
326 | + if (res.data) { | ||
327 | + var tmpObj = res.data; | ||
328 | + webAppClass.weixinJSBridge(res.data); | ||
329 | + console.log(JSON.stringify(tmpObj)); | ||
330 | + //alert(JSON.stringify(tmpObj)); | ||
331 | + } else { | ||
332 | + alertMsg("没有找到返回值"); | ||
333 | + } | ||
334 | + } else { | ||
335 | + $btnObj.style.display = "block"; | ||
336 | + $btnLoad.style.display = "none"; | ||
337 | + console.log(res.message); alertMsg(res.message); | ||
338 | + } | ||
339 | + }, function (err) { | ||
340 | + console.log("网络地址出错..."); | ||
341 | + alertMsg("网络地址出错..." + payParamsUrl); | ||
342 | + $btnLoad.style.display = "none"; | ||
343 | + $btnObj.style.display = "block"; | ||
344 | + }); | ||
345 | + }, | ||
346 | + //调用微信内置WeixinJSBridge对象发起支付 | ||
347 | + weixinJSBridge: function (params) { | ||
348 | + function onBridgeReady() { | ||
349 | + WeixinJSBridge.invoke( | ||
350 | + 'getBrandWCPayRequest', params, | ||
351 | + function (res) { | ||
352 | + //alert(res.err_msg); | ||
353 | + if (res.err_msg == "get_brand_wcpay_request:ok") { | ||
354 | + // 使用以上方式判断前端返回,微信团队郑重提示: | ||
355 | + //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 | ||
356 | + window.location.href = webAppPayResult + "?trade_no=" + "success"; | ||
357 | + } | ||
358 | + else if (res.err_msg == 'get_brand_wcpay_request:cancel') { | ||
359 | + window.location.href = webAppPayResult + "?trade_no=" + "fail"; | ||
360 | + } | ||
361 | + else { | ||
362 | + alertMsg(JSON.stringify(res)); | ||
363 | + //alert(res.err_msg); | ||
364 | + } | ||
365 | + }); | ||
366 | + } | ||
367 | + if (typeof WeixinJSBridge == "undefined") { | ||
368 | + if (document.addEventListener) { | ||
369 | + document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); | ||
370 | + } else if (document.attachEvent) { | ||
371 | + document.attachEvent('WeixinJSBridgeReady', onBridgeReady); | ||
372 | + document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); | ||
373 | + } | ||
374 | + } else { | ||
375 | + onBridgeReady(); | ||
376 | + } | ||
377 | + }, | ||
378 | + //异步请求-支付宝 | ||
379 | + payAliAjax: function (url, params) { | ||
380 | + var btnOBj = $btnObj; | ||
381 | + postRequest(url, params, function (res) { | ||
382 | + btnOBj.style.display = "block"; | ||
383 | + $btnLoad.style.display = "none"; | ||
384 | + if (res.code == 0) {//进场 | ||
385 | + document.write(res.data);//打开支付表单 | ||
386 | + } else {//其他情况如【该卡号场内已存在】 | ||
387 | + console.log(res.message); | ||
388 | + alertMsg(res.message); | ||
389 | + } | ||
390 | + }, function (err) { | ||
391 | + console.log("网络地址出错...");alertMsg("网络地址出错..."); | ||
392 | + $btnLoad.style.display = "none"; | ||
393 | + btnOBj.style.display = "block"; | ||
394 | + }); | ||
395 | + }, | ||
396 | + | ||
397 | + //设置UI | ||
398 | + setUI: function (params) { | ||
399 | + var $carNum = getObjectByID("carNum"),//车牌号 | ||
400 | + $orderNum = getObjectByID("orderNum"),//订单号 | ||
401 | + $sumMoney = getObjectByID("sumMoney"),//实际应付金额 | ||
402 | + $outtime = getObjectByID("outtime"),//实际出场时间 | ||
403 | + $payTip = getObjectByID("payTip"),//支付提示 | ||
404 | + | ||
405 | + $parkName = getObjectByID("parkName"),//车场名称 | ||
406 | + $inparktime = getObjectByID("inparktime"),//进场时间 | ||
407 | + $staytime = getObjectByID("staytime"),//停车时长 | ||
408 | + $due = getObjectByID("due"),//停车总费用 | ||
409 | + | ||
410 | + $paid = getObjectByID("paid"),//已支付金额 | ||
411 | + $discountDesc = getObjectByID("discountDesc"),//8折优惠折扣费用 | ||
412 | + $discountFee = getObjectByID("discountFee");//优惠金额 | ||
413 | + | ||
414 | + if (params != null && params!="") { | ||
415 | + var price = keepTwoDecimalFull((params.orderFee / 100));//(params.orderFee / 100); | ||
416 | + $carNum.innerHTML = params.plateno;//手机号 | ||
417 | + $orderNum.innerHTML = params.orderId;//订单号 | ||
418 | + $sumMoney.innerHTML = price;///params.orderFee//缴费金额 | ||
419 | + $outtime.innerHTML = params.outtime;//实际出场时间 | ||
420 | + //.appOrderTimeout | ||
421 | + $payTip.innerHTML = "注意: " + params.appOrderTimeout;//请在支付完成10分钟内出场,如超时未出场,会继续计费。 | ||
422 | + | ||
423 | + $parkName.innerHTML = params.parkName; | ||
424 | + $inparktime.innerHTML = params.inparktime; | ||
425 | + $staytime.innerHTML = formatSeconds(params.staytime); | ||
426 | + | ||
427 | + $due.innerHTML = keepTwoDecimalFull((params.due / 100));//停车总费用 | ||
428 | + $paid.innerHTML = params.paid; | ||
429 | + $discountFee.innerHTML = keepTwoDecimalFull((params.discountFee / 100));//优惠金额 | ||
430 | + $discountDesc.innerHTML = params.discountDesc; | ||
431 | + } else { | ||
432 | + console.log("没有接受到参数"); | ||
433 | + } | ||
434 | + }, | ||
435 | + | ||
436 | + //查看详情 | ||
437 | + linkPayDetailClick: function (ev) { | ||
438 | + var $payDetail = getObjectByID("payDetail"); | ||
439 | + var $linkPayDetail = getObjectByID("linkPayDetail"); | ||
440 | + if ($linkPayDetail.innerHTML == "详情+") { | ||
441 | + $linkPayDetail.innerHTML = "详情-"; | ||
442 | + $payDetail.style.height = "195px"; | ||
443 | + } else { | ||
444 | + $linkPayDetail.innerHTML = "详情+"; | ||
445 | + $payDetail.style.height = "55px"; | ||
446 | + } | ||
447 | + } | ||
448 | +} | ||
0 | \ No newline at end of file | 449 | \ No newline at end of file |
js/common.js
@@ -215,4 +215,24 @@ function checkCharAndNumber(ev) { | @@ -215,4 +215,24 @@ function checkCharAndNumber(ev) { | ||
215 | //this.value = this.value.toUpperCase(); | 215 | //this.value = this.value.toUpperCase(); |
216 | var tmpValue = this.value.replace(/[^\d|chun]/g, ''); | 216 | var tmpValue = this.value.replace(/[^\d|chun]/g, ''); |
217 | this.value = this.value.toUpperCase(); | 217 | this.value = this.value.toUpperCase(); |
218 | -} | ||
219 | \ No newline at end of file | 218 | \ No newline at end of file |
219 | +} | ||
220 | + | ||
221 | +/*检测当前app浏览器*/ | ||
222 | +function clientBrowserEx() { | ||
223 | + var state = "other";//default | ||
224 | + if (/MicroMessenger/.test(window.navigator.userAgent)) { | ||
225 | + console.log("微信客户端"); | ||
226 | + //this.switchShow("wxPay"); | ||
227 | + state = "wxPay"; | ||
228 | + } else if (/AlipayClient/.test(window.navigator.userAgent)) { | ||
229 | + console.log("支付宝客户端"); | ||
230 | + //this.switchShow("aliPay"); | ||
231 | + state = "aliPay"; | ||
232 | + } else { | ||
233 | + console.log("其他浏览器"); | ||
234 | + state = "other"; | ||
235 | + } | ||
236 | + return state; | ||
237 | +} | ||
238 | + | ||
239 | + |
js/dynCodePay.js
1 | /* | 1 | /* |
2 | @songcxa | 2 | @songcxa |
3 | -@2018-12-14 | 3 | +@2018-12-26 |
4 | @小票动态扫码移动支付 | 4 | @小票动态扫码移动支付 |
5 | +@动态二维码url包括订单、金额、进出场时间、停车场编号、车牌号等 | ||
5 | */ | 6 | */ |
6 | -var webAppParams = null; | 7 | +var webAppParams = null;//URL参数 |
7 | var $btnObj = null; | 8 | var $btnObj = null; |
8 | var $btnLoad = null; | 9 | var $btnLoad = null; |
9 | -//var $btnLoad = document.getElementById("loading"); | 10 | +var webAppCode = null;//如果是微信,先获取微信code |
10 | window.onload = function () { | 11 | window.onload = function () { |
11 | - //var root = document.getElementById("root"); | ||
12 | - $btnObj = document.getElementById("btnPayOK"); | ||
13 | - $btnLoad = document.getElementById("loading"); | 12 | + $btnObj = getObjectByID("btnPayOK"); |
13 | + $btnLoad = getObjectByID("loading"); | ||
14 | $linkPayDetail = getObjectByID("linkPayDetail"); | 14 | $linkPayDetail = getObjectByID("linkPayDetail"); |
15 | $linkPayDetail.onclick = webAppClass.linkPayDetailClick; | 15 | $linkPayDetail.onclick = webAppClass.linkPayDetailClick; |
16 | var webRoot = window.location.href; | 16 | var webRoot = window.location.href; |
17 | //当前客户端浏览器模式[微信、支付宝、其他] | 17 | //当前客户端浏览器模式[微信、支付宝、其他] |
18 | webAppClass.clientBrowser(); | 18 | webAppClass.clientBrowser(); |
19 | //绑定事件 | 19 | //绑定事件 |
20 | - var ali = document.getElementById("rowAliPay"); | ||
21 | - var wx = document.getElementById("rowWxPay"); | 20 | + var ali = getObjectByID("rowAliPay"); |
21 | + var wx = getObjectByID("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) { | 28 | if (tmpURLparams != null) { |
29 | - //设置UI参数 | ||
30 | - //webAppClass.setUI(webAppParams); | ||
31 | - webAppClass.init(tmpURLparams); | 29 | + webAppParams = tmpURLparams; |
30 | + webAppClass.setUI(webAppParams); | ||
31 | + //webAppClass.init(tmpURLparams); //设置UI参数 | ||
32 | } else { | 32 | } else { |
33 | alertMsg("没有接收到url参数信息"); | 33 | alertMsg("没有接收到url参数信息"); |
34 | } | 34 | } |
35 | + | ||
36 | + //获取微信code | ||
37 | + //webAppClass.getCode(); | ||
38 | + var state = clientBrowserEx(); | ||
39 | + if (state == "wxPay") { | ||
40 | + webAppCode = webAppClass.getCode(); | ||
41 | + } | ||
35 | } | 42 | } |
36 | /**/ | 43 | /**/ |
37 | var webAppClass = { | 44 | var webAppClass = { |
38 | - //appid={0}&lotId={1}&payConfigId={2}&receiptNo= | ||
39 | - init: function (params) { | ||
40 | - var urlParams = params; | ||
41 | - var newParams = urlParams || {}; | ||
42 | - $btnObj.style.display = "none"; | ||
43 | - $btnLoad.style.display = "block"; | ||
44 | - newParams.terminalSource = "7";//1:任你听 3:微信公共号 4:云平台 7:H5 | ||
45 | - //var tmpParams = Object.assign(params, window.webAppH5.comParams, window.webAppH5.appOut); | ||
46 | - newParams.parkingId = params.lotId; | ||
47 | - newParams.carNumber = params.receiptNo; | ||
48 | - var tmpParams = Object.assign(newParams, window.webAppH5.comParams, window.webAppH5.dynCode); | ||
49 | - this.initRequest(webAppRoot + window.webAppH5.comServer, tmpParams, "init"); | ||
50 | - }, | ||
51 | - initRequest: function (url, params, init) { | ||
52 | - var btnObj = $btnObj; | ||
53 | - postRequest(url, params, function (res) { | ||
54 | - btnObj.style.display = "block"; | ||
55 | - $btnLoad.style.display = "none"; | ||
56 | - if (res.code == 0) {//进场 | ||
57 | - //alertMsg("出场成功"); | ||
58 | - if (res.data) { | ||
59 | - var tmpObj = res.data; | ||
60 | - //判断是否需要支付 | ||
61 | - if (tmpObj.needPay) { | ||
62 | - //var queryParams = parseParams(tmpObj); | ||
63 | - //window.location.href = "../pay.html?" + queryParams; | ||
64 | - webAppParams = tmpObj; | ||
65 | - webAppClass.setUI(tmpObj); | ||
66 | - } else { | ||
67 | - var tipStr = "无需缴费,欢迎下次光临"; | ||
68 | - alertMsg(tipStr); | ||
69 | - } | ||
70 | - } else { | ||
71 | - alertMsg("没有找到订单"); | ||
72 | - } | ||
73 | - } else {//其他情况如【该卡号场内已存在】 | ||
74 | - console.log(res.message); alertMsg(res.message); | ||
75 | - if ((init) != "init") { alertMsg(res.message); } | ||
76 | - } | ||
77 | - }, function (err) { | ||
78 | - console.log("网络服务超时..." + url); | ||
79 | - alertMsg("网络服务超时"); | ||
80 | - btnObj.style.display = "block"; | ||
81 | - $btnLoad.style.display = "none"; | ||
82 | - }); | ||
83 | - }, | ||
84 | //OK | 45 | //OK |
85 | okClick: function (ev) { | 46 | okClick: function (ev) { |
86 | - document.getElementById("payTip").innerHTML = ""; | 47 | + //document.getElementById("payTip").innerHTML = ""; |
87 | if (webAppParams == null) { | 48 | if (webAppParams == null) { |
88 | alertMsg("暂无订单信息");return; | 49 | alertMsg("暂无订单信息");return; |
89 | } | 50 | } |
90 | - //先校验停车费用后缴费提交 | ||
91 | - webAppClass.checkParkCost(); | ||
92 | - }, | ||
93 | - //校验该订单当前支付时的费用(排除扫描订单后不支付时长) | ||
94 | - checkParkCost: function () { | ||
95 | - $btnObj.style.display = "none"; | ||
96 | - $btnLoad.style.display = "block"; | ||
97 | - if (typeof (webAppParams.queryOrderInfo) == "undefined") {//没有queryOrderInfo返回第一页 | ||
98 | - window.history.back(-1); | ||
99 | - } | ||
100 | - var tmpParams = JSON.parse(webAppParams.queryOrderInfo); | ||
101 | - var url = webAppRoot + window.webAppH5.comServer; | ||
102 | - postRequest(url, tmpParams, function (res) { | ||
103 | - //btnObj.style.display = "block"; //$btnLoad.style.display = "none"; | ||
104 | - //$btnObj.style.display = "block"; | ||
105 | - if (res.code == 0) {//进场 | ||
106 | - var tmpObj = res.data; | ||
107 | - if (tmpObj) { | ||
108 | - webAppClass.setUI(tmpObj); | ||
109 | - webAppParams = tmpObj;//重新赋值 | ||
110 | - webAppClass.okPay(tmpObj);//唤醒支付 | ||
111 | - } else { | ||
112 | - alertMsg("没有找到相应订单"); | ||
113 | - } | ||
114 | - } else {//其他情况如【该卡号场内已存在】 | ||
115 | - $btnLoad.style.display = "none"; | ||
116 | - $btnObj.style.display = "block"; | ||
117 | - console.log(res.message); alertMsg(res.message); | ||
118 | - } | ||
119 | - }, function (err) { | ||
120 | - console.log("网络服务超时..." + url); | ||
121 | - alertMsg("网络服务超时"); | ||
122 | - $btnLoad.style.display = "none"; | ||
123 | - $btnObj.style.display = "block"; | ||
124 | - //$btnLoad.style.display = "none"; | ||
125 | - }); | 51 | + //支付方式判断 |
52 | + webAppClass.okPay(webAppParams); | ||
126 | }, | 53 | }, |
127 | 54 | ||
128 | //确定支付 | 55 | //确定支付 |
129 | okPay: function (params) { | 56 | okPay: function (params) { |
130 | var orderID = params.orderId;//订单号 | 57 | var orderID = params.orderId;//订单号 |
131 | - //var moneyID = document.getElementById("sumMoney").innerHTML = webAppParams.orderId;//订单号 | 58 | + //第一首先判断当前哪种浏览器方式[微信内置、支付宝内置、第三方浏览器] |
59 | + var clientType = clientBrowserEx(); | ||
60 | + switch (clientType) { | ||
61 | + case "wxPay"://微信[内置浏览器] | ||
62 | + webAppClass.payAjaxJDK(orderID);console.log("wxPay");//微信支付 | ||
63 | + break; | ||
64 | + case "aliPay"://支付宝 | ||
65 | + webAppClass.payAliOption(orderID); console.log("aliPay"); | ||
66 | + break; | ||
67 | + default://第三方浏览器other[暂只支持支付宝] | ||
68 | + webAppClass.payAliOption(orderID); | ||
69 | + break; | ||
70 | + } | ||
71 | + }, | ||
72 | + //支付宝支付参数 | ||
73 | + payAliOption: function (orderID) { | ||
132 | var root = webAppRoot; | 74 | var root = webAppRoot; |
133 | - //默认支付宝 | ||
134 | - if (document.getElementById("aliPay").checked) { | ||
135 | - console.log("aliPay"); | ||
136 | - //订单号 | ||
137 | - var obj = {}; | ||
138 | - //this.payAjax(url, { orderId: "11111", price: 0.01 }); | ||
139 | - var aliPay = webAppH5.aliPayServer; | ||
140 | - var aliParams = webAppH5.comParams; | ||
141 | - aliParams.orderId = orderID; | ||
142 | - aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
143 | - aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
144 | - aliParams.paySrcType = 101;//101停车支付 | ||
145 | - webAppClass.payAliAjax(root + aliPay, aliParams); | ||
146 | - } else {//微信 | ||
147 | - var url = " https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096"; | ||
148 | - //window.location.href = url; | ||
149 | - var wxPay = webAppH5.wxPayServer; | ||
150 | - var wxParams = webAppH5.comParams; | ||
151 | - wxParams.orderId = orderID; | ||
152 | - wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
153 | - wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
154 | - webAppClass.payAjax(root + wxPay, wxParams); | ||
155 | - console.log("wxPay"); | 75 | + var aliPay = webAppH5.aliPayServer; |
76 | + var aliParams = webAppH5.comParams; | ||
77 | + aliParams.orderId = orderID; | ||
78 | + aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
79 | + aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
80 | + aliParams.paySrcType = 101;//101停车支付 | ||
81 | + webAppClass.payAliAjax(root + aliPay, aliParams); | ||
82 | + }, | ||
83 | + //获取微信code | ||
84 | + getCode: function () { | ||
85 | + var appID = appWxID; | ||
86 | + var code = getUrlParam('code'); | ||
87 | + var local = window.location.href; | ||
88 | + //alert("local:" + local); | ||
89 | + if (code == null || code === '') { | ||
90 | + //alert(code); | ||
91 | + 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' | ||
92 | + } else { | ||
93 | + return code; | ||
94 | + } | ||
95 | + function getUrlParam(name) { | ||
96 | + var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); | ||
97 | + var r = window.location.search.substr(1).match(reg) | ||
98 | + if (r != null) return unescape(r[2]) | ||
99 | + return null | ||
156 | } | 100 | } |
157 | }, | 101 | }, |
158 | - | ||
159 | //Ali | 102 | //Ali |
160 | aliClick: function (ev) { | 103 | aliClick: function (ev) { |
161 | console.log("AliClick"); | 104 | console.log("AliClick"); |
@@ -170,15 +113,17 @@ var webAppClass = { | @@ -170,15 +113,17 @@ var webAppClass = { | ||
170 | }, | 113 | }, |
171 | //浏览器 | 114 | //浏览器 |
172 | clientBrowser: function () { | 115 | clientBrowser: function () { |
173 | - if (/MicroMessenger/.test(window.navigator.userAgent)) { | ||
174 | - console.log("微信客户端"); | ||
175 | - this.switchShow("wxPay"); | ||
176 | - } else if (/AlipayClient/.test(window.navigator.userAgent)) { | ||
177 | - console.log("支付宝客户端"); | ||
178 | - this.switchShow("aliPay"); | ||
179 | - } else { | ||
180 | - console.log("其他浏览器"); | ||
181 | - this.switchShow("other"); | 116 | + var type = clientBrowserEx(); |
117 | + switch (type) { | ||
118 | + case "aliPay": | ||
119 | + this.switchShow("aliPay"); console.log("支付宝客户端"); | ||
120 | + break; | ||
121 | + case "wxPay": | ||
122 | + this.switchShow("wxPay"); console.log("微信客户端"); | ||
123 | + break; | ||
124 | + default://other | ||
125 | + this.switchShow("other"); console.log("其他浏览器"); | ||
126 | + break; | ||
182 | } | 127 | } |
183 | }, | 128 | }, |
184 | //根据浏览器显示内容[aliPay、wxPay、other] | 129 | //根据浏览器显示内容[aliPay、wxPay、other] |
@@ -197,7 +142,10 @@ var webAppClass = { | @@ -197,7 +142,10 @@ var webAppClass = { | ||
197 | aliObj.style.display = "none"; | 142 | aliObj.style.display = "none"; |
198 | document.getElementById("wxPay").checked = true; | 143 | document.getElementById("wxPay").checked = true; |
199 | break; | 144 | break; |
200 | - default://其他浏览器 | 145 | + default://其他浏览器[浏览器暂时屏蔽微信] |
146 | + lineObj.style.display = "none"; | ||
147 | + wxObj.style.display = "none"; | ||
148 | + document.getElementById("aliPay").checked = true; | ||
201 | break; | 149 | break; |
202 | } | 150 | } |
203 | }, | 151 | }, |
@@ -232,41 +180,129 @@ var webAppClass = { | @@ -232,41 +180,129 @@ var webAppClass = { | ||
232 | }); | 180 | }); |
233 | }, | 181 | }, |
234 | 182 | ||
183 | + payAjaxJDK: function (orderID) { | ||
184 | + //0:页面初始化获取code[webAppCode] | ||
185 | + var codeParams = { code: webAppCode, appId: appWxID }; | ||
186 | + var openIdUrl = webAppRoot + window.webAppH5.wxGetOpenIdServer; | ||
187 | + $btnObj.style.display = "none"; $btnLoad.style.display = "block"; | ||
188 | + //1:有code获取OpenId | ||
189 | + postRequest(openIdUrl, codeParams, function (res) { | ||
190 | + $btnObj.style.display = "block"; $btnLoad.style.display = "none"; | ||
191 | + //alert(JSON.stringify(res)); | ||
192 | + if (res.code == 0) { | ||
193 | + webAppClass.getPayParams(res.data, orderID); | ||
194 | + } else { | ||
195 | + alertMsg(res.message); | ||
196 | + } | ||
197 | + }, function (err) { | ||
198 | + $btnObj.style.display = "block"; $btnLoad.style.display = "none"; | ||
199 | + console.log("网络地址出错..." + openIdUrl); | ||
200 | + }); | ||
201 | + }, | ||
202 | + getPayParams: function (openId, orderID) { | ||
203 | + var wxPay = window.webAppH5.wxPayServer; | ||
204 | + var wxParams = window.webAppH5.comParams; | ||
205 | + wxParams.orderId = orderID; | ||
206 | + wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
207 | + wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
208 | + //webAppClass.payAjax(root + wxPay, wxParams); | ||
209 | + wxParams.openId = openId; | ||
210 | + wxParams.appId = appWxID; | ||
211 | + var payParamsUrl = webAppRoot + window.webAppH5.wxPayServer; | ||
212 | + //alert(payParamsUrl);alert(orderID); | ||
213 | + $btnObj.style.display = "none"; $btnLoad.style.display = "block"; | ||
214 | + postRequest(payParamsUrl, wxParams, function (res) { | ||
215 | + $btnObj.style.display = "block"; $btnLoad.style.display = "none"; | ||
216 | + //debugger; | ||
217 | + if (res.code == 0) {//进场 | ||
218 | + //alertMsg("出场成功"); | ||
219 | + if (res.data) { | ||
220 | + var tmpObj = res.data; | ||
221 | + webAppClass.weixinJSBridge(res.data);//唤醒wx支付 | ||
222 | + console.log(JSON.stringify(tmpObj)); | ||
223 | + //alert(JSON.stringify(tmpObj)); | ||
224 | + } else { | ||
225 | + alertMsg("没有找到返回值"); | ||
226 | + } | ||
227 | + } else { | ||
228 | + $btnObj.style.display = "block";$btnLoad.style.display = "none"; | ||
229 | + console.log(res.message); alertMsg(res.message); | ||
230 | + } | ||
231 | + }, function (err) { | ||
232 | + console.log("网络地址出错..."); | ||
233 | + alertMsg("网络地址出错..." + payParamsUrl); | ||
234 | + $btnObj.style.display = "block"; $btnLoad.style.display = "none"; | ||
235 | + }); | ||
236 | + }, | ||
237 | + //调用微信内置WeixinJSBridge对象发起支付 | ||
238 | + weixinJSBridge: function (params) { | ||
239 | + function onBridgeReady() { | ||
240 | + WeixinJSBridge.invoke( | ||
241 | + 'getBrandWCPayRequest', params, | ||
242 | + function (res) { | ||
243 | + //alert(res.err_msg); | ||
244 | + if (res.err_msg == "get_brand_wcpay_request:ok") { | ||
245 | + // 使用以上方式判断前端返回,微信团队郑重提示: | ||
246 | + //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 | ||
247 | + window.location.href = webAppPayResult + "?trade_no=" + "success"; | ||
248 | + } | ||
249 | + else if (res.err_msg == 'get_brand_wcpay_request:cancel') { | ||
250 | + window.location.href = webAppPayResult + "?trade_no=" + "fail"; | ||
251 | + } | ||
252 | + else { | ||
253 | + alertMsg(JSON.stringify(res)); | ||
254 | + //alert(res.err_msg); | ||
255 | + } | ||
256 | + }); | ||
257 | + } | ||
258 | + if (typeof WeixinJSBridge == "undefined") { | ||
259 | + if (document.addEventListener) { | ||
260 | + document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); | ||
261 | + } else if (document.attachEvent) { | ||
262 | + document.attachEvent('WeixinJSBridgeReady', onBridgeReady); | ||
263 | + document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); | ||
264 | + } | ||
265 | + } else { | ||
266 | + onBridgeReady(); | ||
267 | + } | ||
268 | + }, | ||
235 | //异步请求-支付宝 | 269 | //异步请求-支付宝 |
236 | payAliAjax: function (url, params) { | 270 | payAliAjax: function (url, params) { |
237 | - var btnOBj = $btnObj; | 271 | + $btnObj.style.display = "none"; $btnLoad.style.display = "block"; |
238 | postRequest(url, params, function (res) { | 272 | postRequest(url, params, function (res) { |
239 | - btnOBj.style.display = "block"; | ||
240 | - $btnLoad.style.display = "none"; | ||
241 | - if (res.code == 0) {//进场 | ||
242 | - document.write(res.data);//打开支付表单 | ||
243 | - } else {//其他情况如【该卡号场内已存在】 | ||
244 | - console.log(res.message); | ||
245 | - alertMsg(res.message); | 273 | + $btnObj.style.display = "block"; $btnLoad.style.display = "none"; |
274 | + if (res !=null) { | ||
275 | + if (res.code == 0) {//进场 | ||
276 | + document.write(res.data);//打开支付表单 | ||
277 | + } else {//其他情况如【该卡号场内已存在】 | ||
278 | + console.log(res.message); | ||
279 | + alertMsg(res.message); | ||
280 | + } | ||
281 | + } else { | ||
282 | + alertMsg("没有找到次订单信息"); | ||
246 | } | 283 | } |
247 | }, function (err) { | 284 | }, function (err) { |
248 | console.log("网络地址出错...");alertMsg("网络地址出错..."); | 285 | console.log("网络地址出错...");alertMsg("网络地址出错..."); |
249 | - $btnLoad.style.display = "none"; | ||
250 | - btnOBj.style.display = "block"; | 286 | + $btnObj.style.display = "block"; $btnLoad.style.display = "none"; |
251 | }); | 287 | }); |
252 | }, | 288 | }, |
253 | 289 | ||
254 | - //设置UI | 290 | + //设置UI参数[订单、金额、停车场名称及编号] |
255 | setUI: function (params) { | 291 | setUI: function (params) { |
256 | var $carNum = getObjectByID("carNum"),//车牌号 | 292 | var $carNum = getObjectByID("carNum"),//车牌号 |
257 | $orderNum = getObjectByID("orderNum"),//订单号 | 293 | $orderNum = getObjectByID("orderNum"),//订单号 |
258 | $sumMoney = getObjectByID("sumMoney"),//实际应付金额 | 294 | $sumMoney = getObjectByID("sumMoney"),//实际应付金额 |
259 | $outtime = getObjectByID("outtime"),//实际出场时间 | 295 | $outtime = getObjectByID("outtime"),//实际出场时间 |
260 | - $payTip = getObjectByID("payTip"),//支付提示 | 296 | + //$payTip = getObjectByID("payTip"),//支付提示 |
261 | 297 | ||
262 | $parkName = getObjectByID("parkName"),//车场名称 | 298 | $parkName = getObjectByID("parkName"),//车场名称 |
263 | $inparktime = getObjectByID("inparktime"),//进场时间 | 299 | $inparktime = getObjectByID("inparktime"),//进场时间 |
264 | - $staytime = getObjectByID("staytime"),//停车时长 | ||
265 | - $due = getObjectByID("due"),//停车总费用 | 300 | + $staytime = getObjectByID("staytime");//停车时长 |
266 | 301 | ||
267 | - $paid = getObjectByID("paid"),//已支付金额 | ||
268 | - $discountDesc = getObjectByID("discountDesc"),//8折优惠折扣费用 | ||
269 | - $discountFee = getObjectByID("discountFee");//优惠金额 | 302 | + //$due = getObjectByID("due"),//停车总费用 |
303 | + //$paid = getObjectByID("paid"),//已支付金额 | ||
304 | + //$discountDesc = getObjectByID("discountDesc"),//8折优惠折扣费用 | ||
305 | + //$discountFee = getObjectByID("discountFee");//优惠金额 | ||
270 | 306 | ||
271 | if (params != null && params!="") { | 307 | if (params != null && params!="") { |
272 | var price = keepTwoDecimalFull((params.orderFee / 100));//(params.orderFee / 100); | 308 | var price = keepTwoDecimalFull((params.orderFee / 100));//(params.orderFee / 100); |
@@ -275,16 +311,16 @@ var webAppClass = { | @@ -275,16 +311,16 @@ var webAppClass = { | ||
275 | $sumMoney.innerHTML = price;///params.orderFee//缴费金额 | 311 | $sumMoney.innerHTML = price;///params.orderFee//缴费金额 |
276 | $outtime.innerHTML = params.outtime;//实际出场时间 | 312 | $outtime.innerHTML = params.outtime;//实际出场时间 |
277 | //.appOrderTimeout | 313 | //.appOrderTimeout |
278 | - $payTip.innerHTML = "注意: " + params.appOrderTimeout;//请在支付完成10分钟内出场,如超时未出场,会继续计费。 | 314 | + //$payTip.innerHTML = "注意: " + params.appOrderTimeout;//请在支付完成10分钟内出场,如超时未出场,会继续计费。 |
279 | 315 | ||
280 | $parkName.innerHTML = params.parkName; | 316 | $parkName.innerHTML = params.parkName; |
281 | $inparktime.innerHTML = params.inparktime; | 317 | $inparktime.innerHTML = params.inparktime; |
282 | $staytime.innerHTML = formatSeconds(params.staytime); | 318 | $staytime.innerHTML = formatSeconds(params.staytime); |
283 | 319 | ||
284 | - $due.innerHTML = keepTwoDecimalFull((params.due / 100));//停车总费用 | ||
285 | - $paid.innerHTML = params.paid; | ||
286 | - $discountFee.innerHTML = keepTwoDecimalFull((params.discountFee / 100));//优惠金额 | ||
287 | - $discountDesc.innerHTML = params.discountDesc; | 320 | + //$due.innerHTML = keepTwoDecimalFull((params.due / 100));//停车总费用 |
321 | + //$paid.innerHTML = params.paid; | ||
322 | + //$discountFee.innerHTML = keepTwoDecimalFull((params.discountFee / 100));//优惠金额 | ||
323 | + //$discountDesc.innerHTML = params.discountDesc; | ||
288 | } else { | 324 | } else { |
289 | console.log("没有接受到参数"); | 325 | console.log("没有接受到参数"); |
290 | } | 326 | } |
@@ -296,7 +332,7 @@ var webAppClass = { | @@ -296,7 +332,7 @@ var webAppClass = { | ||
296 | var $linkPayDetail = getObjectByID("linkPayDetail"); | 332 | var $linkPayDetail = getObjectByID("linkPayDetail"); |
297 | if ($linkPayDetail.innerHTML == "详情+") { | 333 | if ($linkPayDetail.innerHTML == "详情+") { |
298 | $linkPayDetail.innerHTML = "详情-"; | 334 | $linkPayDetail.innerHTML = "详情-"; |
299 | - $payDetail.style.height = "195px"; | 335 | + $payDetail.style.height = "110px"; |
300 | } else { | 336 | } else { |
301 | $linkPayDetail.innerHTML = "详情+"; | 337 | $linkPayDetail.innerHTML = "详情+"; |
302 | $payDetail.style.height = "55px"; | 338 | $payDetail.style.height = "55px"; |
js/pay.js
@@ -6,6 +6,7 @@ | @@ -6,6 +6,7 @@ | ||
6 | var webAppParams = null; | 6 | var webAppParams = null; |
7 | var $btnObj = null; | 7 | var $btnObj = null; |
8 | var $btnLoad = null; | 8 | var $btnLoad = null; |
9 | +var webAppCode = null;//如果是微信,先获取微信code | ||
9 | //var $btnLoad = document.getElementById("loading"); | 10 | //var $btnLoad = document.getElementById("loading"); |
10 | window.onload = function () { | 11 | window.onload = function () { |
11 | //var root = document.getElementById("root"); | 12 | //var root = document.getElementById("root"); |
@@ -14,7 +15,7 @@ window.onload = function () { | @@ -14,7 +15,7 @@ window.onload = function () { | ||
14 | $linkPayDetail = getObjectByID("linkPayDetail"); | 15 | $linkPayDetail = getObjectByID("linkPayDetail"); |
15 | $linkPayDetail.onclick = webAppClass.linkPayDetailClick; | 16 | $linkPayDetail.onclick = webAppClass.linkPayDetailClick; |
16 | var webRoot = window.location.href; | 17 | var webRoot = window.location.href; |
17 | - //当前客户端浏览器模式[微信、支付宝、其他] | 18 | + //设置当前客户端浏览器模式[微信、支付宝、其他] |
18 | webAppClass.clientBrowser(); | 19 | webAppClass.clientBrowser(); |
19 | //绑定事件 | 20 | //绑定事件 |
20 | var ali = document.getElementById("rowAliPay"); | 21 | var ali = document.getElementById("rowAliPay"); |
@@ -31,6 +32,13 @@ window.onload = function () { | @@ -31,6 +32,13 @@ window.onload = function () { | ||
31 | } else { | 32 | } else { |
32 | alertMsg("暂无订单信息"); | 33 | alertMsg("暂无订单信息"); |
33 | } | 34 | } |
35 | + | ||
36 | + //获取微信code | ||
37 | + //webAppClass.getCode(); | ||
38 | + var state = clientBrowserEx(); | ||
39 | + if (state == "wxPay") { | ||
40 | + webAppCode = webAppClass.getCode(); | ||
41 | + } | ||
34 | } | 42 | } |
35 | /**/ | 43 | /**/ |
36 | var webAppClass = { | 44 | var webAppClass = { |
@@ -83,32 +91,86 @@ var webAppClass = { | @@ -83,32 +91,86 @@ var webAppClass = { | ||
83 | var orderID = params.orderId;//订单号 | 91 | var orderID = params.orderId;//订单号 |
84 | //var moneyID = document.getElementById("sumMoney").innerHTML = webAppParams.orderId;//订单号 | 92 | //var moneyID = document.getElementById("sumMoney").innerHTML = webAppParams.orderId;//订单号 |
85 | var root = webAppRoot; | 93 | var root = webAppRoot; |
86 | - //默认支付宝 | ||
87 | - if (document.getElementById("aliPay").checked) { | ||
88 | - console.log("aliPay"); | ||
89 | - //订单号 | ||
90 | - var obj = {}; | ||
91 | - //this.payAjax(url, { orderId: "11111", price: 0.01 }); | ||
92 | - var aliPay = webAppH5.aliPayServer; | ||
93 | - var aliParams = webAppH5.comParams; | ||
94 | - aliParams.orderId = orderID; | ||
95 | - aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
96 | - aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
97 | - aliParams.paySrcType = 101;//101停车支付 | ||
98 | - webAppClass.payAliAjax(root + aliPay, aliParams); | ||
99 | - } else {//微信 | ||
100 | - var url = " https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096"; | ||
101 | - //window.location.href = url; | ||
102 | - var wxPay = webAppH5.wxPayServer; | ||
103 | - var wxParams = webAppH5.comParams; | ||
104 | - wxParams.orderId = orderID; | ||
105 | - wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
106 | - wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
107 | - webAppClass.payAjax(root + wxPay, wxParams); | ||
108 | - console.log("wxPay"); | 94 | + //第一首先判断当前哪种浏览器方式[微信内置、支付宝内置、第三方浏览器] |
95 | + var clientType = clientBrowserEx(); | ||
96 | + //alert(clientType); | ||
97 | + switch (clientType) { | ||
98 | + case "wxPay"://微信[内置浏览器] | ||
99 | + //var wxPay = webAppH5.wxPayServer; | ||
100 | + //var wxParams = webAppH5.comParams; | ||
101 | + //wxParams.orderId = orderID; | ||
102 | + //wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
103 | + //wxParams.terminalSource = 3;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
104 | + webAppClass.payAjaxJDK(orderID); | ||
105 | + console.log("wxPay");//微信支付 | ||
106 | + break; | ||
107 | + case "aliPay"://支付宝 | ||
108 | + console.log("aliPay"); | ||
109 | + //订单号 | ||
110 | + var obj = {}; | ||
111 | + //this.payAjax(url, { orderId: "11111", price: 0.01 }); | ||
112 | + var aliPay = webAppH5.aliPayServer; | ||
113 | + var aliParams = webAppH5.comParams; | ||
114 | + aliParams.orderId = orderID; | ||
115 | + aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
116 | + aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
117 | + aliParams.paySrcType = 101;//101停车支付 | ||
118 | + webAppClass.payAliAjax(root + aliPay, aliParams); | ||
119 | + break; | ||
120 | + default://第三方浏览器other | ||
121 | + //默认支付宝 | ||
122 | + if (document.getElementById("aliPay").checked) { | ||
123 | + console.log("aliPay"); | ||
124 | + //订单号 | ||
125 | + var obj = {}; | ||
126 | + //this.payAjax(url, { orderId: "11111", price: 0.01 }); | ||
127 | + var aliPay = webAppH5.aliPayServer; | ||
128 | + var aliParams = webAppH5.comParams; | ||
129 | + aliParams.orderId = orderID; | ||
130 | + aliParams.payType = 1;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
131 | + aliParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
132 | + aliParams.paySrcType = 101;//101停车支付 | ||
133 | + webAppClass.payAliAjax(root + aliPay, aliParams); | ||
134 | + } else {//微信页面支付 | ||
135 | + var url = " https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096"; | ||
136 | + //window.location.href = url; | ||
137 | + var wxPay = webAppH5.wxPayServer; | ||
138 | + var wxParams = webAppH5.comParams; | ||
139 | + wxParams.orderId = orderID; | ||
140 | + wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
141 | + wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
142 | + webAppClass.payAjax(root + wxPay, wxParams); | ||
143 | + console.log("wxPay"); | ||
144 | + } | ||
145 | + break; | ||
109 | } | 146 | } |
110 | }, | 147 | }, |
111 | 148 | ||
149 | + getCode: function () { | ||
150 | + var appID = appWxID; | ||
151 | + var code = getUrlParam('code'); | ||
152 | + var local = window.location.href; | ||
153 | + //alert("local:" + local); | ||
154 | + if (code == null || code === '') { | ||
155 | + //alert(code); | ||
156 | + 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' | ||
157 | + //window.event.returnValue = false; | ||
158 | + //window.open('https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appID + '&redirect_uri=' + encodeURIComponent(local) + '&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'); | ||
159 | + //alert("22"); | ||
160 | + } else { | ||
161 | + //getOpenId(code); //把code传给后台获取用户信息 | ||
162 | + //alert(code); | ||
163 | + //webAppCode = code; | ||
164 | + return code; | ||
165 | + } | ||
166 | + | ||
167 | + function getUrlParam(name) { | ||
168 | + var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); | ||
169 | + var r = window.location.search.substr(1).match(reg) | ||
170 | + if (r != null) return unescape(r[2]) | ||
171 | + return null | ||
172 | + } | ||
173 | + }, | ||
112 | //Ali | 174 | //Ali |
113 | aliClick: function (ev) { | 175 | aliClick: function (ev) { |
114 | console.log("AliClick"); | 176 | console.log("AliClick"); |
@@ -150,12 +212,15 @@ var webAppClass = { | @@ -150,12 +212,15 @@ var webAppClass = { | ||
150 | aliObj.style.display = "none"; | 212 | aliObj.style.display = "none"; |
151 | document.getElementById("wxPay").checked = true; | 213 | document.getElementById("wxPay").checked = true; |
152 | break; | 214 | break; |
153 | - default://其他浏览器 | 215 | + default://其他浏览器[浏览器暂时屏蔽微信] |
216 | + lineObj.style.display = "none"; | ||
217 | + wxObj.style.display = "none"; | ||
218 | + document.getElementById("aliPay").checked = true; | ||
154 | break; | 219 | break; |
155 | } | 220 | } |
156 | }, | 221 | }, |
157 | 222 | ||
158 | - //异步请求-微信 | 223 | + //异步请求-微信H5页面 |
159 | payAjax: function (url, params) { | 224 | payAjax: function (url, params) { |
160 | var btnOBj = $btnObj; | 225 | var btnOBj = $btnObj; |
161 | postRequest(url, params, function (res) { | 226 | postRequest(url, params, function (res) { |
@@ -182,9 +247,112 @@ var webAppClass = { | @@ -182,9 +247,112 @@ var webAppClass = { | ||
182 | }, function (err) { | 247 | }, function (err) { |
183 | console.log("网络地址出错..."); | 248 | console.log("网络地址出错..."); |
184 | alertMsg("网络地址出错..."); | 249 | alertMsg("网络地址出错..."); |
250 | + $btnLoad.style.display = "none"; | ||
185 | btnOBj.style.display = "block"; | 251 | btnOBj.style.display = "block"; |
186 | }); | 252 | }); |
187 | }, | 253 | }, |
254 | + //异步请求-微信JDK调用 | ||
255 | + payAjaxJDK: function (orderID) { | ||
256 | + var btnOBj = $btnObj; | ||
257 | + //0:页面初始化获取code[webAppCode] | ||
258 | + var codeParams = { code: webAppCode, appId: appWxID }; | ||
259 | + var openIdUrl = webAppRoot + window.webAppH5.wxGetOpenIdServer; | ||
260 | + //alert(openIdUrl); | ||
261 | + //1:有code获取OpenId | ||
262 | + postRequest(openIdUrl, codeParams, function (res) { | ||
263 | + //alert(JSON.stringify(res)); | ||
264 | + if (res.code == 0) { | ||
265 | + //alert(res.data); | ||
266 | + webAppClass.getPayParams(res.data, orderID); | ||
267 | + } else { | ||
268 | + alertMsg(res.message); | ||
269 | + } | ||
270 | + }, function (err) { | ||
271 | + console.log("网络地址出错..." + openIdUrl); | ||
272 | + }); | ||
273 | + //2:获取支付参数 | ||
274 | + //function getPayParams(openId) { | ||
275 | + | ||
276 | + //} | ||
277 | + }, | ||
278 | + getPayParams: function (openId, orderID) { | ||
279 | + var wxPay = window.webAppH5.wxPayServer; | ||
280 | + var wxParams = window.webAppH5.comParams; | ||
281 | + wxParams.orderId = orderID; | ||
282 | + wxParams.payType = 4;// 1:支付宝 2:微信 3:银联 10:H5 4微信公众号 | ||
283 | + wxParams.terminalSource = 7;//请求端来源 1: 任你停 2:pda 3:微信公共号 7:H5扫码 10页面支付 | ||
284 | + //webAppClass.payAjax(root + wxPay, wxParams); | ||
285 | + wxParams.openId = openId; | ||
286 | + wxParams.appId = appWxID; | ||
287 | + var payParamsUrl = webAppRoot + window.webAppH5.wxPayServer; | ||
288 | + //alert(payParamsUrl);alert(orderID); | ||
289 | + postRequest(payParamsUrl, wxParams, function (res) { | ||
290 | + $btnObj.style.display = "block"; | ||
291 | + $btnLoad.style.display = "none"; | ||
292 | + //debugger; | ||
293 | + if (res.code == 0) {//进场 | ||
294 | + //alertMsg("出场成功"); | ||
295 | + if (res.data) { | ||
296 | + var tmpObj = res.data; | ||
297 | + webAppClass.weixinJSBridge(res.data); | ||
298 | + console.log(JSON.stringify(tmpObj)); | ||
299 | + //alert(JSON.stringify(tmpObj)); | ||
300 | + } else { | ||
301 | + alertMsg("没有找到返回值"); | ||
302 | + } | ||
303 | + } else { | ||
304 | + $btnLoad.style.display = "none"; | ||
305 | + $btnObj.style.display = "block"; | ||
306 | + console.log(res.message); alertMsg(res.message); | ||
307 | + } | ||
308 | + }, function (err) { | ||
309 | + console.log("网络地址出错..."); | ||
310 | + alertMsg("网络地址出错..." + payParamsUrl); | ||
311 | + $btnLoad.style.display = "none"; | ||
312 | + $btnObj.style.display = "block"; | ||
313 | + }); | ||
314 | + }, | ||
315 | + | ||
316 | + //调用微信内置WeixinJSBridge对象发起支付 | ||
317 | + weixinJSBridge: function (params) { | ||
318 | + function onBridgeReady() { | ||
319 | + WeixinJSBridge.invoke( | ||
320 | + 'getBrandWCPayRequest', params, | ||
321 | + //'getBrandWCPayRequest', { | ||
322 | + // "appId": appWxID, //公众号名称,由商户传入 | ||
323 | + // "timeStamp": "1395712654", //时间戳,自1970年以来的秒数 | ||
324 | + // "nonceStr": "e61463f8efa94090b1f366cccfbbb444", //随机串 | ||
325 | + // "package": "prepay_id=u802345jgfjsdfgsdg888", | ||
326 | + // "signType": "MD5", //微信签名方式: | ||
327 | + // "paySign": "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 | ||
328 | + //}, | ||
329 | + function (res) { | ||
330 | + //alert(res.err_msg); | ||
331 | + if (res.err_msg == "get_brand_wcpay_request:ok") { | ||
332 | + // 使用以上方式判断前端返回,微信团队郑重提示: | ||
333 | + //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 | ||
334 | + window.location.href = webAppPayResult+"?trade_no=" + "success"; | ||
335 | + } | ||
336 | + else if (res.err_msg == 'get_brand_wcpay_request:cancel') { | ||
337 | + window.location.href = webAppPayResult + "?trade_no=" + "fail"; | ||
338 | + } | ||
339 | + else { | ||
340 | + alertMsg(JSON.stringify(res)); | ||
341 | + //alert(res.err_msg); | ||
342 | + } | ||
343 | + }); | ||
344 | + } | ||
345 | + if (typeof WeixinJSBridge == "undefined") { | ||
346 | + if (document.addEventListener) { | ||
347 | + document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); | ||
348 | + } else if (document.attachEvent) { | ||
349 | + document.attachEvent('WeixinJSBridgeReady', onBridgeReady); | ||
350 | + document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); | ||
351 | + } | ||
352 | + } else { | ||
353 | + onBridgeReady(); | ||
354 | + } | ||
355 | + }, | ||
188 | 356 | ||
189 | //异步请求-支付宝 | 357 | //异步请求-支付宝 |
190 | payAliAjax: function (url, params) { | 358 | payAliAjax: function (url, params) { |
page/alipayResult.html
@@ -51,6 +51,8 @@ | @@ -51,6 +51,8 @@ | ||
51 | console.log(JSON.stringify(tmpParams)); | 51 | console.log(JSON.stringify(tmpParams)); |
52 | if (tmpParams.trade_no != "") { | 52 | if (tmpParams.trade_no != "") { |
53 | getResponse("success"); | 53 | getResponse("success"); |
54 | + } else { | ||
55 | + getResponse("fail"); | ||
54 | } | 56 | } |
55 | //alertMsg("支付返回参数:" + JSON.stringify(tmpParams)); | 57 | //alertMsg("支付返回参数:" + JSON.stringify(tmpParams)); |
56 | } else { | 58 | } else { |
page/wxpayResult.html
@@ -49,8 +49,10 @@ | @@ -49,8 +49,10 @@ | ||
49 | var tmpParams = getQueryString(window.location); | 49 | var tmpParams = getQueryString(window.location); |
50 | if (tmpParams != null) { | 50 | if (tmpParams != null) { |
51 | console.log(JSON.stringify(tmpParams)); | 51 | console.log(JSON.stringify(tmpParams)); |
52 | - if (tmpParams.trade_no != "") { | 52 | + if (tmpParams.trade_no == "success") { |
53 | getResponse("success"); | 53 | getResponse("success"); |
54 | + } else { | ||
55 | + getResponse("fail"); | ||
54 | } | 56 | } |
55 | //alertMsg("支付返回参数:" + JSON.stringify(tmpParams)); | 57 | //alertMsg("支付返回参数:" + JSON.stringify(tmpParams)); |
56 | } else { | 58 | } else { |
pay.html
@@ -16,7 +16,8 @@ | @@ -16,7 +16,8 @@ | ||
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.1"></script> |
19 | - <script src="js/pay.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="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>--> |
21 | <!--<script src="config.js"></script>--> | 22 | <!--<script src="config.js"></script>--> |
22 | <!-- | 23 | <!-- |