## EasyWeChat 接入 国内中小型公司有大量的微信接入需求,[EasyWeChat](https://www.easywechat.com/) 是一个非常流行的微信开发库,由于该库是为 FPM 模式的传统框架而打造,因此很多 Swoole 用户不知道如何使用,下面详细介绍一下 [MixPHP v2.1](https://github.com/mix-php/mix) 中如何使用。 ## Hook Guzzle 首先由于 [overtrue/wechat](https://github.com/overtrue/wechat) 是基于 GuzzleHttp 开发的,因为 GuzzleHttp 无法直接在 Swoole 中使用,所以需要先安装 Mix Guzzle Hook,该库能在不修改源码的情况下让 GuzzleHttp 协程化。 * [https://github.com/mix-php/guzzle-hook](https://github.com/mix-php/guzzle-hook) ## Request 类代理 由于 EasyWeChat 中使用的是 Symfony 框架的 Request 类,并且又不完全符合  [PSR-7](https://www.php-fig.org/psr/psr-7/) 规范,因此我们需要创建一个 Request 代理类: ``` <?php namespace App\Http\EasyWeChat; class Request { /** * @var \Mix\Http\Message\ServerRequest */ public $request; public function __construct(\Mix\Http\Message\ServerRequest $request) { $this->request = $request; } public function get($key) { return $this->request->getAttribute($key); } public function getContent() { return $this->request->getBody()->getContents(); } public function getContentType() { return $this->request->getHeaderLine('Content-Type'); } public function getUri() { return $this->request->getUri()->__toString(); } public function getMethod() { return $this->request->getMethod(); } } ``` ## 框架中使用 创建完成后就可在 MixPHP 的控制器中按如下代码使用: ``` public function index(ServerRequest $request, Response $response) { $config = [ 'app_id' => 'wx3cf0f39249eb0xxx', 'secret' => 'f1c242f4f28f735d4687abb469072xxx', 'token' => 'TestToken', 'response_type' => 'array', //... ]; $app = \EasyWeChat\Factory::officialAccount($config); $app->request = new \App\Http\EasyWeChat\Request($request); $wechatResponse = $app->server->serve(); $body = (new StreamFactory())->createStream($wechatResponse->getContent()); $code = $wechatResponse->getStatusCode(); $response->withBody($body) ->withStatus($code); return $response; } ```