代授权方实现业务
授权方已经把公众号、小程序授权给你的开放平台第三方平台了,接下来的代授权方实现业务只需一行代码即可获得授权方实例。
实例化
<?php
$config = [
// 开放平台第三方平台 APPID
'appId' => 'wxefe41fdeexxxxxx',
// 开放平台第三方平台 Token
'token' => 'dczmnau31ea9nzcnxxxxxxxxx',
// 开放平台第三方平台 AES Key
'aesKey' => 'easyswoole',
// 开放平台第三方平台 Secret
'secret' => 'your-AppSecret'
];
// 开放平台
$openPlatform = \EasySwoole\WeChat\Factory::openPlatform($config);
获取授权方实例
// 代公众号实现业务
$officialAccount = $openPlatform->officialAccount(string $appId, string $refreshToken);
// 代小程序实现业务
$miniProgram = $openPlatform->miniProgram(string $appId, string $refreshToken);
-
$appId
为授权方公众号APPID
,非开放平台第三方平台APPID
-
$refreshToken
为授权方的refresh_token
,可通过 获取授权方授权信息 接口获得。
帮助授权方管理开放平台账号
<?php
// 代公众号实现业务
$account = $officialAccount->account;
// 代小程序实现业务
$account = $miniProgram->account;
// 创建开放平台账号
// 并绑定公众号或小程序
$result = $account->create();
// 将公众号或小程序绑定到指定开放平台帐号下
$result = $account->bindTo($openAppId);
// 将公众号/小程序从开放平台帐号下解绑
$result = $account->unbindFrom($openAppid);
// 获取公众号/小程序所绑定的开放平台帐号
$result = $account->getBinding();
授权第三方平台注册的开放平台帐号只可用于获取用户 unionid
实现用户身份打通。第三方平台不可操作(包括绑定/解绑)通过 open.weixin.qq.com
线上流程注册的开放平台帐号。公众号只可将此权限集授权给一个第三方平台,授权互斥。
代码示例(在 EasySwoole 框架中使用)
使用示例 1:在
App\HttpController\Router.php
(即路由)中使用:
示例代码如下:
<?php
namespace App\HttpController;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;
class Router extends AbstractRouter
{
function initialize(RouteCollector $routeCollector)
{
// 假设你的公众号消息与事件接收 URL 为:https://easyswoole.wechat.com/callback?appId=Xxxx ...
$routeCollector->post('/callback', function (Request $request, Response $response) {
$appId = $request->getQueryParam('appId');
// $openPlatform 为你实例化的开放平台对象,此处省略实例化步骤
$officialAccount = $openPlatform->officialAccount($appId);
// 这里的 server 为授权方的 server,而不是开放平台的 server,请注意!!!
$server = $officialAccount->server;
$server->push(function (\EasySwoole\WeChat\Kernel\Contracts\MessageInterface $message) {
return new \EasySwoole\WeChat\Kernel\Messages\Text('Welcome!');
});
// $psr7esponse 是一个显式实现了 PSR-7 的对象,用户只需要处理该对象即可正确响应给微信
$psr7Response = $server->serve($request); // Done!
$response->withStatus($psr7Response->getStatusCode());
// PSR-7 的 Header 并不是单纯的 k => v 结构
foreach ($psr7Response->getHeaders() as $name => $values) {
$response->withHeader($name, implode(", ", $values));
}
$response->write($psr7Response->getBody()->__toString());
return false;
});
// 调用授权方业务例子
$routeCollector->get('/how-to-use', function (Request $request, Response $response) {
$officialAccount = $openPlatform->officialAccount('已授权的公众号 APPID', 'Refresh-token');
// 获取用户列表:
$officialAccount->user->list();
$miniProgram = $openPlatform->miniProgram('已授权的小程序 APPID', 'Refresh-token');
// 根据 code 获取 session
$miniProgram->auth->session('js-code');
// 其他同理
return false;
});
}
}
使用示例 2:在
App\HttpController\Index.php
(即控制器类)中使用,用户可在自定义其他控制器中实现:
假设你的开放平台第三方平台设置的授权事件接收 URL
为: https://easyswoole.wechat.com/openPlatform
(其他事件推送同样会推送到这个 URL
)
示例代码如下:
首先在 App\HttpController\Router.php
中定义路由:
<?php
namespace App\HttpController;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use FastRoute\RouteCollector;
use EasySwoole\WeChat\OpenPlatform\Server\Guard;
class Router extends AbstractRouter
{
function initialize(RouteCollector $routeCollector)
{
// 假设你的公众号消息与事件接收 URL 为:https://easyswoole.wechat.com/callback?appId=Xxxx ...
$routeCollector->post('/callback', '/Index/callback');
// 调用授权方业务例子
$routeCollector->get('/how-to-use', '/Index/how_to_use');
}
}
然后在 App\HttpController\Index.php
控制器中处理事件:
<?php
namespace App\HttpController;
use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\WeChat\Kernel\Messages\Message;
class Index extends Controller
{
// 假设你的公众号消息与事件接收 URL 为:https://easyswoole.wechat.com/callback?appId=Xxxx ...
public function callback()
{
$appId = $this->request()->getQueryParam('appId');
// $openPlatform 为你实例化的开放平台对象,此处省略实例化步骤
$officialAccount = $openPlatform->officialAccount($appId);
// 这里的 server 为授权方的 server,而不是开放平台的 server,请注意!!!
$server = $officialAccount->server;
$server->push(function (\EasySwoole\WeChat\Kernel\Contracts\MessageInterface $message) {
return new \EasySwoole\WeChat\Kernel\Messages\Text('Welcome!');
});
/** @var \Psr\Http\Message\ServerRequestInterface $psr7Request */
$psr7Request = $this->request();
// $psr7esponse 是一个显式实现了 PSR-7 的对象,用户只需要处理该对象即可正确响应给微信
$psr7Response = $server->serve($psr7Request);
$this->response()->withStatus($psr7Response->getStatusCode());
// PSR-7 的 Header 并不是单纯的 k => v 结构
foreach ($psr7Response->getHeaders() as $name => $values) {
$this->response()->withHeader($name, implode(", ", $values));
}
$this->response()->write($psr7Response->getBody()->__toString());
}
// 调用授权方业务例子
public function how_to_use()
{
$officialAccount = $openPlatform->officialAccount('已授权的公众号 APPID', 'Refresh-token');
// 获取用户列表:
$officialAccount->user->list();
$miniProgram = $openPlatform->miniProgram('已授权的小程序 APPID', 'Refresh-token');
// 根据 code 获取 session
$miniProgram->auth->session('js-code');
// 其他同理
}
}