lms/vendor/mollie/laravel-mollie/src/MollieLaravelHttpClientAdapter.php
2025-12-15 12:26:23 +01:00

47 lines
1.4 KiB
PHP

<?php
namespace Mollie\Laravel;
use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Http;
use Mollie\Api\Exceptions\ApiException;
use Mollie\Api\HttpAdapter\MollieHttpAdapterInterface;
class MollieLaravelHttpClientAdapter implements MollieHttpAdapterInterface
{
public function send($httpMethod, $url, $headers, $httpBody): ?object
{
$contentType = $headers['Content-Type'] ?? 'application/json';
unset($headers['Content-Type']);
$response = Http::withBody($httpBody, $contentType)
->withHeaders($headers)
->send($httpMethod, $url);
return match (true) {
$response->noContent() => null,
$response->failed() => throw ApiException::createFromResponse($response->toPsrResponse(), null),
empty($response->body()) => throw new ApiException('Mollie response body is empty.'),
default => $this->parseResponseBody($response),
};
}
private function parseResponseBody(Response $response): ?object
{
$body = $response->body();
$object = @json_decode($body);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new ApiException("Unable to decode Mollie response: '{$body}'.");
}
return $object;
}
public function versionString(): string
{
return 'Laravel/HttpClient';
}
}