Ugrás a fő tartalomhoz

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-appPlugin
Hol futa saját szerveredena Vecton szerverein, a gazda-modulban
Hogyan kapcsolódikAPI, iframe, webhookPHP-interfészek a gazda-modulban
Ki adja kibármely fejlesztő, review utána Vecton
Mire jófelületi kiegészítés, külső folyamata 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-contracts csomag interfészei: InvoiceProvider, PaymentProvider (és TokenizedPaymentProvider), ShippingProvider, ReceiptProvider, TerminalProvider, valamint a HookHandler.
  • ServiceProvider — a Vecton\PluginContracts\PluginServiceProvider leszármazottja; a registerWithHost()-ban regisztrálja a providereit és hook-kezelőit a gazdánál.
  • Manifest — a csomagban (manifest.json vagy manifest.php), a composer.json extra.vecton kulcsa 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); a sensitive mező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.