微信开放平台

实例化

  1. <?php
  2. use EasyWeChat\Foundation\Application;
  3. $options = [
  4. // ...
  5. 'open_platform' => [
  6. 'app_id' => 'component-app-id',
  7. 'secret' => 'component-app-secret',
  8. 'token' => 'component-token',
  9. 'aes_key' => 'component-aes-key'
  10. ],
  11. // ...
  12. ];
  13. $app = new Application($options);
  14. $openPlatform = $app->open_platform;

监听微信服务器推送事件

公众号第三方平台推送的有四个事件:授权成功(authorized),授权更新(updateauthorized),授权取消(unauthorized),以及 component_verify_ticket

本 SDK 默认处理方式为:

  • authorized / updateauthorized: 获取授权方(Authorizer)的所有信息,并缓存 authorizer_access_tokenauthorizer_refresh_token,授权方的信息则需要开发者手动处理。
  • unauthorized: 删除 authorizer_access_tokenauthorizer_refresh_token 的缓存。
  • component_verify_ticket: 缓存 component_veirfy_ticket

当然也允许自定义处理这些事件,不过以上默认处理仍然会先执行,为的是帮助开发者免去缓存的困扰。

  1. // 默认处理方式
  2. $openPlatform->server->serve();
  3. // 自定义处理
  4. $openPlatform->server->setMessageHandler(function($event) {
  5. // 事件类型常量定义在 \EasyWeChat\OpenPlatform\Guard 类里
  6. switch ($event->InfoType) {
  7. case 'authorized':
  8. // ...
  9. case 'unauthorized':
  10. // ...
  11. case 'updateauthorized':
  12. // ...
  13. case 'component_verify_ticket':
  14. // ...
  15. }
  16. });
  17. $openPlatform->server->serve();
  18. // 或者
  19. $openPlatform->server->listen(function ($event) {
  20. switch ($event->InfoType) {
  21. // ...
  22. }
  23. });

授权成功,授权更新

这两个事件下,SDK 默认抓取了所有授权方所有的信息,并缓存 authorizer_access_tokenauthorizer_refresh_token,授权方的信息为原微信 API 的返回结果,由开发者自行处理,比如保存到数据库。

  1. // 自定义处理
  2. // 其中 $event 变量里有微信推送事件本身的信息,也有授权方所有的信息。
  3. $openPlatform->server->setMessageHandler(function($event) {
  4. // 事件类型常量定义在 \EasyWeChat\OpenPlatform\Guard 类里
  5. switch ($event->InfoType) {
  6. case 'authorized':
  7. // 授权信息,主要是 token 和授权域
  8. $info1 = $event->authorization_info;
  9. // 授权方信息,就是授权方公众号的信息了
  10. $info2 = $event->authorizer_info;
  11. }
  12. });

目前 SDK 对这两个事件的处理方式没有区别。

授权取消

SDK 默认处理:删除 authorizer_access_tokenauthorizer_refresh_token 的缓存。开发者可以自行处理数据库删除授权方信息等操作。

推送 component_verify_ticket

在公众号第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL”每隔10分钟定时推送 component_verify_ticket。SDK 内部已实现缓存 component_veirfy_ticket,无需开发者另行缓存。

注:需要在URL路由中写上触发代码,并且注册路由后需要等待微信服务器推送 component_verify_ticket,才能进行后续操作,否则报”Component verify ticket does not exists.”

调用 API

设置授权方的 App Id

开发者必须设置授权方来调用 API。

  1. $openPlatform = new Application($options)->open_platform;
  2. // 加载授权方信息,比如 $authorizer = Authorizer::find($id);
  3. $authorizerAppId = $authorizer->app_id;
  4. $authorizerRefreshToken = $authorizer->refresh_token;
  5. $app = $openPlatform->createAuthorizerApplication($authorizerAppId, $authorizerRefreshToken);
  6. // 然后调用方法和普通调用一致。
  7. // ...

授权 API

获取预授权网址

  1. // 直接跳转
  2. $response = $openPlatform->pre_auth->redirect('https://domain.com/callback');
  3. // 获取跳转的链接
  4. $response->getTargetUrl();

用户授权后会带上 code 跳转到 redirect 指定的链接。

使用授权码换取公众号的接口调用凭据和授权信息

  1. // 使用授权码换取公众号的接口调用凭据和授权信息
  2. // Optional: $authorizationCode 不传值时会自动获取 URL 中 auth_code 值
  3. $openPlatform->getAuthorizationInfo($authorizationCode = null);

获取授权方的公众号帐号基本信息

  1. $openPlatform->getAuthorizerInfo($authorizerAppId);

获取授权方的选项设置信息

  1. $openPlatform->getAuthorizerOption($authorizerAppId, $optionName);

设置授权方的选项信息

  1. $openPlatform->setAuthorizerOption($authorizerAppId, $optionName, $optionValue);