Pluginok
A plugin — a marketplace-appal szemben — a Vecton kódjában fut: egy számlázó, fizetési, fuvarozó, nyugtaadó vagy kártyaterminál-szolgáltató bekötése, amit a Vecton ad ki, és a szervezet a felületén kapcsol be. A pluginok a Vecton csapatával egyeztetve, kódellenőrzés után kerülnek a rendszerbe; ha saját szolgáltatást szeretnél bekötni, és nem elég hozzá egy marketplace-app, keresd a Vecton csapatát.
| Marketplace-app | Plugin | |
|---|---|---|
| Hol fut | a saját szervereden | a Vecton szerverein, a gazda-modulban |
| Hogyan kapcsolódik | API, iframe, webhook | PHP-interfészek a gazda-modulban |
| Ki adja ki | bármely fejlesztő, review után | a Vecton |
| Mire jó | felületi kiegészítés, külső folyamat | a rendelés, számlázás, szállítás, fizetés folyamatába épülő szolgáltató |
Jelenleg elérhető pluginok például: Számlázz.hu (számla, nyugta), Barion (online fizetés), GLS, MPL, Packeta, Express One (szállítás).
Felépítés
Egy plugin egy Composer-csomag, ami egy gazda-modulban fut (webshop vagy
warehouse):
- Szerződések — a
vecton/plugin-contractscsomag interfészei:InvoiceProvider,PaymentProvider(ésTokenizedPaymentProvider),ShippingProvider,ReceiptProvider,TerminalProvider, valamint aHookHandler. - ServiceProvider — a
Vecton\PluginContracts\PluginServiceProviderleszármazottja; aregisterWithHost()-ban regisztrálja a providereit és hook-kezelőit a gazdánál. - Manifest — a csomagban (
manifest.jsonvagymanifest.php), acomposer.jsonextra.vectonkulcsa hivatkozik rá:
{
"extra": {
"vecton": { "plugin": "acme_invoicing", "host": "webshop", "manifest": "manifest.json" },
"laravel": { "providers": ["Acme\\VectonInvoicing\\AcmeInvoicingServiceProvider"] }
}
}
- Adat — a plugin saját táblái a gazda-modul sémájában,
plugin_<név>_*előtaggal jönnek létre.
A manifest
{
"manifest_version": "1.0",
"key": "acme_invoicing",
"name": "Acme számlázás",
"description": "Számla és sztornó rendelésből.",
"vendor": "Acme Kft.",
"version": "1.0.0",
"host": "webshop",
"category": "billing",
"capabilities": {
"invoices": ["issue_invoice", "void_invoice", "pdf"]
},
"hooks": ["order.status_changed", "order.payment_status_changed"],
"ui_slots": {
"order.detail.header_actions": {
"action": "issue_invoice",
"label": "Számla kiállítása",
"condition": "order.has_invoice !== true"
}
},
"config_schema": { "fields": [ { "key": "api_key", "type": "string", "required": true, "sensitive": true } ] }
}
capabilities— mit tud a plugin, a szerződések szerint csoportosítva.config_schema— a szervezetenkénti beállítások (például API-kulcs); asensitivemezők titkosítva tárolódnak, és a felület nem mutatja vissza őket.ui_slots— gombok és jelzések a rendelés felületén (order.detail.header_actions,order.detail.documents,order.list.payment_cell, …); a kattintást a gazda-modul a plugin akciójaként futtatja.
Hookok
A hook-kezelő (HookHandler) a feliratkozott eseményekre fut:
order.created, order.status_changed, order.payment_status_changed,
order.refunded, invoice.issued, invoice.voided,
payment.status_changed, shipment.created.
A hookok a tranzakció véglegesítése után, sorból, idempotencia-kulccsal futnak, és csak annál a szervezetnél, ahol a plugin be van kapcsolva. Egy lassú vagy hibás külső szolgáltatás így nem akasztja meg a rendelés mentését — a kezelőnek ugyanakkor ismételhetőnek kell lennie.