Files
2025-08-02 16:30:27 +02:00

69 lines
2.4 KiB
PHP

<?php
declare(strict_types=1);
namespace KupShop\BankAutoPaymentBundle\Admin\Controller;
use KupShop\BankAutoPaymentBundle\PaymentSources\EverifinApi;
use KupShop\KupShopBundle\Routing\AdminRoute;
use KupShop\KupShopBundle\Util\System\CurlUtil;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Router;
use Symfony\Contracts\Service\Attribute\Required;
class EverifinController extends AbstractController
{
protected EverifinApi $everifinApi;
public const BANK_ACCOUNT_URL = 'https://api.everifin.com/v1/bank-accounts';
#[AdminRoute('/_everifin')]
public function handleOAuth(Request $request, CurlUtil $curlUtil, EverifinApi $everifinApi): Response
{
if (!findModule(\Modules::BANK_AUTO_PAYMENTS, \Modules::SUB_EVERIFIN)) {
return new Response(status: 404);
}
$code = $request->get('code');
$curl = $curlUtil->getClient([
'Content-Type' => 'application/x-www-form-urlencoded',
]);
$curlRequest = $curl->request('POST', 'https://app.everifin.com/auth/realms/everifin_app/protocol/openid-connect/token', [
'body' => [
'grant_type' => 'authorization_code',
'client_id' => $everifinApi->getClientId(),
'client_secret' => $everifinApi->getClientSecret(),
'code' => $code,
'redirect_uri' => path('kupshop_bankautopayment_admin_everifin_handleoauth', referenceType: Router::ABSOLUTE_URL),
],
]);
$curlResponse = $curlRequest->toArray();
$accountsResponse = $curlUtil->getClient(['Authorization' => "Bearer {$curlResponse['access_token']}"])
->request('GET', self::BANK_ACCOUNT_URL);
$accounts = [];
foreach ($accountsResponse->toArray()['data'] as $account) {
$accounts[] = $account['accountName'];
}
$curlResponse['accounts'] = $accounts;
$this->everifinApi->saveSettings($curlResponse, true);
return new RedirectResponse('/admin/launch.php?s=settings.php&acn=edit&flap=flapDeliveryPayment');
}
#[Required]
public function setEverifinApi(EverifinApi $everifinApi): void
{
$this->everifinApi = $everifinApi;
}
}