AddRadarPlugin.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. declare(strict_types=1);
  3. namespace Yansongda\Pay\Plugin\Jsb;
  4. use Closure;
  5. use GuzzleHttp\Psr7\Request;
  6. use Yansongda\Artful\Contract\PluginInterface;
  7. use Yansongda\Artful\Exception\ContainerException;
  8. use Yansongda\Artful\Exception\ServiceNotFoundException;
  9. use Yansongda\Artful\Logger;
  10. use Yansongda\Artful\Rocket;
  11. use Yansongda\Supports\Collection;
  12. use function Yansongda\Pay\get_jsb_url;
  13. use function Yansongda\Pay\get_provider_config;
  14. class AddRadarPlugin implements PluginInterface
  15. {
  16. /**
  17. * @throws ServiceNotFoundException
  18. * @throws ContainerException
  19. */
  20. public function assembly(Rocket $rocket, Closure $next): Rocket
  21. {
  22. Logger::info('[Jsb][AddRadarPlugin] 插件开始装载', ['rocket' => $rocket]);
  23. $params = $rocket->getParams();
  24. $config = get_provider_config('jsb', $params);
  25. $payload = $rocket->getPayload();
  26. $rocket->setRadar(new Request(
  27. strtoupper($params['_method'] ?? 'POST'),
  28. get_jsb_url($config, $payload),
  29. $this->getHeaders(),
  30. $this->getBody($payload),
  31. ));
  32. Logger::info('[Jsb][AddRadarPlugin] 插件装载完毕', ['rocket' => $rocket]);
  33. return $next($rocket);
  34. }
  35. protected function getHeaders(): array
  36. {
  37. return [
  38. 'Content-Type' => 'text/html',
  39. 'User-Agent' => 'yansongda/pay-v3',
  40. ];
  41. }
  42. protected function getBody(Collection $payload): string
  43. {
  44. $sign = $payload->get('sign');
  45. $signType = $payload->get('signType');
  46. $payload->forget('sign');
  47. $payload->forget('signType');
  48. $payload = $payload->sortKeys();
  49. $payload->set('sign', $sign);
  50. $payload->set('signType', $signType);
  51. return $payload->toString();
  52. }
  53. }