上一篇博客初始化项目已经完成,现在我们继续学习
1.装填spring-boot-starter-weixin依赖并完成快速开发框架的前置代码(README.md)
pom.xml填写依赖

完整依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>net.dreamlu</groupId><artifactId>spring-boot-starter-weixin</artifactId><version>1.3.6</version></dependency></dependencies>

boot入口函数RedDustFootprintApplication开启缓存注解
配置文件application.yml
这个配置文件我配了我自己服务器的数据库和redis缓存,如果只是单纯的微信后台而不牵扯数据存储是可以不写的,这是我直接照搬的以前写过的

这三个方框的参数是很重要的,这是你链接微信官方接口的通行证
这是测试号

这是正式号

然后我们直接写控制器

@WxMsgController("/weixin/wx")
public class WeixinController extends DreamMsgControllerAdapter {@Autowiredprivate DreamWeixinProperties weixinProperties;@Overrideprotected void processInFollowEvent(InFollowEvent inFollowEvent) {OutTextMsg outMsg = new OutTextMsg(inFollowEvent);outMsg.setContent("关注消息~");render(outMsg);}@Overrideprotected void processInTextMsg(InTextMsg inTextMsg) {System.out.println(weixinProperties.getWxaConfig().getAppId());OutTextMsg outMsg = new OutTextMsg(inTextMsg);outMsg.setContent(inTextMsg.getContent());render(outMsg);}@Overrideprotected void processInMenuEvent(InMenuEvent inMenuEvent) {OutTextMsg outMsg = new OutTextMsg(inMenuEvent);outMsg.setContent("菜单消息~");render(outMsg);}
}

这个控制器最原始的代码是我照搬这个框架的demo的,主要是一个例子
做完这些我们运行一下,如果控制台不报错我们在继续
2.配置外网穿透
说到外网穿透自然是免费的最好了,因为我们只是个人偶尔使用
natapp官网
时间长了,我也忘了当时是怎么注册得了,想学的自己弄吧(总不至于一个注册还要教吧?那干脆别当程序员了)

natapp官网教程

这是我的配置,记住本地端口配到你的boot项目配置的端口就行了

启动natapp,复制下域名填到测试号接口配置信息URL

点击提交,出现配置成功即建立起与微信官网接口的联系
然后我们测试一下
用你的微信扫一下测试号界面中间的二维码关注一下

后台显示的信息是微信传递过来的信息,是xml类型的

微信开发文档有介绍,我这里就不说了,文档是每一个攻城狮或者程序员必须了解的东西
如果只是讲解方法也是太过于无趣了,不如我们来点有难度的,没兴趣或者基础的可以不看下边的了
扩展
首先建立连接是微信根据appid,appsecret,token进行的验证
开发文档中也有这样的一段说明

不严谨的,我们写个接口也不用校验直接原样将echoster发给微信服务器也可以对接成功,不过这样一来安全性大大的降低了,不是微信服务器的请求也会被直接对接

解析流程:
1.我们先来创建一个控制器WeiXinTestController,加上注解

@RestController
public class WeiXinTestController {@GetMapping("/weixin")public void test(String signature,String timestamp,String nonce,String echostr){System.out.println(signature);System.out.println(echostr);}}

运行项目,然后把微信配置的url由“/weixin/wx”改成“/weixin”提交
可以看到后台打印出
证明信息接收到了,这里接收参数太多可以写成对象实体,我就不写了,省点劲,这里也只是稍微讲点原理,也不是彻底剖析这个快速开发框架,水平还不到
那接下来就好办了,根据开发文档的校验流程去写

@RestController
public class WeiXinTestController {@GetMapping("/weixin")public void test(String signature,String timestamp,String nonce,String echostr){String token = "123456";String[] array = new String[]{token, timestamp, nonce};Arrays.sort(array);String tempStr = array[0] + array[1] + array[2];tempStr = EncryptUtils.getShaUseApacheCodec(tempStr,"SHA-1");System.out.println(tempStr);System.out.println(signature);}}

