对应微信官网文档
定位
- 「微信服务器」相当于普通的第三方服务器,与百度图片识别接口,高德定位接口本质上没有区别
- 本质是「业务服务器」调用第三方服务的 API 接口
涉及参数
请求值
-
【grant_type】
- 授权类型,即你通过账号密码,希望获取是什么类型的授权。
- 即还有其他授权类型的存在,只是我们平时用不到。
- 获取access_token填写client_credential
-
【appid】
- 公众号使用接口时的ID,相当于我们的 QQ 账号
-
【secret】
- 公众号使用接口时的密码,相当于我们的 QQ 密码
返回值
-
【access_token】
- 两个小时的有效期
- 是请求微信API 的令牌,相当于我们系统里面,登录账号密码以后,得到的登录凭证。通过该凭证就可以知道你是谁,毕竟总不能每次调用都传账号密码吧。
-
在 Node 环境中,直接通过全局变量保存即可,为什么 PHP 需要通过文件进行保存?
- 因为 Node 和 PHP 的运行机制不一样。Node 进程是常驻内存的,不同的请求均访问同一个进程。
- 而 PHP 则是一个请求对应一个新的独立的进程,会全新生成一个运行环境。导致数据不可跨进程保存。需要通过文件保存。
- 其实并不一定非要通过文件保存,只要可以解决跨进程的问题就可以。譬如保存在数据库。最理想的方法是保存在 redis 这样的缓存数据库。减少 IO 操作。
- 当 Node 后端服务使用多进程开启多个服务器时,同样会出现相同的问题。如 egg 框架,为了充分使用 CPU 性能,当使用 N 核 CPU 时,将启动 N 个 CPU 进程。
- 这里的 N 和 PHP 的不一样,Node 中只会启动一次,复用那些进程。PHP 则每一个请求均启动一个新进程。
- 这是 Node 也需要通过 redis 保存 access_token
流程
-
「业务服务器」发送「grant_type」「appid」「secret」给「微信服务器」
- 申请调用接口,相当于我们申请用户登录
-
「微信服务器」接收到数据,验证通过,返回「access_token」
- 「access_token」就是调用接口的凭证。相当于我们登录系统成功,没调用一次接口,都需要带上凭证
-
当「access_token」失效时,重新以上步骤
- 跟我们用户系统的 token 登录失效,或者 session 失效是同一个概念
服务器指定 URL
不像「公众号-业务服务器被动接受消息」,不需要指定 URL
但是,需要设置 IP 白名单,
- 也就是可以让微信限制特定 IP 的请求才可以使用那些账号密码登录
- 就好比内网系统,只需要特定 IP(内网IP) 登录
「公众号-业务服务器被动接受消息」与「公众号-业务服务器主动请求微信接口」的关系
二者完全没有关系,不相互影响
- 可以脱离对方独立存在
- 也就是,你不做被动回复,只单纯调用接口
- 也可以单纯调用接口,不做被动回复
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。