国内中小型公司有大量的微信接入需求,EasyWeChat 是一个很是流行的微信开发库,因为该库是为 FPM 模式的传统框架而打造,所以不少 Swoole 用户不知道如何使用,下面详细介绍一下 MixPHP v2.1 中如何使用。php
Hook Guzzle
首先因为 overtrue/wechat 是基于 GuzzleHttp 开发的,由于 GuzzleHttp 没法直接在 Swoole 中使用,因此须要先安装 Mix Guzzle Hook,该库能在不修改源码的状况下让 GuzzleHttp 协程化。git
Request 类代理
因为 EasyWeChat 中使用的是 Symfony 框架的 Request 类,而且又不彻底符合 PSR-7 规范,所以咱们须要建立一个 Request 代理类:github
<?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; }