微信公众号开发系列(一)服务器配置

匿名 (未验证) 提交于 2019-12-02 23:43:01

微信公众号开发java系列(一)

点击之后你就可以看到这样的界面

点击服务器配置中的修改配置,进去之后可以看到

对于服务器配置来说,我们需要设置url和token,aeskey和消息验证有关,下面的的消息加解密方式可以自由选择,开发的时候可以选择兼容。我们在微信公众号中申请一个测试账号。进入之后可以看到

测试账号会提供给开发者appid和appsecret,token可以自己自定义一个加密字符串32位以内就可以了。这里的url可以使用域名。本地调试的话就使用ngrok做一个内网穿透就可以了。url指向接受微信服务器消息的接口地址。

微信官方给出的是将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。

  /**      * @param request      * @return      * @description 验证微信的token      * @author zhou      * @date 2019/6/1      */     @GetMapping("/tokenVerification")     public void tokenVerification(HttpServletRequest request,                                   HttpServletResponse response) {         //微信加密签名         String signature = request.getParameter("signature");         //时间戳         String timestamp = request.getParameter("timestamp");         //随机数         String nonce = request.getParameter("nonce");         //随机字符串         String echostr = request.getParameter("echostr");         try {             //获取sha1加密             String sha1Result = SHA1.getSHA1(wxOfficialsAccountConfiguration.getToken(),                     timestamp, nonce);             //判断和签名是否一致             if (sha1Result.equals(signature)) {                 response.getWriter().write(echostr);             }else{                 throw new WeChatOaException(WeChatOaErrorEnum.NOT_FROM_WECHAT);             }         } catch (Exception e) {             log.error(e.getMessage());         }     }

根据文档微信将会发送加密签名signature、时间戳timestamp、随机数nonce、随机字符串echostr。echostr是最后验证通过要返回给微信服务器的,我们先放一边。按照步骤对另外三个时间戳,随机数,和我们配置的token参数进行加密,

(1)进行字典排序

(2)将数组拼接成String,进行sha1加密

(3)和微信发来的signature作比较,判断是否相等

注意,微信公众号配置的token和这里进行加密的token必须一致。因为这个signature就是用配置的token得到的。

如果相等就将之前的随机字符串echostr返回

 /**      * 用SHA1算法生成安全签名      * @param token 票据      * @param timestamp 时间戳      * @param nonce 随机字符串      * @return 安全签名      * @throws AesException      */     public static String getSHA1(String token, String timestamp, String nonce) throws AesException {         try {             String[] array = new String[] { token, timestamp, nonce};             StringBuffer sb = new StringBuffer();             // 字符串排序             Arrays.sort(array);             for (int i = 0; i < 3; i++) {                 sb.append(array[i]);             }             String str = sb.toString();             // SHA1签名生成             MessageDigest md = MessageDigest.getInstance("SHA-1");             md.update(str.getBytes());             byte[] digest = md.digest();              StringBuffer hexstr = new StringBuffer();             String shaHex = "";             for (int i = 0; i < digest.length; i++) {                 shaHex = Integer.toHexString(digest[i] & 0xFF);                 if (shaHex.length() < 2) {                     hexstr.append(0);                 }                 hexstr.append(shaHex);             }             return hexstr.toString();         } catch (Exception e) {             e.printStackTrace();             throw new AesException(AesErrorEnum.COMPUTE_SIGNATURE_ERROR);         }     }

至此,微信服务器配置就结束了。

文章来源: https://blog.csdn.net/m0_37723564/article/details/91358043
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!