Refactor for remote responses

This commit is contained in:
David Bomba 2024-11-12 12:12:38 +11:00
parent 5657fe5e4f
commit f72d52bada
2 changed files with 67 additions and 23 deletions

View File

@ -34,28 +34,9 @@ class EInvoicePeppolController extends BaseController
{
$company = auth()->user()->company();
$headers = [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
];
$response_array = $storecove->proxy->setCompany($company)->getLegalEntity($company->legal_entity_id);
$response $storecove->proxy->setCompany($company)->getLegalEntity($company->legal_entity_id);
// if (Ninja::isSelfHost()) {
// $headers['X-EInvoice-Token'] = $company->account->e_invoicing_token;
// }
// if (Ninja::isHosted()) {
// $headers['X-EInvoice-Secret'] = config('ninja.hosted_einvoice_secret');
// }
// $response = Http::baseUrl(config('ninja.hosted_ninja_url'))
// ->withHeaders($headers)
// ->post('/api/einvoice/peppol/legal_entity', data: [
// 'legal_entity_id' => $company->legal_entity_id,
// ]);
return response()->json($response, 200);
return response()->json($response_array, isset($response_array['code'] ?? 200);
}
/**

View File

@ -13,6 +13,7 @@ namespace App\Services\EDocument\Gateway\Storecove;
use App\Utils\Ninja;
use App\Models\Company;
use Illuminate\Support\Facades\Http;
class StorecoveProxy
{
@ -39,13 +40,75 @@ class StorecoveProxy
return $this->handleResponseError($response);
}
$headers['X-EInvoice-Token'] = $company->account->e_invoicing_token;
$uri = '/api/einvoice/peppol/legal_entity';
$payload = ['legal_entity_id' => $legal_entity_id];
return $this->remoteRequest($uri, $payload);
}
private function handleResponseError($response): array
{
$error = [
'status' => 'error',
'message' => 'Unknown error occurred',
'code' => $response->status() ?? 500,
];
if ($response->json()) {
$body = $response->json();
$error['message'] = $body['error'] ?? $body['message'] ?? $response->body();
if (isset($body['errors']) && is_array($body['errors'])) {
$error['errors'] = $body['errors'];
}
}
if ($response->status() === 401) {
$error['message'] = 'Authentication failed';
}
if ($response->status() === 403) {
$error['message'] = 'Access forbidden';
}
if ($response->status() === 404) {
$error['message'] = 'Resource not found';
}
nlog(['Storecove API Error' => [
'status' => $response->status(),
'body' => $response->body(),
'error' => $error
]]);
return $error;
}
private function remoteRequest(string $uri, array $payload =[]): array
{
$response = Http::baseUrl(config('ninja.hosted_ninja_url'))
->withHeaders($this->getHeaders())
->post($uri, $payload);
if($response->successful())
return $response->json();
return $this->handleResponseError($response);
}
private function getHeaders(): array
{
return [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-EInvoice-Token' => $this->company->account->e_invoicing_token,
"X-Requested-With" => "XMLHttpRequest",
];
}
}