Alguns pequenos passos no desenvolvimento da interface de compartilhamento do WeChat, o conteúdo específico é o seguinte
1. Configurar informações da interface para verificação
O código é o seguinte:
/** * salte para acessar o endereço não autenticado * * @param request * @return login página * @throws exceção */@requestMapping (value = "/checkwxDomainurl", método = requestmethod.get) public void checkwxdomAnUrl (httpsletrequest request) throws {{{{{{ URL do endereço do servidor preenchido e a solicitação GET carrega a String de parâmetro Signature = request.getParameter ("Signature"); // assinatura de criptografia weChat (token, timestamp, nonce.) String timestamp = request.getParameter ("Timestamp"); // timestamp/ timeCe = »getParParAmeter ("NonCeMence"); request.getParameter ("ECHOSTR"); // String aleatória // Classifique o token do dicionário, o timestamp, nonce string [] params = new string [] {token, timestamp, nonce}; Arrays.sort (params); // emenda três seqüências de parâmetros em uma string para string shA1 string cleartext = params [0] + params [1] + params [2]; String algorithm = "sha-1"; String signo = new string (hex.encodehex (Messagedigest.getInstance (algoritmo) .Digest ((clearText) .getBytes ()), true)); // O autor obtém a string criptografada com a assinatura, identificando que a solicitação vem do weChat if (signeture.equals (signo)) {Response.getWriter (). Print (ecoStr); }} catch (Exceção e) {e.printStackTrace (); }}2.js Configuração
3. Obtenha os parâmetros JS da página de compartilhamento e obtenha token e bilhete para adicionar ao cache
/** * Nome do método: getwxconfig </br> * Descrição detalhada: Obtenha informações de configuração do WeChat </br> * Desenvolvedor: gy * @param request * @return Explique o significado do valor de retorno * @throws Explique a condição para esta exceção */@Override public map <string> getwxconfig (HTTStlestlesterqu. Objeto> (); String appid = wxconfigure.getAppid (); // necessário, o identificador exclusivo da conta oficial string requesturl = request.getRequesturl (). Tostring (); String accessToken = null; String jsapiticket = null; String url = ""; Timestamp String = Long.toString (System.CurrentTimemillis () / 1000); // necessário, gerar o timestamp string de assinatura noncestr = uuid.randomuuid (). ToString (); // Necessário, gerar a string aleatória da assinatura // aqui, consultarmos o cache primeiro, e o tempo válido do acesso precisa ser definido na interface da interface de chamada cache // redistemplate.opsforvalue (). GetOperations (). Delete (prefixo); // AccessToken = (String) Redistemplate.OpsforValue (). Get (prefixo); 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 (prefixticket, integer.parseint (wxconfigure.getexpiretime ()), timeunit.seconds); }}} String assinatura = ""; // Observe que os nomes dos parâmetros aqui devem ser minúsculos e devem ser encomendados string signo = "jsapi_ticket =" + jsapiticket + "& noncestr =" + não -cest + "× tamp =" + timestamp + "& url =" + requesturl; tente {Messagedigest cript = Messagedigest.getInstance ("sha-1"); Crypt.Reset (); Crypt.Update (Sign.GetBytes ("UTF-8")); assinatura = bytetoHex (Crypt.Digest ()); } catch (nosuchalgorithMexception e) {e.printStackTrace (); } Catch (UnsupportEdEncodingException e) {E.PrintStackTrace (); } ret.put ("Appid", Appid); ret.put ("timestamp", registro de data e hora); ret.put ("não -cest", não -CEST); ret.put ("assinatura", assinatura); retornar ret; }/** * Nome do método: bytetoHex </br> * Descrição detalhada: Método auxiliar de criptografia de string </br> * Desenvolvedor: gy </br> * @param hash * @return explicação da forma de retorno () @THOWS Explicação da condição para esta exceção */private static string bytohex (Fination [FinalTeTE [) [) [] @THOWS Explicação da condição para essa exceção */private static string bytohex (Fination [FinalTeTE [FinatrowSe []; para (byte b: hash) {formatter.format ("%02x", b); } String result = formatter.toString (); formatter.close (); resultado de retorno; } / ** * Obtenha o AccessToken do redis, especifique o valor da string da chave, tempo de validade 7200s * * @param key * @return * / public token getAccessTokenFromredis () {token token = null; String avaliarToken = (String) Redistemplate.OpsForValue (). Get (wxconfigure.getTokenKey ()); if (null! = avalieToken &&! "". Equals (avaliarToken)) {token = new Token (); token.setAccessToken (avaliação); Token de retorno; } 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 retorno; }}4. Introdução de Js relacionados à 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.js"> </script> <script type = "text/javascript"> // Informações WeChat e ligue para a configuração // Wechat Information and Call Configuration Var Signature = $ ("#"# var appid = $ ("#appid"). val (); var appid = $ ("#appid"). val (); var timestamp = $ ("#timestamp"). val (); var noncestr = $ ("#noncest"). val (); var userID = $ ("#userID"). val (); var ProductName = 1; alert(signature);wx.config({ debug: false, appId:appId , timestamp:timestamp, nonceStr: nonceStr, signature:signature, jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] }); wx.ready (function () {var isok = true; wx.checkjsapi ({jsapilist: ['onMenusharetimeline'], falha: function (res) {alert ("versão weChat é muito baixa e a função compartilhada com amigos não é suportada!"); // Obtenha o status de clique do botão "Compartilhe para momentos" e personalize a interface de conteúdo de compartilhamento wx.onmenusharetimeline ({title: 'Parte 6: Como personalizar o menu de conta pública do WeChat para a versão prática do WECHAT LINK: WECHAT Public Platform Development', Desc: 'Part 6: como personalizar o Wechat Public Menu do Menu Practical Jav 'http://4d536256.ngrok.io/login', imgurl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', sucess: function (res) {alert (json.stringify (res); $ .ajax ({type: "get", url: 'insertCollectShare', dados: {userID: userID,}, datatype: "json", assíncrono: false, succen: function (data) {alert (200);}, error: function () {var rurl = xhr.GReSoSoSTENSONSONGER (200); }}; wx.onmenushareAppMessage ({Title: 'Parte 7: Como obter informações básicas dos usuários do WeChat no desenvolvimento da plataforma pública do WeChat', // Compartilhe o título Desc: "Parte 7: Como obter informações básicas dos usuários WeChat no desenvolvimento da plataforma pública wechat ', // Share Descrição Link:' Http: //4d. 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // Sharing Icon Type: 'Link', // Tipo de compartilhamento, música, vídeo ou link, Link Is Link}); Menu para a versão prática de Java do desenvolvimento da plataforma pública do WeChat ', // Compartilhando o título Desc:' Parte 6: Como personalizar o menu da conta pública do WeChat para a versão prática do Java do WeChat Public Platform Development ', // Sharing Descrição Link:' http://4d53625.ngrok.io/loglin ', //socharing link IMM IMG IMMAUR IMG IMG. 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // Compartilhe o sucesso do ícone: function () {// Função de chamada executada após o usuário do usuário compartilhamento}, cancelada: Função () {// Função de retorno executada após o compartilhamento do usuário "}); interface wx.onmenushareweibo ({title: 'Compartilhe com o título do tencent weibo', // Compartilhe título Descrete: 'Compartilhe com tencent weibo description', // Share Descrição Link: 'http://4d536256.ngrok.io/Login', // Share Link Imgurl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // Compartilhe o sucesso do ícone: function () {// Função de chamada executada após o usuário confirma o compartilhamento}, cancelada: function () {// Função de retorno executada após o compartilhamento de sharing}, "}; wx.onmenushareqzone ({title: 'Compartilhe com o título do espaço QQ 111111111111111', // Compartilhar título 22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 'http://4d536256.ngrok.io/login', imgUrl:'http://busc.4ggogo.com/media/media/img/home-show-a.png', // Sharing icon success: function () { // The callback function executed after the user confirms the sharing}, cancel: function () { // The callback function executed Depois que o usuário cancela o compartilhamento}});Nota: O caminho transferido é o caminho do nome de domínio configurado, caso contrário, não pode ser chamado, e o tamanho da imagem não pode ser maior que 300k
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.