一、微信公众号项目

SOA架构:面向接口开发,也就是相当于把传统的那种ssh项目的业务逻辑层抽取出来
做成接口。
SSH架构与分布式架构的区别
SSH架构是整个项目的任何模块都在一个项目里面
分布式架构相当于把一个项目,拆分成n个子项目

二、混合开发技术流程

混合开发技术:原生态+H5
什么是原生态:原生态软件,可以理解成桌面应用程序。
混合开发就是客户端技术啊+网站这种模式开发。

三、微信消息退送原理

用户在微信客户端点击发送,消息发送到了微信服务端,微信服务端再以
通讯保温的格式退送到你开发的那个平台。当你的平台受到消息后。代码判断后,对返回消息
进行封装推送到微信服务器端。微信服务器端,再推送给微信客户端。

四、外网映射工具

 natapp 收费ngrok 免费

五、微信公众号接口认证

接口认证方法:
 //服务器验证接口地址@RequestMapping(value = "/dispatcher",method=RequestMethod.GET)public String dispatcherGet(String signature,String timestamp,String nonce, String echostr ) {//1.验证参数Boolean checkSignature = CheckUtil.checkSignature(signature, timestamp, nonce);//2.如果返回true就返回随机数if(!checkSignature) {return null;}return echostr;}

将上面的地址填在微信接口配置上,加密的token自己定义,本地要与线上是一致的。


六、 获取微信客户端发来的信息并且回复。(接入机器人)

