baibx 2 ay önce
ebeveyn
işleme
397c01fbe0

+ 26 - 0
com.sharemao.web.xw3/src/main/java/com/sharemao/web/wx/ctrl/AuthCtrl.java

@@ -82,6 +82,7 @@ public class AuthCtrl
82 82
 			if(Tools.isEmpty(phonenum))
83 83
 			{
84 84
 				context.getRequest().setAttribute("sn", cursn);
85
+                initWxJsApiSign(context);
85 86
 				return new TextView("/activation.jsp");
86 87
 			}
87 88
 			else
@@ -113,6 +114,7 @@ public class AuthCtrl
113 114
 			String lt=DateTimeUtil.longtime();
114 115
 			lt=lt.substring(0,lt.length()-2);
115 116
 			context.getRequest().setAttribute("sign", CodecUtil.str2md5("znz"+cursn+"125226"+lt));
117
+            initWxJsApiSign(context);
116 118
 			return new TextView("/activation.jsp");
117 119
 		}
118 120
 	}
@@ -162,6 +164,7 @@ public class AuthCtrl
162 164
             if(Tools.isEmpty(phonenum))
163 165
             {
164 166
                 context.getRequest().setAttribute("sn", cursn);
167
+                initWxJsApiSign(context);
165 168
                 return new TextView("/activation.jsp");
166 169
             }
167 170
             else
@@ -186,10 +189,33 @@ public class AuthCtrl
186 189
             String lt=DateTimeUtil.longtime();
187 190
             lt=lt.substring(0,lt.length()-2);
188 191
             context.getRequest().setAttribute("sign", CodecUtil.str2md5("znz"+cursn+"125226"+lt));
192
+            initWxJsApiSign(context);
189 193
             return new TextView("/activation.jsp");
190 194
         }
191 195
     }
192 196
 
197
+    private void initWxJsApiSign(Context context){
198
+        HttpSession session = context.getRequest().getSession();
199
+        String jsapiAccessToken = (String) session.getAttribute("jsapiAccessToken");
200
+        if(GzhUtil.isEmpty(jsapiAccessToken)) {
201
+            jsapiAccessToken = GzhUtil.getAccessToken(Constants.appId, Constants.appSecret);
202
+            session.setAttribute("jsapiAccessToken", jsapiAccessToken);
203
+        }
204
+        String jsapiTicket = (String) session.getAttribute("jsapiTicket");
205
+        if(GzhUtil.isEmpty(jsapiTicket)) {
206
+            jsapiTicket = GzhUtil.getJsapiTicket(jsapiAccessToken);
207
+            session.setAttribute("jsapiTicket", jsapiTicket);
208
+        }
209
+        String reqUrl = context.getRequest().getRequestURL().toString();
210
+        reqUrl = reqUrl.split("#")[0];
211
+        String query = context.getRequest().getQueryString();
212
+        String surl = GzhUtil.isEmpty(query) ? reqUrl : reqUrl+"?"+query;
213
+        Map<String, String> signret = GzhUtil.createSign(surl, jsapiTicket);
214
+        signret.put("appid", Constants.appId);
215
+        context.getRequest().setAttribute("signret", signret);
216
+        log.info("signret:"+signret);
217
+    }
218
+
193 219
     /*private int getDevtype(String cursn){
194 220
         Map<String, String> para = new HashMap<>();
195 221
         para.put("devid", cursn);

+ 50 - 1
com.sharemao.web.xw3/src/main/webapp/activation.jsp

@@ -20,6 +20,7 @@
20 20
     <script language="javascript" type="text/javascript" src="/static/js/jquery-3.6.0.min.js"></script>
21 21
     <script language="javascript" type="text/javascript" src="/static/js/animate.min.js"></script>
22 22
     <script language="javascript" type="text/javascript" src="/static/js/main.js"></script>
23
+    <script language="javascript" type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
23 24
 </head>
24 25
 
25 26
 <body class="login-bg">
@@ -31,7 +32,7 @@
31 32
         <label class="form-label2"><i class="red">*</i> 设备号</label>
32 33
         <div class="form-rcon">
33 34
             <input type="text" id="sn" name="" class="form-input" placeholder="请输入设备号" value="${sn}">
34
-            <img src="static/img/icon-qr-scan.png" class="img-qrscan">
35
+            <img src="/static/img/icon-qr-scan.png" class="img-qrscan" id="img-qrscan">
35 36
         </div>
36 37
     </div>
37 38
 <style>
@@ -67,6 +68,12 @@
67 68
 <div class="btn-bind">
68 69
     <button class="btn" onclick="submitForm();" style="min-width: 92%;background: linear-gradient(#439af8, #157afa);">登录</button>
69 70
 </div>
71
+
72
+			<input type="hidden" id="appid" value="${signret.appid}">
73
+			<input type="hidden" id="nonceStr" value="${signret.nonceStr}">
74
+			<input type="hidden" id="timestamp" value="${signret.timestamp}">
75
+			<input type="hidden" id="signature" value="${signret.signature}">
76
+			<input type="hidden" id="showdialog" value="${devs.devInfo.showdialog}">
70 77
 	<script>
71 78
 
72 79
 		var countdown = 60;
@@ -132,6 +139,48 @@
132 139
 				settime(obj)
133 140
 			},1000)
134 141
 		}
142
+			$(function(){
143
+				//alert($("#nonceStr").val()+"***"+$("#timestamp").val()+"***"+$("#signature").val());
144
+				wx.config({
145
+				  debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
146
+				  appId: $("#appid").val(), // 必填,服务号的唯一标识
147
+				  timestamp: $("#timestamp").val(), // 必填,生成签名的时间戳
148
+				  nonceStr: $("#nonceStr").val(), // 必填,生成签名的随机串
149
+				  signature: $("#signature").val(),// 必填,签名
150
+				  jsApiList: ['scanQRCode'], // 必填,需要使用的JS接口列表
151
+				  openTagList: []
152
+				});
153
+				wx.ready(function(){
154
+					console.log("success");
155
+				  // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
156
+				});
157
+				wx.error(function(res){
158
+					console.log("error");
159
+					console.log(res);
160
+				  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
161
+				});
162
+				var btn = document.getElementById('img-qrscan');
163
+				btn.addEventListener('click', function (e) {
164
+					wx.scanQRCode({
165
+                      needResult: 1,
166
+                      scanType: ["qrCode"],
167
+                      success: function (res) {
168
+                        var result = res.resultStr;
169
+                        if(!result) {
170
+                             return;
171
+                         }
172
+                        var sn = "";
173
+                        if(result.indexOf("sn=") !== -1) {
174
+                            var parts = result.split("sn=");
175
+                            if(parts.length === 2 && parts[1].length > 0) {
176
+                                sn = parts[1];
177
+                                $('#sn').val(sn);
178
+                            }
179
+                        }
180
+                      }
181
+                    });
182
+				});
183
+			})
135 184
 	</script>
136 185
 </body>
137 186
 </html>