关注作者,更多动态实时掌握,微信公众号:隔壁的程序员

前言:从这篇开始小王子将开始一个新的系列内容,从零开始搭建自己的微信公众号后台。内容大致规划为:环境篇,包括用到的工具安装,破解,配置;基础篇,主要根据微信官方文档,实现基本功能;详解篇,对开发过程中使用到的第三方框架以及其他配置做一个详解(文中注明挖坑的地方都会在后期补全)。三种类型可能会穿插进行,而且会在知乎,b站,csdn等平台同步,感兴趣的朋友可以点个关注,总有一个你顺手的平台。如果有不严谨或者错误的地方也欢迎批评指正。

正文:

实现SpringBoot接入微信公众号后台总共分下面几大步:

  1. 准备服务器

  2. 搭建SpringBooot开发环境 

  3. 服务部署 

  4. 接口验证

  5. API接口对接与扩展 

服务器准备

服务器可以使用云服务器,也可以使用本地电脑充当服务器。云服务器不需要自己电脑长期开机,最近双十一各大平台也有优惠活动,而且还会时不时推出免费试用活动,所以还是可以考虑的,富哥请随意。本地服务器则需要自己拥有公网IP或者做内网穿透,这会导致你自己的电脑暴露于互联网环境,如果安全相关知识薄弱的话还是慎重。(挖坑)

小王子目前使用的是百度云服务器,1元试用1个月。

搭建SpringBooot开发环境 

从最简单的JDK配置到Maven,数据库以及开发工具Idea的破解,会在配置篇补充,这里省略。

项目搭建推荐使用Spring Initializr,这是Spring官方开源的一个脚手架项目,可以帮我们便捷的创建原始框架,如果start.spring.io打不开或者连接龟速缓慢,可以使用阿里云的https://start.aliyun.com/,在此基础上做了二次开发。或者直接访问这个网页,在页面上生成之后下载下来导入,步骤是一样的。

这一步可以直接勾选我们需要的依赖,为了简单演示,这里只勾选了Spring Boot DevTools,Lombok和Spring Web,其他相关框架用到的时候再单独添加。

创建之后的目录如下

项目创建完毕之后添加测试代码,启动。

浏览器访问看到响应,至此一个最基本的SpringBoot项目创建完毕。

服务部署 

我们上面使用的打包方式是jar包,只用maven的package命令,输出的jar包路径为target目录(maven配置挖坑),使用远程连接工具把jar包上传到服务器然后使用java -jar xxx.jar即可启动服务。

接口验证

根据开发文档,接入公众号后台需要先配置服务器进行接口验证。

登录微信公众平台官网后,在公众平台官网的开发 - 基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中 URL 是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该 Token 会和接口 URL 中包含的 Token 进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。

微信公众号开发文档

如果是云服务器,url直接填写你的服务器IP就可以,注意一点这个接口只支持80端口,有域名的也可以使用域名,本地机器的话填写你的公网 IP,或者内网穿透时的地址。那么这个接口需要怎么验证呢?小马在文档中告诉我们了,微信服务器会在我们提交地址之后发送一个GET请求,携带四个参数:

参数 描述
signature 微信加密签名,signature结合了开发者填写的 token 参数和请求中的 timestamp 参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

我们通过检验 signature 对请求进行校验(下面有校验方式)。若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与 signature 对比,标识该请求来源于微信。

这里用到加密,所以我们引入加密工具类,Spring已经做了依赖管理,可以不用加版本号.

依赖:

        <dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency>

接口:

package com.prince.wechat;import com.prince.wechat.common.WechatUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;@SpringBootApplication
@RestController
public class WechatApplication {public static void main(String[] args) {SpringApplication.run(WechatApplication.class, args);}/*** 微信接口验证* @param request* @return*/@RequestMapping("/wechat")public String check(HttpServletRequest request){System.out.println("get方法");String signature = request.getParameter("signature");String timestamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String echostr = request.getParameter("echostr");if (WechatUtils.checkSignature(signature, timestamp, nonce)) {System.out.println("检验通过");return echostr;}System.out.println("检验不通过");return "校验不通过";}
}

工具类:

package com.prince.wechat.common;import lombok.RequiredArgsConstructor;
import org.apache.commons.codec.digest.DigestUtils;
import java.util.ArrayList;
import java.util.Collections;
@RequiredArgsConstructor
public class WechatUtils {/** 规则描述*1. 将token、timestamp、nonce三个参数进行字典序排序*2. 将三个参数字符串拼接成一个字符串进行sha1加密*3. 获得加密后的字符串可与signature对比,标识该请求来源于微信*/public static boolean checkSignature(String signature, String timestamp, String nonce) {String token = "prince";ArrayList<String> list = new ArrayList();list.add(nonce);list.add(timestamp);list.add(token);Collections.sort(list);StringBuilder sb= new StringBuilder();list.forEach(sb::append);String result = sb.toString();String sha1 = DigestUtils.sha1Hex(result);System.out.println(String.format("sha1:%s,signature:%s",sha1,signature));return signature.equals(sha1);}
}

