100 lines
2.7 KiB
PHP
100 lines
2.7 KiB
PHP
<?php
|
||
declare(strict_types=1);
|
||
|
||
namespace PaypalV2;
|
||
|
||
/**
|
||
* Laedt die geschuetzte PayPal-v2-Konfiguration von ausserhalb des Webroots.
|
||
*/
|
||
final class Config
|
||
{
|
||
/** Kandidaten-Pfade fuer die Config (erster lesbarer gewinnt). */
|
||
private const PATHS = [
|
||
'/var/www/vhosts/intelectra.de/import/paypal_v2/config.php',
|
||
];
|
||
|
||
private static ?array $data = null;
|
||
private static ?string $resolvedPath = null;
|
||
|
||
public static function load(): array
|
||
{
|
||
if (self::$data !== null) {
|
||
return self::$data;
|
||
}
|
||
|
||
foreach (self::PATHS as $path) {
|
||
if (is_file($path) && is_readable($path)) {
|
||
$cfg = include $path;
|
||
if (!is_array($cfg)) {
|
||
throw new \RuntimeException('PayPal v2: Config liefert kein Array: ' . $path);
|
||
}
|
||
self::$data = $cfg;
|
||
self::$resolvedPath = $path;
|
||
return self::$data;
|
||
}
|
||
}
|
||
|
||
throw new \RuntimeException('PayPal v2: Keine lesbare Config-Datei gefunden.');
|
||
}
|
||
|
||
public static function configPath(): string
|
||
{
|
||
self::load();
|
||
return (string) self::$resolvedPath;
|
||
}
|
||
|
||
/** Verzeichnis der Config – dient auch als Ablage fuer den Token-Cache. */
|
||
public static function dir(): string
|
||
{
|
||
return \dirname(self::configPath());
|
||
}
|
||
|
||
public static function mode(): string
|
||
{
|
||
$cfg = self::load();
|
||
return (($cfg['mode'] ?? 'sandbox') === 'live') ? 'live' : 'sandbox';
|
||
}
|
||
|
||
/** @return array{client_id:string,secret:string,webhook_id:string} */
|
||
public static function creds(): array
|
||
{
|
||
$cfg = self::load();
|
||
$mode = self::mode();
|
||
$c = $cfg[$mode] ?? [];
|
||
|
||
$clientId = (string) ($c['client_id'] ?? '');
|
||
$secret = (string) ($c['secret'] ?? '');
|
||
|
||
if ($clientId === '' || $secret === '' || \str_starts_with($clientId, 'HIER_')) {
|
||
throw new \RuntimeException('PayPal v2: Zugangsdaten fuer Modus "' . $mode . '" fehlen oder sind Platzhalter.');
|
||
}
|
||
|
||
return [
|
||
'client_id' => $clientId,
|
||
'secret' => $secret,
|
||
'webhook_id' => (string) ($c['webhook_id'] ?? ''),
|
||
];
|
||
}
|
||
|
||
public static function apiBase(): string
|
||
{
|
||
return self::mode() === 'live'
|
||
? 'https://api-m.paypal.com'
|
||
: 'https://api-m.sandbox.paypal.com';
|
||
}
|
||
|
||
public static function webhookId(): string
|
||
{
|
||
$cfg = self::load();
|
||
$mode = self::mode();
|
||
return (string) ($cfg[$mode]['webhook_id'] ?? '');
|
||
}
|
||
|
||
/** @return mixed */
|
||
public static function get(string $key, $default = null)
|
||
{
|
||
$cfg = self::load();
|
||
return $cfg[$key] ?? $default;
|
||
}
|
||
}
|