NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Purchases for Laravel

Overovanie podpisov a dôvera

Každé kryptografické primitívum pochádza z crypto-for-laravel; každé rozhodnutie o dôvere zostáva v tomto balíku. Purchases sám nevolá žiadnu funkciu openssl_*:

Obchodcrypto-for-laravel zabezpečíPurchases si ponechá
StripeHMAC-SHA256 a porovnanie v konštantnom časeSchému hlavičky t=/v1= a toleranciu časovej pečiatky proti replayu (predvolene 300 s)
AppleES256 JWS overenie a podpis a celú X.509 matematiku — parsovanie, SHA-1 odtlačky, väzby reťazca, platnosťRozhodnutie o dôvere — reťazec x5c pripnutý odtlačkom na Apple WWDR intermediate a Root CA G3, každý článok podpísal ten pod ním, každý certifikát je platný, koncový a sprostredkujúci certifikát nesú značkovacie rozšírenia Apple pre podpis App Store (1.2.840.113635.100.6.11.1) a WWDR (1.2.840.113635.100.6.2.1) — a potom väzba na aplikáciu (bundle id, prostredie, Apple ID)
GoogleRS256 JWS assertionOAuth2 JWT-bearer grant, scope a cache prístupového tokenu

Výnimky kryptografie sa na hranici každého poskytovateľa prekladajú na VerificationException, takže jeden catch pokryje všetky obchody. Pripnuté odtlačky Apple dokazujú len to, že notifikáciu podpísal Apple — ten týmto reťazcom podpisuje notifikácie všetkých aplikácií —, preto purchases každú navyše viaže na vašu aplikáciu: bundle id, prostredie a v produkcii Apple ID (pozrite Apple App Store).

Platnosť certifikátov Apple

Notifikácia App Store sa odmietne, keď je ktorýkoľvek certifikát v jej reťazci x5c — koncový, sprostredkujúci alebo koreňový — mimo svojho okna notBefore..notAfter. Tolerancia posunu hodín, uplatnená na oboch koncoch okna, vyrovná hodiny servera, ktoré mierne predbiehajú alebo meškajú:

// config/purchases.php
'settings' => [
    'apple' => [
        // Seconds, 0–3600. Default 60. Anything outside that range is a
        // misconfiguration and throws InvalidConfigurationException — a
        // fat-fingered value can never silently switch the check off.
        'certificate_clock_skew' => env('PURCHASES_APPLE_CERTIFICATE_CLOCK_SKEW', 60),
    ],
],

Odmietnutie má vlastnú správu s názvom certifikátu a okamihom, keď platnosť vypršala, takže expirovaný reťazec si nikdy nepomýlite so zlým podpisom:

RoundlyConsulting\Purchases\Exceptions\VerificationException:
Apple certificate [Apple Worldwide Developer Relations Certification Authority] expired at
2026-01-01T00:00:00+00:00; the notification's certificate chain is outside its validity period.

Opätovné overenie archivovaných notifikácií

Opätovné overenie archivovanej notifikácie Apple podpísanej medzičasom vymeneným, dnes už expirovaným certifikátom zlyhá — a to je správne, pretože expirovaný certifikát nič nedokazuje. certificate_clock_skew zvyšujte len kvôli posunu hodín; nie je to obdobie odkladu a jeho strop je jedna hodina. purchases:replay sa to netýka: výsledky obnovuje z auditných snapshotov, ktoré boli overené pri doručení.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.