/*** 微信动作推送* @return* @throws Exception */@RequestMapping(value = "/dispatcher",method=RequestMethod.POST)public void dispatcherPost(HttpServletRequest request,HttpServletResponse response) throws Exception {//编码格式request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");//1.将xml转换成map格式  获取到微信端发送给我们的信息Map<String, String> resultMap = XmlUtils.parseXml(request);log.info("####收到来之微信消息"+resultMap+"####");//2.判断消息类型String msgType = resultMap.get("MsgType");//3.判断该消息是什么类型的返回结果给微信服务端PrintWriter writer = response.getWriter();//响应消息给微信客户端switch (msgType) {case "text"://如果是文本类型获取该内容String fromUserName = resultMap.get("FromUserName");//从那个用户发过来的String toUserName = resultMap.get("ToUserName");//从那个微信公众号接受过来的String content = resultMap.get("Content");//接受到的内容String msg  = null;if(content.contains("学习")) {msg=  setText("要学习,就感觉学习还玩微信", toUserName, fromUserName);  //回复这里是反过来}if(content.contains("李月")) {msg=  setText("李月是我的开发者", toUserName, fromUserName);  //回复这里是反过来}else {String resultJson = HttpClientUtil.doGet(REQESTURL+content);JSONObject jsonObject = JSONObject.parseObject(resultJson);Integer resultCode = jsonObject.getInteger("result");if(resultCode == 0) {String resultContent = jsonObject.getString("content");msg = setText(resultContent, toUserName,fromUserName);}else {msg = setText("我现在很忙,稍后再回复您吧!", toUserName, fromUserName);}}writer.println(msg);log.info("####发送给微信的消息"+msg+"####");break;default:break;}//走完这个流程过后就关闭流 writer.close();}
//将信息实体转换成xml发送到其他客户端/*** * @param content  回复内容* @param fromUserName 从那个公众号发送* @param toUserName 发送给那个用户* @return*/public String setText(String content,String fromUserName,String toUserName) {TextMessage textMessage = new TextMessage();textMessage.setContent(content);textMessage.setCreateTime(new Date().getTime());textMessage.setFromUserName(fromUserName);textMessage.setToUserName(toUserName);textMessage.setMsgType("text");//将实体类转换成xml格式return XmlUtils.messageToXml(textMessage);}

七、解决微信消息幂等问题

微信官方接受到的消息都有一个唯一不重复的消息id

 解决方案:1、将已经消费过的消息id存放在redis中,当消息再次传来的时候,如果redis中存放了该消息id,就不再重复消费了。

Java架构学习(五十一)微信公众号开发混合开发技术流程微信推送原理外网映射工具使用微信公众号接口认证代码获取微信客户端信息解决微信消息幂等问题相关推荐

  1. Java微信公众号开发-外网映射工具配置 - 星星满天 - 博客园

    一.开发环境准备 1.一个微信公众号 2.外网映射工具(开发调试)如花生壳.ngrok工具 注:与微信对接的URL要具备以下条件a:在公网上能够访问 b:端口只支持80端口 这里使用ngrok.cc: ...

  2. php app 推送原理,微信公众号开发的那点事第一篇——消息推送原理

    微信公众平台从诞生开始到现在已经积累了海量的公众号,这其中有大量的个人运营者.为了让公众号更好滴为粉丝们服务,微信官方提供了很多接口,使用这些接口来丰富公众号的功能对于有些个人运营者来说可能并不熟悉. ...

  3. 在成都Java培训班学习五个多月有用吗?

    不知道"有用"的标准是什么,是能入行上岗工作,还是想只通过几个月的培训一跃成为资深开发攻城狮? 这里不得不给大家泼瓢冷水,短期培训能让你对口上岗工作就很不错了:想要成为技术大佬?大 ...

  4. 跨平台应用开发进阶(十一) :uni-app 实现IOS原生APP-云打包集成极光推送(JG-JPUSH)详细教程

    文章目录 一.前言 二.资源 三.集成 四.遇到的问题及解决措施 4.1 IOS开发者证书无推送权限 4.2 manifest中并没有配置push模块.但云端打包ios就是一直报Code Signin ...

  5. 移动应用消息推送及推送原理

    消息推送 消息通知分本地通知和远程推送通知. 本文是记录React Native使用aws push notifications推送及相关配置及遇到的相关问题.在twilio和aws中选择使用aws的 ...

  6. java 开发与快递鸟对接的推送接口

    java 开发与快递鸟对接的推送接口 最近公司需要跟快递鸟进行对接,使用快递鸟的API来查询商城的物流信息,在此记录一下,自己跟快递鸟对接的过程吧,如果有那些不对的地方请指出,觉得可以的话转载记得表明 ...

  7. iOS 消息推送原理及实现总结

    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图: 1. Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Prov ...

  8. iOS 消息推送原理及实现Demo

    为什么80%的码农都做不了架构师?>>>    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1.Provider:就是为指定IOS设备应用程序提供 ...

  9. 织梦熊掌号插件兼容php5.3,织梦CMS百度、熊掌号、MIP、神马自动推送插件

    插件名称: 织梦CMS百度.熊掌号.MIP.神马自动推送插件(支持手机端采集侠火车头等采集后推送)(UTFT-8+GBK2312) 插件介绍: 织梦自动推送百度.熊掌号.MIP.神马插件设置界面截图: ...

最新文章

  1. 修改Java-source版本
  2. osg中实现HUD(OSG初级篇1)
  3. python在列表末尾删除一个_从链接列表的尾部移除(Python)
  4. 【树莓派】关于tinyproxy问题处理
  5. mysql重做日志与binlog日志区别_MySQL日志之binlog、redo log、undo log
  6. Petuum - Careers
  7. iPhone 播放音频声音文件
  8. 微课|中学生可以这样学Python(1.5节):标准库与扩展库对象的导入
  9. 回忆我的军训,好怀念那时啊!
  10. Kubectl merge kubeconfig.yml 文件
  11. java alder32,[java][io][ZIP]应用GZIP进行压缩和解压缩
  12. 移动磁盘拒绝访问要如何办啊
  13. 计算机语言中下划线表示什么,下划线是什么
  14. 如何建立高绩效的团队
  15. 网站申请服务器,网站申请服务器空间
  16. 【有利可图网】PS实战教程36:巧用PS制作人物破碎消散效果
  17. 【Python】字符串是如何比较大小的?
  18. 个人怎么制作微信小程序,微信小程序可以免费制作吗?微信小程序制作教程
  19. Mac 终端配置 oh-my-zsh 和自动补全
  20. Redux 替代品 Zustand

热门文章

  1. 芋道源码的周八(2018.01.20)
  2. 大连东软计算机网络,计算机网络 体系结构及协议 - 大连东软信息学院.pdf
  3. 美化网页、ASP动态网页技术
  4. 行星轨迹制作_好看的星球轨迹是怎么制作的 PS制作星轨效果详细教程
  5. 使用eve-ng前的准备工作(下载、安装、镜像等)
  6. java web选择题_Servlet、JSP选择题
  7. AAAI 2017论文简析:利用可拍照移动设备感知空气质量---Crowdsensing Air Quality with Camera-enabled Mobile Devices
  8. 程序员在工作时间应该如何着装
  9. VSCode远程配置流程(详细图解)
  10. 十一、OpenGL的坐标系统