这是最简单的一个实现验证接口的过程,没有添加参数校验等操作,token配置先写死,后期补充配置文件加密以及命令行参数启动添加token(挖坑)。

打包之后部署到服务器进行验证,提交请求弹出提交成功,我们的控制台也打印出了“校验通过”,至此接入公众号后台就算完成了。

提交成功

验证通过

API接口对接与扩展

这个就是接入之后调用微信的API做一些菜单以及消息推送之类的,后面详细讲.(挖坑)

SpringBoot搭建微信公众号后台(零):服务搭建与接口验证相关推荐

  1. SpringBoot搭建微信公众号后台(一):消息接收与响应

    关注作者,更多动态实时掌握,微信公众号:隔壁的程序员 上一篇我们经过接口验证,已经可以与微信的服务器进行通信,错过的可以通过下面链接来进行回顾,这一篇就来实现一个基本的消息接收与响应. SpringB ...

  2. sae微信公众平台php,SAE 上使用PHP搭建微信公众号后台

    SAE 上使用PHP搭建微信公众号后台 准备阶段 SAE准备 SAE的应用平台提供了一个语言环境.比如提供了PHP环境的应用即可运行PHP代码.当然环境中也可以放HTML和CSS,将要展示的页面命名为 ...

  3. 腾讯云+CentOS 7.2+python:搭建微信公众号后台入门教程

    因为想自己编写微信公众号后台的程序,实现一些小功能,为以后的开发做准备,所以就从零开始,摸索着注册微信公众号,租用服务器,搭建环境进行开发. 简单的搭建过程中也经历了一些波折,踩了不少坑,仅留此文给跟 ...

  4. 华为云服务器如何搭建微信公众号后台-收发文本信息?

    概述 在本教程中,您将学会使用弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果给最终用户,如图 ...

  5. 技术小白用python搭建微信公众号后台

    其实既然你有做开发者模式的想法,那你肯定是有些基础的. 至少会学过一些基础的编程语言. 而读完本片文章,你理解后绝对可以自己开发(一些简单的)功能.不过需要注意的是,本文只是"授人以渔&qu ...

  6. [python]用flask框架搭建微信公众号的后台

    用flask框架搭建微信公众号的后台 最近用python写了点爬虫,为了要让爬取的数据能够随时显示在我眼前,并实时根据我的指令返回数据.于是采用微信公众号做这个显示窗口,既能发送指令也能显示简单的相关 ...

  7. 微信公众号后台服务开发(一):自动消息回复

    微信公众号后台服务开发 简述 微信平台提供的自动回复机制 后台服务开发 配置指定服务器 消息自动回复功能开发 简述 使用Java SpringBoot框架搭建微信工作号后台实现自定义逻辑自动回复 先注 ...

  8. Java SpringBoot+Mybatis Layui+JQuery+html微信公众号后台管理系统

    Java SpringBoot+Mybatis Layui++html微信公众号后台管理系统 hddhln 玛雅资源 技术框架 开发语言:JAVA 数据库:MYSQL JAVA开发框架:SpringB ...

  9. SpringBoot开发微信公众号

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 在讲微信公众号开发之前,先来大概了解一下微信公众号.微信公 ...

最新文章

  1. 基于CUDA实现立方体贴图 (Cubemaps) 转换为全景图 (Equirectangular Panorama)
  2. tensorflow笔记:流程,概念和简单代码注释
  3. Python大佬 | 菜鸟进阶必备的九大技能!
  4. USB Kill v2.0,一个可以瞬间烧毁电脑或平板的“U盘”
  5. python使用方法-python中dict使用方法详解
  6. 【杭电多校2020】Total Eclipse【贪心】【并查集】
  7. 什么是自愈环网光端机?
  8. java学习(72):GUL流式布局管理器
  9. 吴恩达机器学习作业(4):正则化逻辑回归
  10. 关于oracle的物理dg,oracle物理DG管理-redo数据传输,应用与三种模式
  11. linux透明防火墙--br_netfilter
  12. 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架
  13. Pycharm 相关使用方法
  14. 2010.2--ip redirects 和 ip directed-broadcast含义
  15. 大学生网页设计作业的20款优秀HTML5制作工具
  16. Notepad++下载markdown viewer plugin
  17. deb包一般放在linux的哪个目录下,deb包安装目录详解
  18. Ckplayer试看功能
  19. matlab中如何对一组复数频域信号进行快速傅里叶逆变换
  20. Linkedin如何避免封号及如何高效管理领英账号

热门文章

  1. MySQL(三) 完整性约束
  2. BMC-IPMB specification
  3. 第七周作业--任务分解
  4. C语言|博客作业10
  5. 视频工厂分享vlog拍摄技巧
  6. Python math 模块与 cmath 模块
  7. ffmpeg 按帧数截取视频
  8. 用ECS做HexMap:利用RenderMesh为六边形涂色
  9. Jbuilder2005破解补丁使用方法和下载地址
  10. Android#studio@快捷键