美文网首页
微信开发-基础篇

微信开发-基础篇

作者: 简繁之间 | 来源:发表于2018-03-14 13:49 被阅读0次

之前写了微信开发的配置篇,很多朋友说还是不了解微信怎么与后台交互的,但是想想写的太深还不如去看微信开发文档,所以写一个基础变介绍下微信与后台的交互

一、怎么勾搭上微信

其实很多人很好奇,我们是怎么实现与微信建立联系的,如果看过前一篇的朋友都了解,需要一个配置,但是这个配置的后台怎么写呢?其实就是一个相同路径的post和get请求代码如下

@RequestMapping(value = "/service", method = RequestMethod.GET)//value可以自定义

@ResponseBody

public void  doGetMethod(HttpServletRequest request, HttpServletResponse response) throws Exception{ 

/*String signature = request.getParameter("signature"); 

      // 时间戳 

      String timestamp = request.getParameter("timestamp"); 

      // 随机数 

      String nonce = request.getParameter("nonce");  */

      // 随机字符串 

      String echostr = request.getParameter("echostr"); //没有加密直接返回,加密了详见开发者文档

      PrintWriter out = response.getWriter(); 

      out.print(echostr);

      out.flush();

      out.close();

  } 

首先吐槽下自己的代码,我不知道这个的里面怎么调行间距,直接从IDEA 复制过来的

这样微信在第一次发动过来GET信息就得到了想要的验证,等于告诉微信,亲~,开业了,你可以来消费了

二、怎么跟微信互通有无

到这了就有人疑问了,微信那后面微信过来的消息呢?别急,就像门店一样开业只有一次,后面的不会每次来都是开业流程了,所以下面用到了PSOT请求的接口

@RequestMapping(value= "/service", method= RequestMethod.POST)

@ResponseBody

  public final void doPostMethod(HttpServletRequest request, HttpServletResponse response){

  // 响应消息  调用核心业务类接收消息、处理消息

      PrintWriter out = null;

  try {

      // 将请求、响应的编码均设置为UTF-8(防止中文乱码)

  request.setCharacterEncoding("UTF-8");

  response.setCharacterEncoding("UTF-8");

  String respMessage =coreService.processWchatMessage(request);

  out = response.getWriter();

  out.print(respMessage);

  out.flush();

  } catch (Exception e) {

      logger.error("'wechat index' has an exception :"+Thread.currentThread().getId()+"|"+e);

      e.printStackTrace();

  } finally{

      if(out!=null){

        out.close();

}

}

  } 

同样请忽略掉代码样式,在IDEA上代码样式很规范的,╮( ̄▽ ̄")╭ 

跟get接口一样,几乎是一模一样,但是注意下面这个代码,这就是微信的核心处理类,同样你可以随意命名,返回一个微信明白的XML字符串就行了

String respMessage =coreService.processWchatMessage(request);

三、怎么知道用户要什么,我们该给什么

下面看看 processWchatMessage里面都干了些什么

public final String processWchatMessage(HttpServletRequest request) {

      String respMessage = "success";

      Map requestMap = MessageUtil.parseXml(request);// xml请求解析

      String toUserName        = requestMap.get("ToUserName");

      String fromUserName      = requestMap.get("FromUserName");

      String msgType          = requestMap.get("MsgType");// 消息类型

      if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {

            String eventType = requestMap.get("Event");

          if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {

              redisClient.del(fromUserName);

}

}

      TextMessage textMessage =  new TextMessage(fromUserName,toUserName);

      textMessage.setContent("欢迎关注车值销公众号!");

      respMessage = MessageUtil.wxMessageToXml(textMessage);

      return respMessage;

  }

首先是解析微信发来的信息,我是把一个XML解析成一个map,当然有很多种解析方法,你也可以解析成OBJ,但是公司有一个既有的XML 解析,就不要再去做过多的没必要的事情了,下面是XML解析方法以供参考,技术达人可以忽略

public final static Map parseXml(final HttpServletRequest request){

      // 将解析结果存储在HashMap中

      Map map = new HashMap();

      InputStream inputStream = null;

      try {

  // 从request中取得输入流

  inputStream = request.getInputStream();

  // 读取输入流

  SAXReader reader = new SAXReader();

  Document document = reader.read(inputStream);

  reader=null;

  // 得到xml根元素

  Element root = document.getRootElement();

  // 得到根元素的所有子节点

  List elementList = root.elements();

  root=null;

  // 遍历所有子节点

  for (Element e : elementList)

      map.put(e.getName(), e.getText());

} catch (Exception e) {

      logger.error("wx:ex|parsexml|"+e);

      e.printStackTrace();

} finally{

  try {

      if(inputStream!=null){

        inputStream.close();

        inputStream = null;

}

  } catch (IOException e) {

      logger.error("wx:ex|parsexml|"+e);

      e.printStackTrace();

}

}

      return map;

  } 

转换成自己定义的格式,这里微信根据在公众号中的不同操作返回不同的消息类型,而XML参数也有所不同,但是,有几个必定会有的且我们肯定要用到的参数:ToUserName、FromUserName、MsgType

MsgType    : 消息类型

ToUserName   : 开发者微信号

FromUserName : 发送方帐号(一个OpenID)

知道这些参数,那么下步你就可以判断谁在公众号做了什么类型的操作,这个类型操作的信息是什么,然后你这个类型的这个消息要给返回什么东西,把你的消息封装成一个微信知道的XML 字符串然后返给微信,微信就会根据你定义的返回消息的类型,然后展示给用户,这样就完成了用户在微信操作,然后我们返回特定的内容,我上面的processWchatMessage就是一个简单的关注发送文本消息,取消关注删除用户信息。

欢迎各路大神留言批评指正与讨论,小程序基础篇酝酿中

相关文章

网友评论

      本文标题:微信开发-基础篇

      本文链接:https://www.haomeiwen.com/subject/kyffqftx.html