这里用了一个加解密工具,是开源中国找到的(不用也可以,直接用依赖的加密方法)https://my.oschina.net/hongchq/blog/70348
还需要导入依赖

<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.11</version></dependency>
package com.test.weixin.controller;import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;import java.security.MessageDigest;/*** 加密方式工具类 (JDK1.6以上)*/
public class EncryptUtils {/*** 使用指定的加密算法加密字符串<br>* @param text 待加密的字符串* @param encName 加密方法,为null时默认为SHA-256,可以为SHA-1,MD5,SHA-256,SHA-384,SHA-512* @return*/public static byte[] degestString(String text, String encName) {MessageDigest md = null;byte[] bt = text.getBytes();try {if (null == encName) {encName = "SHA-256";}md = MessageDigest.getInstance(encName);md.update(bt);return md.digest();} catch (Throwable t) {t.printStackTrace();}return null;}/*** BASE64加密* @param origin 待机解密的byte数组* @return*/public static byte[] encryptBASE64(byte[] origin) {if (origin == null) {return null;}return Base64.encodeBase64(origin);}/*** BASE64解密,采用Apache的commons-codec包中方法,不建议使用sun自己的* @param dest 待解密的字节数组* @return*/public static byte[] decryptBASE64(byte[] dest) {if (dest == null) {return null;}return Base64.decodeBase64(dest);}/*** 使用Apache的codec加密,使用MD5算法<br>* 注意:返回的字符串为小写,请比较时注意* @param text 待加密的字符串* @return*/public static String getMd5UseApacheCodec(String text) {if (null == text) {return null;}return DigestUtils.md5Hex(text);}/*** 使用Apache的codec加密,使用SHA算法<br>* 注意:返回值为小写字符,请比较时注意* @param text 待加密的字符串* @param algorithm 加密算法 SHA-1,SHA-256,SHA-384,SHA-512* @return*/public static String getShaUseApacheCodec(String text, String algorithm) {if (text == null) {return null;}if (null == algorithm) {return DigestUtils.shaHex(text);} else {if ("SHA-1".equals(algorithm)) {return DigestUtils.shaHex(text);} else if ("SHA-256".equals(algorithm)) {return DigestUtils.sha256Hex(text);} else if ("SHA-384".equals(algorithm)) {return DigestUtils.sha384Hex(text);} else if ("SHA-512".equals(algorithm)) {return DigestUtils.sha512Hex(text);} else {return null;}}}}

这点java反而感觉写着难了,加解密没接触过,水平还是太低了
至于框架的签名校验部分我也找到了
项目这里



大概107行,用ctrl+左键找着就行了,对于这框架我毕竟不常用,而且快速开发嘛,对着文档会用就行了,提升水平才来找根源
至于这一个接口是怎么处理那么多事件(关注,消息,推广链接等)就是在于微信发送的消息了

微信发送的消息是xml数据包,本质还是字符串,以字符串接收过来进行xml方式的解析,然后找对应的格式就知道是什么类型的推送了,这里就不用多说了,可以直接找这个快速框架来学习

这个就是它的消息控制了

