Este artículo ha compartido el código específico de escanear la cuenta pública de WeChat para su referencia. El contenido específico es el siguiente
paso
Según la descripción del documento WeChat JS-JDK, existen principalmente los siguientes pasos para implementar escaneo:
Atar el nombre de dominio
Complete el nombre de dominio en el nombre de dominio de seguridad de la interfaz JS, tenga cuidado de no traer http, como se muestra en la figura:
Introducir archivos JS
<script src = "http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> </script>
Verificar la configuración a través de la interfaz de configuración
$ .AJAX ({URL: "$ {PageContext.Request.ContextPath}/WeChat/JSapisign", type: "post", data: {url: ubicación.href.split ('#') [0]}, contentType: 'Aplicación/x -www-form-Urlencoded; Charset = Utf-8', ASYNC: verdadero: verdadero: éxito: éxito: éxito: succion (data) {wx.config ({debug: false, appid: data.appid, // requerido, generar la marca de tiempo firma no encestado: data.noncestr, // requerido, generar una firma de cadena aleatoria firma: data.signature, // requerido, firma, vea el appendix 1 jsapilista: ["ScanQrCode"] Todas las listas de interfaz JS;Verificación de visa de WeChat Jsapi
MAP Public <String, String> JSAPISIGN (String url) {map <string, string> ret = new HashMap <String, String> (16); Cadena nonce_str = checkutil.create_nonce_str (); String timestamp = checkUtil.create_timestamp (); String String1; Cadena firma = ""; Cadena jsapi_ticket = wechataccesstokenservice.getjsapiticket (); // Tenga en cuenta que los nombres de los parámetros aquí deben ser todos en minúsculas y deben ordenarse String1 = "jsapi_ticket =" + jsapi_ticket + "& noncestr =" + nonce_str + "× tamp =" + timestamp + "& url =" + url; logger.info ("jsapisign ===" + string1); Pruebe {MessageDigest crypt = MessageDigest.getInstance ("SHA-1"); crypt.reset (); crypt.update (string1.getBytes ("utf-8")); firma = checkUtil.bytetohex (crypt.digest ()); } Catch (nosuchalgorithMexception | UnsupportedEncodingException e) {E.PrintStackTrace (); } ret.put ("appid", appid); ret.put ("url", url); ret.put ("jsapi_ticket", jsapi_ticket); ret.put ("noncestr", nonce_str); ret.put ("TimeStamp", TimeStamp); ret.put ("firma", firma); logger.info ("jsapisign === url =" + url + "== jsapi_ticket" + jsapi_ticket + "== nonce_str" + nonce_str + "== timestamp" + timeStamp + "== firma" + firma); regreso de regreso; } Cadena pública getJSapiticket () {AugeWechatAccesstoken WeChataccesstokenMapper.SelectbyPrimaryKey (jsapiticketid); logger.info ("getJsapiticket ===" + wechataccesstoken.getAccessToken ()); if (strings.isnullorempty (wechataccesstoken.getaccesstoken ()) || wechataccesstoken.getExpiresin () - 100 * 1000 <system.currentTimemillis ()) {// vacío o expirado, refresh retural refreshjsapiticket (); } else {return wechataccesstoken.getAccessToken (); }}Código de capa de controlador
@RequestMapping (valor = "/jsapisign", método = {requestMethod.get, requestmethod.post}, produce = mediatype_charset_json_utf8) @ResponseBody public String jsapisign (string url) {// add weChat js información de información <, string> firmap = wechatsspice.jsapisign (jsapisign (urlign (url) (urlign (url) (urlign (url); return json.tojSonstring (SignMap); }El código completo de la página JSP de recepción
<%@ página contentType = "text/html; charset = utf-8" lenguaje = "java"%> <%string path = request.getContextPath (); String BasePath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerPort () + path + "/";%> <! Doctype html público "-// w3c // dtd html 4.01 transición // en"> <html lang = "zhhcn"> <ethcn " charset = "utf-8"> <meta http-equiv = "x-ua-compatible" content = "ie = borde"> <meta name = "viewport" content = "width = 320.1, inicial-scale = 1, mínimo-escala = 1, máxima-escala = 1, user-scalable = no"> <fead> <fead> <base href = "<%= órgano nofollow "> <title> Escanee el código para devolver el libro </title> <link rel =" stylesheet "href =" http://203.195.235.76/jssdk/css/style.css "/> <script src = "http://res.wx.qq.com/open/js/jweixin-1.1.0.js"> </script> <script src = "http://libs.baidu.com/jquery/2.0.0/jquery.js"> </script> <enlace rel = "stylesheet" type = "/csss" href = "../../../ recursos/css/bookdetail.css" rel = "externo nofollow"> </head> <body> <div> <img src = "../../../ recursos/imágenes/préstamo/return.png"> <div style = "Text-align: centro de fondo; src="../../../resources/images/borrow/scanReturn.png" id="scanQRCode1"> </div></div><script type="text/javascript"> $.ajax({ url: "${pageContext.request.contextPath}/wechat/jsapisign", type: "post", data: { url: ubicación.href.split ('#') [0]}, ContentType: 'Application/X-WWW-Form-URLEncoded; Charset = Utf-8', Async: True, Succes: Function (Data) {Wx.Config ({Debug: False, Appid: Data.Appid, // Requerido, el identificador único de la cuenta oficial de la cuenta oficial: Data.timest. Marca de tiempo de la firma que no es CEST: data.noncestr, // requerido, genere la cadena aleatoria de la firma firma: data.signature, // requerido, consulte el Apéndice 1 Jsapilist: ["Scanqrcode"] // requerido, lista de interfaces JS para ser utilizadas}); wx.ready (function () {// 9.1.2 escanee el código QR y devuelva el resultado document.querySelector ('#scanqrcode1'). onClick = function () {wx.scanqrcode ({NeedRessUsult: 1, desc: 'scanqrcode descode descr', éxito: function (res) {// scan el código y get el resultado del resultado a la vista de resultado y get el resultado a la vista de los resultados a la vista de los resultados a la entrada; // El código de barras del producto, tome el if (url.indexof (",")> = 0) {var temparray = url.split (','); "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx96668744efc2b2de&redirect_uri=http://cx.ngrok.xiaomiqiu.cn/wechat/toreturndetail?barcode=" + " +" + " +" "& Respuesta_Type = Code & Scope = Snsapi_Base & State = Bindface#WeChat_Redirect"; // Inicializar el estado de la interfaz JSAPI wx.error (function (res) {alert ("estado devuelto llamando a wechat jsapi:" + res.errmsg);}); </script> </body> </html>Nota: Los errores de verificación de la firma son propensos a ocurrir durante el desarrollo. Podemos juzgar a través de la consistencia de las URL delanteras y traseras. En segundo lugar, tenga en cuenta que a veces el error se debe a que el AccessToken no se actualiza y necesita ser actualizado nuevamente.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.