对应微信官网文档

定位

  • 「微信服务器」相当于普通的第三方服务器,与百度图片识别接口,高德定位接口本质上没有区别
  • 本质是「业务服务器」调用第三方服务的 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) 登录

「公众号-业务服务器被动接受消息」与「公众号-业务服务器主动请求微信接口」的关系

二者完全没有关系,不相互影响

  • 可以脱离对方独立存在
  • 也就是,你不做被动回复,只单纯调用接口
  • 也可以单纯调用接口,不做被动回复

momo707577045
2.4k 声望603 粉丝

[链接]