天天看點

easyswoole和mixphp_如何在 MixPHP V2.1 中使用 EasyWeChat

國内中小型公司有大量的微信接入需求,EasyWeChat 是一個非常流行的微信開發庫,由于該庫是為 FPM 模式的傳統架構而打造,是以很多 Swoole 使用者不知道如何使用,下面詳細介紹一下 MixPHP v2.1 中如何使用。

Hook Guzzle

首先由于 overtrue/wechat 是基于 GuzzleHttp 開發的,因為 GuzzleHttp 無法直接在 Swoole 中使用,是以需要先安裝 Mix Guzzle Hook,該庫能在不修改源碼的情況下讓 GuzzleHttp 協程化。

Request 類代理

由于 EasyWeChat 中使用的是 Symfony 架構的 Request 類,并且又不完全符合  PSR-7 規範,是以我們需要建立一個 Request 代理類:

namespace App\Http\EasyWeChat;

class Request

{

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;

}