53 lines
2.2 KiB
PHP
53 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
/**
|
|
* Der veröffentlichbare Stripe-Schlüssel (`pk_…`) des aktiven Betriebsmodus.
|
|
*
|
|
* Stripe gibt einem Betreiber drei Werte: diesen, den Secret Key und das
|
|
* Signatur-Secret. Die anderen zwei liegen im Tresor; dieser bewusst NICHT —
|
|
* er ist öffentlich. Ihn hinter „wird verschlüsselt gespeichert und nie wieder
|
|
* vollständig angezeigt" zu setzen, wäre Theater, und es nähme dem Betreiber
|
|
* die Möglichkeit nachzusehen, welcher Schlüssel eigentlich eingetragen ist.
|
|
* Also eine gewöhnliche Einstellung, im Klartext sichtbar.
|
|
*
|
|
* Je Betriebsmodus getrennt, wie die zwei daneben: Stripe stellt ihn je Konto
|
|
* eigen aus, und ein `pk_live` im Testplatz ist genau die Verwechslung, die
|
|
* beim Einrichten passiert. Sichtbar gemacht wird sie über
|
|
* OperatingMode::ofStripeKey(), das dafür `pk_`-Präfixe mitgelernt hat.
|
|
*
|
|
* **Diese Anwendung liest ihn heute nirgends.** Der Checkout macht
|
|
* `redirect()->away()` auf Stripes eigene Bezahlseite; im Browser läuft kein
|
|
* Stripe.js, das ihn bräuchte. Er steht hier, weil ein Betreiber beim
|
|
* Einrichten drei Werte vor sich hat und nicht raten soll, welcher wohin
|
|
* gehört — und weil der Tag, an dem eine eingebettete Bezahlmaske dazukommt,
|
|
* ihn ohnehin verlangt. Das ist auf der Karte auch so gesagt, statt es zu
|
|
* verschweigen und wie eine wirksame Einstellung aussehen zu lassen.
|
|
*/
|
|
final class StripePublishableKey
|
|
{
|
|
private static function settingKey(?OperatingMode $mode = null): string
|
|
{
|
|
return 'stripe.publishable_key.'.($mode ?? OperatingMode::current())->value;
|
|
}
|
|
|
|
/** Der gespeicherte Wert, sonst der aus der Serverdatei — je Modus die eigene Zeile. */
|
|
public static function current(?OperatingMode $mode = null): string
|
|
{
|
|
$mode ??= OperatingMode::current();
|
|
$stored = Settings::get(self::settingKey($mode));
|
|
|
|
if (filled($stored)) {
|
|
return (string) $stored;
|
|
}
|
|
|
|
return (string) config($mode->isTest() ? 'services.stripe.key_test' : 'services.stripe.key');
|
|
}
|
|
|
|
public static function set(string $key, ?OperatingMode $mode = null): void
|
|
{
|
|
Settings::set(self::settingKey($mode), trim($key));
|
|
}
|
|
}
|