微信小程序> 小程序配置服务器java代码  消息推送配置Token令牌错误校验失败

小程序配置服务器java代码  消息推送配置Token令牌错误校验失败

浏览量:3196 时间: 来源:普通先生

小程序

配置小程序消息推送。

小程序

之前一直报 token 错误 

    

小程序配置消息推送,微信服务器会发送验证

    @RequestMapping(method = RequestMethod.GET)    @ResponseBody    public void get(HttpServletRequest request, HttpServletResponse response) throws Exception{              // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。          String signature = request.getParameter("signature");          // 时间戳          String timestamp = request.getParameter("timestamp");          // 随机数          String nonce = request.getParameter("nonce");          // 随机字符串          String echostr = request.getParameter("echostr");                        PrintWriter out = null;        try {            out = response.getWriter();            // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败            if (SignUtil.checkSignature(signature, timestamp, nonce)) {                out.print(echostr);              out.flush();   //这个地方必须画重点,消息推送配置Token令牌错误校验失败,搞了我很久,必须要刷新!!!!!!!          }       } catch (IOException e) {            e.printStackTrace();        } finally {            out.close();            out = null;             }      } 

验证签名是否正确
/**      * 验证签名      * @param signature      * @param timestamp      * @param nonce      * @return      */      public static boolean checkSignature(String signature, String timestamp, String nonce) {          //与token 比较        String[] arr = new String[] { TOKEN, timestamp, nonce };          // 将token、timestamp、nonce三个参数进行字典排序          Arrays.sort(arr);                 StringBuilder content = new StringBuilder();                  for (int i = 0; i < arr.length; i++) {              content.append(arr[i]);          }                MessageDigest md = null;          String tmpStr = null;            try {              md = MessageDigest.getInstance("SHA-1");                          // 将三个参数字符串拼接成一个字符串进行sha1加密            byte[] digest = md.digest(content.toString().getBytes());            tmpStr = byteToStr(digest);         } catch (NoSuchAlgorithmException e) {              e.printStackTrace();          }          content = null;          // 将sha1加密后的字符串可与signature对比          return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;      }  

使用的工具方法

/**      * 将字节数组转换为十六进制字符串      *       * @param byteArray      * @return      */      private static String byteToStr(byte[] byteArray) {          String strDigest = "";          for (int i = 0; i < byteArray.length; i++) {              strDigest += byteToHexStr(byteArray[i]);          }          return strDigest;      }        /**      * 将字节转换为十六进制字符串      *       * @param mByte      * @return      */      private static String byteToHexStr(byte mByte) {          char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };          char[] tempArr = new char[2];          tempArr[0] = Digit[(mByte >>> 4) & 0X0F];          tempArr[1] = Digit[mByte & 0X0F];            String s = new String(tempArr);          return s;      }  



版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