Este artigo compartilhou o código específico de digitalizar a conta pública do WeChat para sua referência. O conteúdo específico é o seguinte
etapa
De acordo com a descrição do documento WeChat JS-JDK, existem principalmente as seguintes etapas para implementar a digitalização:
Nome do domínio de ligação
Preencha o nome de domínio no nome do domínio de segurança da interface JS, tenha cuidado para não trazer HTTP, como mostrado na figura:
Introduzir arquivos JS
<script src = "http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> </script>
Verifique a configuração via interface de configuração
$ .AJAX ({url: "$ {PageContext.Request.ContextPath}/weChat/jsapisign", type: "post", dados: {url: location.href.split ('#') [0]}, contentType: 'Application/xwform ('#') [0]}, contentType:' Application/xwform-forms; {wx.config ({debug: false, appid: data.appid, // necessário, gerar o timestamp de assinatura non -cest: data.noncest, // necessário, gerar uma assinatura aleatória de strings: Data.Signature, // requerido, Signature, consulte o apêndice 1 JSAPILIST: ["SCANQR Listas de interface JS;Verificação do visto WeChat JSAPI
mapa público <string, string> jsapisign (string url) {map <string, string> ret = new hashmap <string, string> (16); String nonce_str = checkUtil.create_nonce_str (); String timestamp = checkutil.create_timestamp (); String string1; String assinatura = ""; String jsapi_ticket = wechataccesstokenservice.getjsapiticket (); // Observe que os nomes dos parâmetros aqui devem ser minúsculos e devem ser encomendados string1 = "jsapi_ticket =" + jsapi_ticket + "& noncestr =" + nonce_str + "× tamp =" + timestamp + "& url =" + url; logger.info ("jsapisign ===" + string1); tente {Messagedigest cript = Messagedigest.getInstance ("sha-1"); Crypt.Reset (); Crypt.Update (String1.GetBytes ("UTF-8")); assinatura = 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 ("não -cest", nonce_str); ret.put ("timestamp", registro de data e hora); ret.put ("assinatura", assinatura); logger.info ("jsapisign === url =" + url + "== jsapi_ticket" + jsapi_ticket + "== nonce_str" + nonce_str + "== timestamp" + timessTamp + "== Signature" +) retornar retorno; } public string getjsapiticket () {augewechataccessToken wechataccessTokenMapper.SelectByPrimaryKey (Jsapiticketid); Logger.info ("getjsapiticket ===" + wechatacccessToken.getAccessToken ()); if (strings.isnullorEmpty (wechataccessToken.getAccessToken ()) || wechataccessToken.Getexpiresin () - 100 * 1000 <System.CurrentTimEmillis ()) {// vazio ou expirado, refresh Return refreshjsapiticket (); } else {return wechataccessToken.getAccessToken (); }}Código da camada do controlador
@RequestMapping (value = "/jsapisign", método = {requestMethod.get, requestmethod.post}, produz = mediatype_charset_json_utf8) @ResponseBody Public String jsapisign (string url) {// Add WeChat JS Signature Map <String> SignMap> signop (string> signop (string); retornar json.tojSonstring (signMap); }Página JSP da recepção Código completo
<%@ página contentType = "text/html; charset = utf-8" idioma = "java"%> <%string path = request.getContextPath (); String basalepath = request.getscheme () + ": //" + request.getServername () + ":" + request.getServerport () + path + "/";%> <! Doctype html public "-// w3c // dtd html 4,01 transitória // me me metac"-// w3c // dtd html 4,01 charset = "utf-8"> <meta http-equiv = "x-ua compatível com" content = "ie = edge"> <meta name = "viewport" content = "width = 320.1, scale inicial = 1, escala mínima = 1, máximo-scale = 1, user-scalable = não">> Nofollow "> <title> Digitalize o código para retornar o livro </itit> <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/jquery.js"> </script> href = "../../../ Resources/CSS/bookDetail.css" rel = "Nofollow externo"> </ad Head> <body> <div> <img src = "../../../ Resources/Images/Borrow/Return.png"> <div estilo ") src = "..///../ Recursos/Images/Agradece/ScanReturn.png" id = "scanqrcode1"> </div> </div> <script type = "text/javasscript"> $ .ajax ({url: "$ {PageCoTeXt.Request.ContextPath} location.href.split('#')[0] }, contentType: 'application/x-www-form-urlencoded;charset=utf-8', async: true, success: function (data) { wx.config({ debug: false, appId: data.appid, // Required, the unique identifier of the official account timestamp: data.timestamp, // Required, generate the Timestamp da assinatura Non -Cest: Data.NonceSt, // Necessário, gerar a sequência aleatória da assinatura da assinatura: Data.Signature, // Necessário, consulte o Apêndice 1 JSapilist: ["Scanqrcode"] // Requerido, lista de interfaces JS a serem usadas}); wx.ready (function () {// 9.1.2 Digitalize o código QR e retorne o documento de resultado.QuerySelector ('#scanqrcode1'). OnClick = function () {wx.scanqrcode ({needResult: 1, desc: 'scanqrcode descent', sucess: função (res) {repr). Res.ResultSt; "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx96668744efc2b2de&redirect_uri=http://cx.ngrok.xiaomiqiu.cn/wechat/toReturnDetail?barCode=" + barCode + "& Response_type = Código e Escopo = SNSAPI_BASE & ESTADO = Bindface#Wechat_redirect"; // Inicialize o status da interface JSAPI wx.error (function (res) {alert ("Status retornado chamando WeChat jsapi:" + res.errmsg);}); </script> </body> </html>Nota: Os erros de verificação de assinatura tendem a ocorrer durante o desenvolvimento. Podemos julgar pela consistência dos URLs da frente e de trás. Em segundo lugar, observe que às vezes o erro é porque o AccessToken não está atualizado e precisa ser atualizado novamente.
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.