Algunos pequeños pasos en el desarrollo de la interfaz WeChat Sharing, el contenido específico es el siguiente
1. Configure la información de la interfaz para la verificación
El código es el siguiente:
/** * Saltar para acceder a la dirección no autenticada * * @param Página de inicio de sesión * @return * @throws excepción */@RequestMapping (valor = "/checkwxdomainUrl", método = requestmethod.get) public void checkwxdomaAnUrl (httpservletRequest solicitud) se deja a la excepción {intento {// después del desarrollador, la información de WECHAT, la información de WECHAT, el servidor de WECHAT, lo que envíe a WeChat, envíe el servidor de WECHAT a WECHAT a WECHAT a WECHAT. URL de dirección del servidor, y la solicitud GET lleva la cadena de parámetro firma = request.getParameter ("firma"); // wechat encryption firive (token, timestamp, nonce.) string timestamp = requit.getParameter ("timestamp"); // string string nonce = request.getParameter ("nonce"); // number daory screStr. request.getParameter ("echostr"); // string aleatory // clasificar token de diccionario, timestamp, nonce string [] params = new String [] {token, timestamp, nonce}; Arrays.sort (params); // empalme tres cadenas de parámetros en una cadena para la cadena de cifrado Sha1 ClearText = Params [0] + Params [1] + Params [2]; Algorithm de cadena = "sha-1"; String firma = new String (hex.encodeHex (messageDigest.getInstance (algorithm) .digest ((clearText) .getBytes ()), true)); // El autor obtiene la cadena cifrada con la firma, identificando que la solicitud proviene de weChat if (firature.equals (sign)) {Response.getWriter (). Print (ECHOSTR); }} catch (Exception e) {E.PrintStackTrace (); }}2. Configuración de JS
3. Obtenga los parámetros JS de la página de intercambio y obtenga token y boleto para agregar al caché
/** * Nombre del método: getwxconfig </br> * Descripción detallada: Obtener información de configuración de WeChat </br> * desarrollador: gy * @param request * @return Explique el significado del valor de retorno * @throws Explique la condición para esta excepción */@Override public Objeto> (); String appid = wxConfigure.getAppid (); // requerido, el identificador único de la cadena de cuenta oficial requestUrl = request.getRequestUrl (). ToString (); String accessToken = null; Cadena jsapiticket = null; Cadena url = ""; String Timestamp = Long.ToString (System.CurrentTimemillis () / 1000); // requerido, genere la cadena de marca de tiempo de firma noncestr = uuid.randomuuid (). ToString (); // requerido, genere la cadena aleatoria de firma // Aquí consultamos primero en la memoria caché, y el tiempo válido de la token de acceso debe configurarse en la interfaz de llamada consulta caché // redistemplate.opsforvalue (). GetOperations (). Delete (prefijo); // accessToken = (String) redistemplate.opsforValue (). get (prefijo); Token AccessTokenFromredis = getAccessTokenFromredis (); AccessToken = AccessTokenFromredis.GetAccessToken (); if (accessTokenFromredis.getAccessToken ()! = NULL) {jsapiticket = (string) redistemplate.opsforValue (). get (prefixticket); if (jsapiticket == null) {url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accesstoken + "& type = jsapi"; JsonObject json = httprequest (url, "get", null); if (json! = null) {jsapiticket = json.getString ("ticket"); redistemplate.opsforvalue (). set (prefixticket, jsapiticket); Redistemplate.EXPIRE (prefiCticket, Integer.ParseInt (wxConfigure.getExpireTime ()), TimeUnit.seconds); }}} Cadena firma = ""; // Tenga en cuenta que los nombres de los parámetros aquí deben ser todos en minúsculas y se debe ordenar la cadena Sign = "jsapi_ticket =" + jsapiticket + "& noncestr =" + noncestr + "× tamp =" + timestamp + "& url =" + requestUrl; Pruebe {MessageDigest crypt = MessageDigest.getInstance ("SHA-1"); crypt.reset (); crypt.update (firm.getBytes ("utf-8")); firma = bytetohex (crypt.digest ()); } Catch (nosuchalgorithMexception e) {E.PrintStackTrace (); } catch (UnsupportedEncodingException e) {E.PrintStackTrace (); } ret.put ("appid", appid); ret.put ("TimeStamp", TimeStamp); ret.put ("Non -Cestr", Non -CESTR); ret.put ("firma", firma); regresar ret; }/** * Nombre del método: bytetohex </br> * Descripción detallada: Método auxiliar de cifrado de cadena </br> * desarrollador: gy </br> * @param hash * @return explicación del valor de retorno significado * @throws explicación de la condición */string static privado bytetohex (byte final [] ha hash) {formatter formatter para (byte b: hash) {formatter.format ("%02x", b); } String result = formatter.ToString (); formatter.close (); resultado de retorno; } / ** * Obtener acceso a Redis, especifique el valor de cadena de la clave, tiempo de vencimiento 7200S * * @param Key * @return * / public token getAccessTokenFromredis () {token token = null; String EvalStoken = (String) redistemplate.opsforvalue (). Get (wxConfigure.getTokenkey ()); if (null! = evaltoken &&! "". Equals (evaltoken)) {token = new token (); Token.SetAccessToken (EvaltToken); token de regreso; } else {token = CommonWxUtil.getToken (wxconfigure.getAppid (), wxconfigure.getSecret ()); redistemplate.opsforvalue (). set (wxConfigure.getTokenkey (), token.getAccessToken ()); Redistemplate.EXPIRE (wxConfigure.getTokenkey (), Integer.ParseInt (wxConfigure.getExpireTime ()), TimeUnit.Seconds); token de regreso; }}4. Introducción de JS relacionado con la página
<script type = "text/javascript" src = "http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> </script> <script type = "text/javascript" src = "https://res.wx.qq.com/open/js/jweixin-1.0.0.0.js" type = "Text/JavaScript"> // WeChat Information y Llame Configuration // WeChat Information and Call Configuration Var Signature = $ ("#Signature"). Val (); var appid = $ ("#appid"). val (); var appid = $ ("#appid"). val (); var timestamp = $ ("#timestamp"). val (); var noncestr = $ ("#noncestr"). val (); var userId = $ ("#userId"). val (); var productName = 1; alerta (firma); wx.config ({debug: false, appid: appid, timestamp: timestamp, noncestr: non -Cestrature: Signature, jsapilist: ['onMenusharetImeline', 'onMenushareAppMessage', 'OnMenushareqq', 'Onmenushareweibo', 'OnmenusheSheNone']; wx.ready (function () {var isok = true; wx.checkjsapi ({jsapilist: ['onMenusharetImeline'], fail: function (res) {alert ("La versión de wechat es demasiado baja, y la función compartida con amigos no es compatible!"); ISOK = falso;}, éxito: function (res) {alerta Qq compartiendo ");};};} status of the "Share to Moments" button and customize the sharing content interface wx.onMenuShareTimeline({ title: 'Part 6: How to customize the WeChat public account menu for practical Java version of WeChat public platform development', desc: 'Part 6: How to customize the WeChat public account menu for practical Java version of WeChat public platform development', link: 'http://4d536256.ngrok.io/login', imgurl: 'http://busc.4gogo.com/media/media/img/home-show-a.png', éxito: function (res) {alerta (json.stringify (res)); $ .AJAX ({type: "get", url: 'insertCollectshare', data: {userId: userId,}, dataType: "json", async: false, suctar: function (data) {alerta (200);}, error: function (data) {var rurl = xhr.getResponseHeader ('ContentPath'); Window.llCre.href; }); wx.onmenushareAppMessage ({Título: 'Parte 7: Cómo obtener información básica de usuarios de WeChat en el desarrollo de WeChat Public Platform', // Compartir el título Desc: "Parte 7: Cómo obtener información básica de usuarios de Wechat en el desarrollo de la plataforma pública Wechat ',/Share Descripción Enlace de descripción:' http: //4d536256.ngrok.io/login ', Compartir el enlace de descripción: Http: //4d536256.ngrok.io/LoGin', Comparta el enlace de descripción: http: //4d536256. 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // compartir el tipo de icono: 'enlace', // Tipo de intercambio, música, video o enlace predeterminado es el enlace}); Versión de Java de Wechat Public Platform Development ', // Compartir título Desc:' Parte 6: Cómo personalizar el menú de la cuenta pública de Wechat para la versión práctica de Java de Wechat Public Platform Development ', // Compartir Descripción Enlace:' http://4d536256.ngrok.io/login ', // compartir enlace imgurl: 'http://busc.4gogo.com/media/media/img/home-show-a.png', // share icon éxito: function () {// función de devolución de llamada ejecutada después del usuario confirma compartir}, cancelar: function () {// función de devolución de llamada ejecutada después del usuario CANCELL wx.onmenushareweibo ({Título: 'Compartir en Tencent Weibo Title', // Compartir el título Desc: 'Compartir a Tencent Weibo Descripción', // Compartir Descripción Enlace: 'http://4d536256.ngrok.io/login', // Compartir enlace imgurl: 'http://busc.4gogo.com/media/media/img/home-show-a.png', // share icon éxito: function () {// función de devolución de llamada ejecutada después del usuario confirma compartir}, cancelar: function () {// Función de devolución de llamada ejecutada después de que el usuario Cance Cancels Compartir}}); wx.onmenushareqzone ({Título: 'Compartir en QQ Space Título 1111111111111111', // Compartir título Desc: 'Compartir en QQ Space Descripción 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 'http://4d536256.ngrok.io/login', imgurl: 'http: //busc.4ggogo.com/media/media/img/home-show-a.png', // compartiendo icon éxito: function () {// la función de devolución de llamada ejecutada después del usuario confirma el intercambio}, cancel: function () {) El usuario cancela el intercambio}});Nota: La ruta transferida es la ruta del nombre de dominio configurada, de lo contrario no se puede llamar, y el tamaño de la imagen no puede ser mayor de 300k
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.