69 lines
2.4 KiB
PHP
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;
|
|
}
|
|
}
|