看到一个朋友弄了微信公众帐号,我自己也弄了一个。根据说明,要想成为开发者,需要有一个自己的网站,并且处理校验一个微信传来的GET请求。我就按要求弄了一个。
具体的要求如下:
[url]http://mp.weixin.qq.com/wiki/index.php?title=消息接口指南[/url]

下面是我的实现。先写一个Servlet

package me.gimli.wx.echo;

import java.io.IOException;

import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

import me.gimli.wx.util.SignatureChecker;

@SuppressWarnings("serial")public class EchoServlet extends HttpServlet {

   @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {

        String signature = req.getParameter("signature");      String timestamp = req.getParameter("timestamp");      String nonce = req.getParameter("nonce");      String echostr = req.getParameter("echostr");

        SignatureChecker checker = new SignatureChecker();

     if (checker.checkSigature(signature, timestamp, nonce)){          resp.getWriter().print(echostr);      }else {           resp.getWriter().print("validation failed. Bye");       }

   }

}

SignatureChecker 工具类:



package me.gimli.wx.util;

import java.security.MessageDigest;import java.util.Arrays;

public class SignatureChecker {

    public boolean checkSigature(String signature,String timestamp,String nonce){

       //Define token        String token = "ABC123def456";

       //Sort array      String[] tmparr = {token,timestamp,nonce};       try {         Arrays.sort(tmparr);      } catch (NullPointerException e){         return false;     }

       //implode array       StringBuilder builder = new StringBuilder();     for (int i=0;i<tmparr.length;i++){          builder.append(tmparr[i]);        }     String raw = builder.toString();

       //SHA-1       MessageDigest md = null;     byte[] b = null;     try {         md = MessageDigest.getInstance("SHA-1");           b = md.digest(raw.getBytes("UTF-8"));      }     catch(Exception e) {          e.printStackTrace();      } 

      //Turn sha-1 result to HexString      String result = "";        for (int i=0; i < b.length; i++) {          result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );       }

       //Compare and return      if (result.equals(signature)){            return true;      }else{            return false;     }         }}

然后再在web.xml中部署上就可以了

  <servlet>    <servlet-name>echo</servlet-name>     <servlet-class>me.gimli.wx.echo.EchoServlet</servlet-class>  </servlet>

  <servlet-mapping>      <servlet-name>echo</servlet-name>     <url-pattern>/saldar/*</url-pattern>  </servlet-mapping>

最后以微信广告语结束:再小的个体,也有自己的品牌。

微信平台申请消息接口时Signature校验的Servlet实现相关推荐

  1. java微信开发模板消息接口使用

    微信开发--模板消息接口 http://blog.csdn.net/u010486495/article/details/46985729 微信开发者文档:模板消息接口 模板消息运营规范:http:/ ...

  2. 基于微信平台做视频直播时,如何裂变引流吸粉

    一个背景:微信也许是国内使用率最高,覆盖面最广的APP,在2017年微信公开课中,张小龙发布的<2016微信数据报告>显示,微信平均日活达到7.68亿.足以说微信平台的重要性,那么来说说, ...

  3. 微信公众号消息接口PHP,微信公众平台消息接口校验与消息接口响应实例

    本文实例讲述了微信公众平台消息接口校验与消息接口响应的方法.分享给大家供大家参考.具体分析如下: 开发微信公众平台消息接口过程中,我们首先需要验证消息接口的有效性,验证通过后,才可以进行其他开发,首先 ...

  4. 微信公众平台消息接口开发之校验签名与消息响应合并

    微信公众平台在启用接口的时候使用valid函数进行验证, define("TOKEN", "guoxiongjie"); $wechatObj = new we ...

  5. 微信开放平台申请移动应用时如何获取已经安装的第三方app的应用签名

    一.问题描述 当我们在微信开放平台申请移动应用时,进行到了如下步骤,需要获取应用签名,下面给出解决方案 二.问题解决 先来到微信提供的获取应用签名网页下载获取应用签名的app,网址如下: https: ...

  6. 微信公众平台java接口_微信公众平台自动消息接口(JAVA)

    一个小DEMO,通过发送地理位置,获取今明两天的气温情况. 代码部署在了OpenShift平台:地区定位以及天气服务由雅虎提供. 微信文档: http://mp.weixin.qq.com/cgi-b ...

  7. 关于微信分享申请应用APPkey时该注意的地方

    在这里记录一下公司项目集成微信分享的踩过的坑. 我们都知道要集成第三方sdk时,都要去申请一个APPkey来作为你的APP的唯一标识,微信也不例外. 在微信开放平台创建一个新的应用时,需要填写APP的 ...

  8. 微信小程序连接后端接口时的wx.request写法

    index.wxml中的授权登录代码: <button class='btn-check' bindtap="login" wx:if="{{agree != '' ...

  9. 微信支付-“申请退款”接口遇到curl出错,错误码:58解决方案

    微信支付后 退款,接口遇到curl出错,错误码:58 这个问题基本上是证书没对应上(微信支付不需要申请证书,退款要用到证书),证书要去微信商户号后台(账户中心-API安全-申请证书)下载,已经下载过忘 ...

最新文章

  1. Dorado用法与示例
  2. HarmonyOS 实现跑马灯效果
  3. SpringBoot 获取 application.properties 文件中的内容方法 【学习记录】
  4. IntelliJ IDEA 2020.2.4款 神级超级牛逼插件推荐
  5. 图像显著区域检测代码及其效果图 saliency region detection
  6. 2019.07.11
  7. Linux给GCC编译的应用程序创建服务
  8. 新手必看一位老司机的十年开车经验
  9. javascript中实例对象和构造函数关系、原型语法、原型链、call实现继承、apply调用函数、bind拷贝函数、拷贝继承、class类、super、严格模式、高阶函数、闭包、递归、es6简介
  10. Flask wtforms
  11. 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码
  12. 在emacs里用w3m浏览网页
  13. python语言是胶水语言吗_为什么只有python是胶水语言?
  14. mysql 长连接_使用mysql的长连接
  15. python的方向_Python有哪些就业方向
  16. 《PMP学习笔记》11.6 子过程:规划风险应对
  17. 《胡雪岩 1》——读书笔记
  18. mysql多表关联查询慢_mysql数据库多表关联查询的慢SQL优化
  19. LeetCode-347. Top K Frequent Elements [C++][Java]
  20. PyTorch nn.CrossEntropyLoss() dimension out of range (expected to be in range of [-1, 0], but got 1)

热门文章

  1. python group() 和 groups()的区别
  2. moment.js 的方法总结
  3. 近视后有什么办法可以恢复吗
  4. 网络测速linux,Linux系统下的网络带宽测速
  5. MAC jenkins生成allure报告失败提示:错误:找不到无法加载主类 io.qameta.allure.CommandLine
  6. 运行vue项目报DONE Build complete. The dist directory is ready to be deployed.解决办法
  7. 计量经济学 知识点汇总 期末复习用
  8. 计算机的新兴技术在测绘工程领域的应用,测绘新技术在测绘工程测量中应用的探讨张晨(原稿)...
  9. HWAutoTool 自动化工具操作手机模拟器文档介绍
  10. 一起来学自然语言处理----加工原料文本