1.知识准备

HTTP 访问原理

HTTP 协议则是web服务器和web客户端达成的一种可靠的数据传输协议

确保数据在传输的过程当中不会损坏或者产生混乱

WEB 客户端和服务器

Web内容都是存储在Web服务器上的。Web服务器所使用的是HTTP 协议,因此经常会被称为 HTTP 服务器

资源和媒体类型

web 服务器是 web 资源的宿主,而 web 资源就是我们常见的 web 内容的源头,最简单的 web 资源就是 我们服务器中的静态文件:文本文件,HTML 文档,JPEG 图片文件,AVI 文件等等

当然 web 资源也可以是动态生成的,类似搜索引擎生成的页面,QQ 空间的动态等,总之,所有类型的内容来源都是资源

因特网上有数千种不同类型的数据类型,HTTP 在传输的过程中为每个传输的数据都打上了名为MIME类型数据类型标签(格式:两级分类—一级:text(文本),image(图像),audio(音频),video(视频),application(应用数据),multi-part(复合内容);二级:image/gif(GIF图片)等),描述并标记多媒体内容。

URL

统一资源定位符(Uniform Resource Locator)是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

大部分 URL 都遵循一种标准格式,这种格式包含三个部分。

URL的第一部分被称为方案, 说明了访问资源所使用的协议类型。 通常是 HTTP 协议(http://)

第二部分给出了服务器的因特网地址(比如,www.itheima.com

其余部分指定Web 服务器上的某个资源(比如, /static/image/common/zixuelogo.png)。

HTTP方法

HTTP支持几种不同请求和命令,这些命令被称为HTTP方法,每条 HTTP 请求报文都包含一个方法。 这个方法会告诉服务器要执行什么动作(获取一个 Web 页面、发送一段信息、删除一个文件等)

请求方法

描述

GET

获取一个URL指定的资源,即资源实体

POST

向服务器提交数据

PUT

向服务器提交数据,多次请求会覆盖原来的操作

DELETE

请求源服务器删除Request-URI标志的资源

HEAD

获取一个指定资源的头信息

OPTIONS

获取服务器支持的方法

状态码

每条 HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。

状态码

定义

说明

1xx

请求被接受

一般只在实验环境下使用

2xx

成功

操作成功的收到,理解和接收

3xx

重定向

为了完成请求,进行进一步措施

4xx

用户端错误

请求的语法有错误或者不能完全被满足

5xx

服务器错误

服务器无法完成明显有效的请求

例:

HTTP状态码

描述

200

文档正确返回

301/2

永久/临时重定向

304 not modified

未修改(原有的缓存可以继续使用)

404

请求的网页不存在

503

服务器暂时不可用

500

服务器内部错误

报文

HTTP报文是纯文本,不是二进制代码,方便人们读写。

请求报文:从Web客户端发往Web服务器的 HTTP 报文

响应报文:从服务器发往客户端的报文

HTTP 报文包括以下三个部分:

起始行

请求行部分由请求方法(GET,POST等),请求路径,协议版本组成。

响应行部分由协议版本,状态码,状态文字组成。

首部字段:

起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号来分隔。首部以一个空行结束。

主体:

请求主体中包括了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据

起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据如图片、视频、音轨、软件程序、文本等。

①Httpbin.org可模拟报文;②6打开网页后通过按键F12查看报文

API(应用程序接口/应用编程接口):

①概念:操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令
通过 API 接口实现计算机软件之间的相互通信。API 的一个主要功能是提供通用功能集。程序员通过调用 API 函数对应用程序进行开发,可以减轻编程任务。

②形式:函数、类、对象(已编译好的代码、程序提供给大众使用)

[例1]研发人员A开发了软件A,研发人员B正在研发软件B。
有一天,研发人员B想要调用软件A的部分功能来用,但是他又不想从头看一遍软件A的源码和功能实现过程,怎么办呢?
研发人员A想了一个好主意:我把软件A里你需要的功能打包好,写成一个函数;你按照我说的流程,把这个函数放在软件B里,就能直接用我的功能了!
其中,API就是研发人员A说的那个函数。

[例2]我们如何告诉操作系统打开文件呢?
看似简单的操作到底层都非常复杂,打开文件首先要扫描硬盘,找到文件的位置,然后从文件中读取一部分数据,将数据放进I/O缓冲区,放进内存;这些数据都是0、1序列,还要对照ASCII表或Unicode表”翻译“成字符,再在显示器上显示出来,过程操作非常复杂。

怎么办呢?操作系统想了一个很好的办法,它预先把这些复杂的操作写在一个函数里面,编译成一个组件(一般是动态链接库),随操作系统一起发布,并配上说明文档,程序员只需要简单地调用这些函数就可以完成复杂的工作,让编程变得简单有趣。这些封装好的函数,就叫做API,即应用程序编程接口。

③提供方:编程语言标准库、第三方组织机构、公司等

④作用:省略底层操作细节、实现常用功能——简化工作,提高效率


2.企业微信API调用

本质上就是发送http请求给企业微信后台(通过第三方(企业微信)调用其已封装的包(API))

简单理解一下,企业微信给出的简易教程,就是教我们用http模拟工具从企业微信平台获得它的相关API(相关功能包),实现发送功能,然后自己编写代码部分实现自定义消息发送的对象、内容等

达到发送消息目的的大致一个流程:请求access调用接口 → 使用接口完成自定义操作


Step1:准备工作

①登录企业微信管理端 -> 应用与小程序 -> 应用 -> 自建,点击“创建应用”,设置应用logo、应用名称等信息,创建应用。
创建完成后,在管理端的应用列表里进入该应用,可以看到agentid、secret等信息;该应用会自动出现在成员的企业微信上

常总的自建应用:

springboot接收企业微信消息推送 企业微信api消息推送_API

AgentId:1000002

Secret:DbnoLcG2watgEgBxjldtC2Kj6Kzylu7JCXIOKt5Pgow

②企业号对应唯一ID:cropid

springboot接收企业微信消息推送 企业微信api消息推送_API_02

③https://www.postman.com 下载postman用于 模拟http请求、调试API


Step2:调试API

使用http模拟工具 → 模拟http请求 → 调试API

Q:为什么要这样调试?

A:企业微信的API调用 本质上就是发送http请求给企业微信后台

①获取access_token:

access_token是应用调用API的凭证,由corpid和corpsecret换取(企业账号密码)

每个应用有独立的secret,获取到的access_token只能本应用使用,所以每个应用的access_token应该分开来获取

springboot接收企业微信消息推送 企业微信api消息推送_前端_03

请求方式:GET(HTTPS)

URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

corpid和secret注意换成本抱团取暖小组公司自己个儿的!!!

返回参数:

springboot接收企业微信消息推送 企业微信api消息推送_前端_04

开发者需要缓存access_token,用于后续接口的调用,由于企业微信每个应用的access_token是彼此独立的,所以进行缓存时需要区分应用来进行存储

②构造消息体:

接着刚才用http方法请求来的那一小段代码往后写自定义内容,相当于用了现成的发消息功能模块,现在接着写代码,加入自定义部分(发给谁?发什么?)

概念补充:

成员userid:即账号(登陆企业微信后台 → 通讯录 → 成员详情)

springboot接收企业微信消息推送 企业微信api消息推送_前端_05

部门ID

springboot接收企业微信消息推送 企业微信api消息推送_前端_06

linked_id:互联ID,此ID可以在管理后台-通讯录-互联企业-详情里查看

springboot接收企业微信消息推送 企业微信api消息推送_HTTP_07

消息体(body):

springboot接收企业微信消息推送 企业微信api消息推送_HTTP_08

 

springboot接收企业微信消息推送 企业微信api消息推送_服务器_09

③发送消息:

如下图示,以上面两步得到的access_token和消息体为参数,在postman中发送post请求即可(红色箭头所指为需要注意的点)

springboot接收企业微信消息推送 企业微信api消息推送_前端_10

常见问题:

40008:代码中有错误(如agentid、touser不存在;msgtype类型不正确等)

48002:权限:修改API只读通讯录为可修改

(抱团取暖小组的)

通讯录secret:LMowPhEqtueQ2FzrUgYg8G8MTPQhCwy58reUr59zTsY

springboot接收企业微信消息推送 企业微信api消息推送_前端_11

如果发送成功,返回页面为:

springboot接收企业微信消息推送 企业微信api消息推送_API_12

接收方相应软件中收到显示

即:调试成功