Skip to main content

Grenke Services

app/Services/GrenkeApiService

Methoden

$data = $this->grenkeApiService->getJson('basic/v1/contracts', [
'pageSize' => 100,
]);

Controller

Dann im Controller nur noch:

$decoded = $this->grenkeApiService->basicGet($entity, [
$param['pageSize'][0] => $param['pageSize'][1],
]);

Example

<?php

namespace App\Http\Controllers;

use App\Http\Helpers\Grenke\Helper as grenkeHelper;
use App\Services\GrenkeApiService;
use Illuminate\Http\JsonResponse;
use Throwable;

class GrenkeController extends Controller
{
public function __construct(
protected GrenkeApiService $grenkeApiService
) {
}

public function store(string $entity = 'contracts'): JsonResponse
{
$model = grenkeHelper::getModel($entity);
$param = grenkeHelper::getParameter($entity);

$decoded = $this->grenkeApiService->getJson($entity, [
$param['pageSize'][0] => $param['pageSize'][1],
]);

$items = $decoded['Items'] ?? [];

foreach ($items as $item) {
try {
$model::query()->create($item);
} catch (Throwable $e) {
\Log::error('Grenke import failed', [
'entity' => $entity,
'item' => $item,
'message' => $e->getMessage(),
]);
}
}

return response()->json([
'data' => $decoded,
], 200);
}
}

app/Services/GrenkeImportService

Optional noch besser 💡

$model::query()->updateOrCreate(
['id' => $item['id']],
$item
);

Controller

Der Controller ist jetzt fast nur noch Routing und Response:

public function store(string $entity = 'contracts'): JsonResponse
{
$result = $this->grenkeImportService->import($entity);

return response()->json([
'success' => true,
'data' => $result,
]);
}

Example

<?php

namespace App\Http\Controllers;

use App\Services\GrenkeImportService;
use Illuminate\Http\JsonResponse;
use Throwable;

class GrenkeController extends Controller
{
public function __construct(
protected GrenkeImportService $grenkeImportService
) {
}

public function store(string $entity = 'contracts'): JsonResponse
{
try {
$result = $this->grenkeImportService->import($entity);

return response()->json([
'success' => true,
'data' => $result,
], 200);
} catch (Throwable $e) {
\Log::error('Grenke store import failed', [
'entity' => $entity,
'message' => $e->getMessage(),
]);

return response()->json([
'success' => false,
'message' => $e->getMessage(),
], 500);
}
}
}

app/Services/GrenkeRequestService

Call over grenkeApiService

$this->grenkeApiService->postJson('requests', $payload);
$this->grenkeApiService->getJson('requests/' . $financingId);
$this->grenkeApiService->getJson('requests/' . $financingId . '/e-signature/configuration');
$this->grenkeApiService->postJson('requests/' . $financingId . '/e-signature');
$this->grenkeApiService->putJson('requests/' . $financingId . '/cancel-e-signature');
$this->grenkeApiService->putJson('requests/' . $financingId . '/switchToPaperContract');

Example

$result = $this->grenkeRequestService->process(
requestPayload: [
'customerNumber' => '12345',
'amount' => 15000,
'term' => 36,
],
cancelESignature: false,
eSignaturePayload: [],
cancelPayload: [],
switchPayload: [],
maxAttempts: 15,
sleepMilliseconds: 1000
);