微信公众号开发教程(一)相关推荐

  1. 微信公众号开发教程[019]-新版客服

    新版客服是针对之前文章<<微信公众号开发教程[007]-消息管理-客服消息>>里面提到的客服功能而言的.在其基础上做了很多提升. 首先如果公众号曾经使用过旧版多客服功能,则要在 ...

  2. 微信公众号开发教程[012]-素材管理

    一.关于图文消息,我的理解         我理解中,普通<img><iframe>等标签的src属性,可以跨域,哪里的图片都行.但是公众号的聊天会话界面,放的图片,语音,图文 ...

  3. 微信公众号开发教程(一) 验证接入

    作者:陈惠,叩丁狼教育高级讲师.原创文章,转载请注明出处. 微信公众号开发教程(一)验证接入 本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注 ...

  4. 视频教程-基于python的微信公众号开发教程-微信开发

    基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...

  5. 微信公众号开发java流程_微信公众号开发教程java 编程语言的特点及选择

    微信公众号开发教程java 编程语言的特点及选择 微信公众号为用户提供了相关的工具,来对微信公众号进行一个简单的开发.但是如果想实现一些复杂的功能,其实还是要借助于一些编程语言的使用.所以要了解,在微 ...

  6. 微信公众号开发教程[001]-引言

    最近这几天沉静下来想一想,以后的路该怎么走.心里大概有个思路,转向微信,微博的开发和推广.虽然这两项已经火得不行,现在才入行,稍显迟了,但只要努力,总会成功. 这一系列文章,是我学习微信开发的笔记,因 ...

  7. 微信公众号开发教程[002]-配置

    一.注册微信公众号 微信公众号官方入口https://mp.weixin.qq.com注册公众号,注册过程中,类型选择可能是新手比较迷惑的地方.微信公众号分为订阅号和服务号(还有个企业号,似乎用的人不 ...

  8. java微信公众号开发教程_微信公众平台开发教程(java版本含代码) 中文PDF版 3.13MB...

    本文档将对即将推出的微信公众帐号开发系列连载教程做简单的说明. 教程主要是面向有一定 Java 编程基础的朋友, 目录: 微信公众帐号开发教程第 1 篇-引言  2 微信公众帐号开发教程第 2 篇-微 ...

  9. python微信公众号开发教程_python微信公众号开发简单流程实现

    本文为大家分享了python微信公众号开发的简单过程,供大家参考,具体内容如下 网上有很多微信公众号的开发教程,但是都是好几年前的了,而且很多都是抄袭其他人的,内容几乎一模一样.真的无语了.只好自己总 ...

  10. 基于python的微信公众号开发教程_基于python的微信公众号开发教程

    应广大python学员的期盼,九宝老师精心制作的"基于python的微信公众号开发"视频教程即将上线. 该课程秉承九宝培训一贯的"简单.高效.快速"的讲课原则, ...

最新文章

  1. 分布式服务Dubbo+Zookeeper安全认证
  2. 嵌入式Linux学习问题解决记录
  3. Make Them Equal 埃氏筛法(1200)
  4. wxWidgets:wxDCClipper类用法
  5. 人工智能AI实战100讲(八)-原理+代码详解 | 稠密重建之SGM/tSGM算法
  6. 【原创】指针和下标的10条对比
  7. process启动jar包判断成功_恒一广告助力2020年壹基金温暖包安康发放启动仪式成功举办...
  8. 性能测试监控关键指标
  9. C#如何设置Listview的行高-高度 转载
  10. # SUMO 仿真建模
  11. 服务器 IIS主机的Rewrite伪静态组件下载与配置
  12. AD16原理图页设置库路径(1)
  13. 数学建模论文排版(摘要部分)
  14. leetcode中文版python,Python 版 LeetCode 刷题笔记 #7 整数反转
  15. 7pin数码屏的使用
  16. compileflow 淘宝工作流引擎
  17. 虚拟机SSH免密登录配置
  18. BIMC品牌整合营销:电子商务外包是中小企业未来发展方向
  19. 浅谈DM数据库优化常识
  20. 控制导弹发射的计算机应用属于,计算机应用基础17.doc

热门文章

  1. mysql8时区设置_解决MySQL8.0时区的问题步骤
  2. 计算机组成与维修考试试题,计算机组成原理试题与答案(考试资料)
  3. ESP8266(4)WIFI与IP/端口与UDP/TCP
  4. java.打印菱形_利用java程序打印空菱形
  5. 搜狗输入法的使用感受与评价
  6. L1-046 整除光棍 (20 分)模拟除法
  7. python socket recv非阻塞_socket非阻塞recv大坑
  8. 【论文-笔记】雷达/电子干扰攻防对抗信号级仿真中提高仿真速度的思考和实践
  9. 红旗linux 桌面10 下载,想要红旗桌面操作系统10(RedFlag Desktop Linux10)的请联系红旗官方...
  10. 原创_Android Jetpack Compose 最全上手指南,互联网寒冬公司倒闭后