微信开发-基础篇

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

一、怎么勾搭上微信

其实很多人很好奇,我们是怎么实现与微信建立联系的,如果看过前一篇的朋友都了解,需要一个配置,但是这个配置的后台怎么写呢?其实就是一个相同路径的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就是一个简单的关注发送文本消息,取消关注删除用户信息。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容