25: Integraties
De meeste apps communiceren uiteindelijk met iets buiten zichzelf: een chatservice, een kalender, een boekhoudbackend, een kaartterminal, een betalingsverwerker. Phlo levert twee families hiervoor, beide in de runtime, zodat er geen SDK hoeft te worden toegevoegd en geen aparte client hoeft te worden aangesloten. Connectors zijn dunne, uniforme wrappers rond JSON REST API's; de betalingsresources omhullen Stripe en SumUp.
25.1: Connectoren
Een connector is een kleine klasse bovenop een derde-partij REST API. Elke connector breidt Connector uit, leest zijn eigen sectie met inloggegevens en retourneert dezelfde resultaatstructuur, zodat het aanroepen van Slack eruitziet als het aanroepen van Shopify.
$slack = Slack::make()
$res = $slack->send('#general', 'Deploy finished')
if ($res->ok) log('sent') else log($res->error)
make() laadt de inloggegevens van de connector uit de sectie in data/creds.ini (Slack leest [Slack], Shopify leest [Shopify], enzovoort). Elke aanroep retourneert een genormaliseerd object, dus je takkeert op ->ok en leest ->data in plaats van een ander foutformaat per service te parseren:
obj(ok: true, status: 200, data: {...}) // success
obj(ok: false, status: 401, error: '...') // failure
Onder de motorkap beheert Connector de aanvraagwerkwoorden (get/post/put/patch/del/form), paginering (paginate()) en auth-headers. Elke connector biedt ook een static fields credential schema, zodat een instellingen scherm of het CMS het kan configureren zonder hard-coding.
Beschikbare connectors
| Groep | Connectors |
|---|---|
| Messaging | Slack, Telegram, Twilio, MessageBird, Resend |
| Cloud | GoogleCalendar, GoogleSheets, MicrosoftGraph |
| Finance | ExactOnline, Moneybird, EBoekhouden |
| Commerce | Lightspeed, Shopify |
Diensten die authenticeren met OAuth2 (Google, Exact) breiden OAuthConnector uit in plaats van Connector. Het houdt een automatisch ververste bearer token in een TokenStore (opgeslagen onder data/tokens/, ververst onder een exclusieve lock), zodat je code gewoon ->events(...) aanroept en de token-infrastructuur onzichtbaar blijft.
Per-connector methodenlijsten leven in de Handleiding onder connectors. Het wordt gegenereerd uit de resourcebestanden, zodat het nooit afwijkt van de code.
25.2: Betalingen
Stripe
De Stripe resource is een dunne laag bovenop de officiële stripe/stripe-php SDK (voeg deze toe met Composer). Roep Stripe::boot() eenmaal aan met je geheime sleutel, en gebruik vervolgens de statische helpers:
Stripe::boot(%creds->Stripe)
$session = Stripe::checkout([
'mode' => 'subscription',
'line_items' => [['price' => 'price_123', 'quantity' => 1]],
'success_url' => 'https://example.com/done',
'cancel_url' => 'https://example.com/pricing',
])
location($session->url)
checkout() maakt een Checkout Session aan, portal($customerId, $returnUrl) opent het Billing Portal, en verifyWebhook($payload, $sigHeader, $secret) valideert een binnenkomende gebeurtenis voordat je erop handelt. customer, createCustomer, subscription, subscriptions, product en price dekken de rest van het gebruikelijke oppervlak.
SumUp
SumUp verwerkt kaartbetalingen met aanwezigheid op een gekoppelde SumUp Solo lezer via de Cloud API. Het is een connector (SumUp::make(), [SumUp] inloggegevens), dus het retourneert hetzelfde obj(ok, ...) resultaat:
$res = SumUp::make()->createReaderCheckout(1250, 'EUR', description: 'Table 4')
createReaderCheckout($amountMinor, $currency, ...) duwt een checkout naar de reader (het bedrag is in kleinere eenheden, dus 1250 is €12,50). transaction() en transactions() kijken het resultaat op, en terminateReaderCheckout() annuleert een lopende checkout.