码迷,mamicode.com
首页 > 微信 > 详细

微信开发:微信服务器验证通过

时间:2015-08-01 22:06:07      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:微信接入   微信开发   微信公众号   java微信   

申请自己的微信公众号,部署后台服务器

公众号 SuperLishun,想要源码的可以关注公众号,给我留言。

百度微信公众号,首先要申请自己的微信公众号,我只申请了个订阅号,先把基本的调通,如下图技术分享
这里我们可以手动群发图文消息,设置自动回复消息,设置目录等等,但是作为开发者,我们要学着使用微信的API去做这些事情。
首先你需要有一个服务器,用来供微信调用,我这里用的是阿里云的服务器,作为测试1核2G内存就够了,1个月也就是100块钱,可以用来玩玩,如下图
技术分享
这两个基础的东西准备好后,就可以开始配置自己的微信后台服务器了,将微信的页面拉到最下面有个开发者,点击,然后开启开发者,注意开发者开启后,手动设置的那些自动回复的等功能将不能生效了,然后设置好自己的服务器URL,token等。URL就是JAVA程序中的事件,比如http://192.168.0.1:80/wechat/accept ,微信后台必须设置80端口。如下图
技术分享
阿里ECS服务器我安装的是Java环境,已经帮我们装好了ngnix,Java,tomcat等,将ngnix中的拦截打开,允许自己的IP段访问,我在用的时候tomcat不行,换上自己的tomcat,就OK了,要先发布好后台程序,再填写微信的配置才能通过,微信后台会向你提供的URL发请求来验证服务器是否可用。

代码解析

贴出Controller的代码,如下

@Controller
@RequestMapping({"/wechat"})
public class WechatController
{
  @RequestMapping(method={org.springframework.web.bind.annotation.RequestMethod.GET, org.springframework.web.bind.annotation.RequestMethod.POST})
  public String wechat(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");
    Boolean isGet = Boolean.valueOf(request.getMethod().equals("GET"));
    System.out.println(DateUtil.format(new Date(), "HHmmssSSS") + "|signature:" + signature + " ,timestamp:" + timestamp + " ,nonce:" + nonce + " ,echostr:" + echostr);
    /*GET请求:开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。*/
    if (isGet.booleanValue())
    {
    /**  加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信*/
      if (Tools.checkSignature(WechatConfig.TOKEN, signature, timestamp, nonce))
      {
        response.getWriter().write(echostr);
        return null;
      }

      System.out.println(DateUtil.format(new Date(), "HHmmssSSS") + "|微信请求非法签名, 请求被拒绝");
      return null;
    } else  
    /* GET请求只做服务器验证,POST请求处理所有微信来的事件 */
doPost(request, response);

    return null;
  }

  private void doPost(HttpServletRequest request, HttpServletResponse response)
  {
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/xml");
    OutMessage oms = new OutMessage();
    try
    {
      ServletInputStream in = request.getInputStream();

      XStream xs = XStreamFactory.init(false);
      xs.alias("xml", InMessage.class);
      String xmlMsg = Tools.inputStream2String(in);
      System.out.println(xmlMsg);
      InMessage msg = (InMessage)xs.fromXML(xmlMsg);

      WechatUser wechatUser = new WechatUser();
      wechatUser.setOpenId(msg.getFromUserName());

      String type = msg.getMsgType().toLowerCase();
      /* 根据微信传过来的type判断是属于哪种类型,然后做相应处理,下面根据自己需要来处理,把信息写到oms 中*/
      switch (type)
      {
      case "text":
        System.out.println(type);
        break;
      case "voice":
        System.out.println(msg);
        break;
      case "event":
        break;
      }

      if (oms != null)
      {
        oms.setCreateTime(Long.valueOf(new Date().getTime()));
        oms.setToUserName(msg.getFromUserName());
        oms.setFromUserName(msg.getToUserName());

        xs = XStreamFactory.init(false);
        xs.alias("xml", OutMessage.class);
        xs.alias("item", Articles.class);
        xs.toXML(oms, response.getWriter());
        System.out.println(DateUtil.format(new Date(), "HHmmssSSS") + "|信息回馈成功");
        System.out.println(DateUtil.format(new Date(), "HHmmssSSS") + "|" + xs.toXML(oms));
      }
    }
    catch (Exception e)
    {
      System.out.println(e.getLocalizedMessage());
    }
  }
}

至此就可以验证微信服务器,成为开发者了。后续有时间我会列出其他微信API的使用方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

微信开发:微信服务器验证通过

标签:微信接入   微信开发   微信公众号   java微信   

原文地址:http://blog.csdn.net/u011506468/article/details/47190007

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!