ResponsePlugin.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. declare(strict_types=1);
  3. namespace Yansongda\Pay\Plugin\Wechat;
  4. use Closure;
  5. use Psr\Http\Message\ResponseInterface;
  6. use Yansongda\Artful\Contract\PluginInterface;
  7. use Yansongda\Artful\Exception\InvalidResponseException;
  8. use Yansongda\Artful\Logger;
  9. use Yansongda\Artful\Rocket;
  10. use Yansongda\Pay\Exception\Exception;
  11. class ResponsePlugin implements PluginInterface
  12. {
  13. /**
  14. * @throws InvalidResponseException
  15. */
  16. public function assembly(Rocket $rocket, Closure $next): Rocket
  17. {
  18. /* @var Rocket $rocket */
  19. $rocket = $next($rocket);
  20. Logger::debug('[Wechat][ResponsePlugin] 插件开始装载', ['rocket' => $rocket]);
  21. $this->validateResponse($rocket);
  22. Logger::info('[Wechat][ResponsePlugin] 插件装载完毕', ['rocket' => $rocket]);
  23. return $rocket;
  24. }
  25. /**
  26. * @throws InvalidResponseException
  27. */
  28. protected function validateResponse(Rocket $rocket): void
  29. {
  30. $response = $rocket->getDestinationOrigin();
  31. if ($response instanceof ResponseInterface
  32. && ($response->getStatusCode() < 200 || $response->getStatusCode() >= 300)) {
  33. throw new InvalidResponseException(Exception::RESPONSE_CODE_WRONG, '微信返回状态码异常,请检查参数是否错误', $rocket->getDestination());
  34. }
  35. }
  36. }