converter = $container->get('Converter'); $this->container = $container; } /** * @param Request|null $request * * @return Response */ public function handle(Request $request = null) { $this->request = $request ?: Request::createFromGlobals(); $this->container->add('Request', $this->request); $method = $this->request->getMethod(); $uri = $this->request->getPathInfo(); /** * Failsafe; falls Webserver-Konfiguration Probleme bereitet. * Dann kann der Pfad zur Ressource im Parameter "path" übergeben werden. * * @example /api/index.php?path=/v1/artikelkategorien&sort=bezeichnung */ if ($uri === '' && $this->request->get->has('path')) { $uri = $this->request->get->get('path'); $queryParams = $this->request->get->all(); unset($queryParams['path']); $this->request->get = new ReadonlyParameterCollection($queryParams); } try { $this->auth = $this->get('DigestAuth'); $this->auth->checkLogin(); $this->response = $this->handleApiRequest($method, $uri); } catch (ApiHttpException $e) { $this->response = $this->createErrorResponse($e); } return $this->response; } /** * @param string $serviceName * * @return object */ protected function get($serviceName) { return $this->container->get($serviceName); } /** * @param string $method * @param string $uri * * @return Response */ protected function handleApiRequest($method, $uri) { /** @var Router $apiRouter */ /** @var RouterResult $routeInfo */ $apiRouter = $this->get('ApiRouter'); /* * Routen zusammenstellen */ $collection = $apiRouter->createCollection(); $collection->addRoute(['GET', 'POST', 'PUT', 'DELETE'], '/', ['Version1', null, 'Start', 'indexAction']); $collection->addRoute(['GET', 'POST', 'PUT', 'DELETE'], '/v1', ['Version1', null, 'Start', 'indexAction']); /* * Dokumentation * * Routen greifen nur wenn Webserver falsch konfiguriert ist. Webserver sollte existierende Dateien direkt ausliefern. * Zugriff auf Dokumentation erfordert API-Authentifizierung wenn Routen greifen. */ $collection->addRoute(['GET', 'POST', 'PUT', 'DELETE'], '/docs.html', ['Version1', null, 'Start', 'docsAction']); $collection->addRoute(['GET', 'POST', 'PUT', 'DELETE'], '/assets/{assetfile}', ['Version1', null, 'Start', 'docsAssetsAction', 'handle_assets']); /** * Legacy-API * * @example POST /www/api/legacy/AdresseGet */ $collection->addRoute('POST', '/v1/gobnavconnect', ['Legacy', null, 'GobNavConnect', 'exampleAction', 'handle_navision']); $collection->addRoute('POST', '/v1/gobnavconnect/', ['Legacy', null, 'GobNavConnect', 'exampleAction', 'handle_navision']); $collection->addRoute('POST', '/{action}', ['Legacy', null, 'Default', 'postAction']); $collection->addRoute('GET', '/{action}', ['Legacy', null, 'Default', 'postAction']); $collection->addRoute('GET', '/v1/mobileapi/dashboard', ['Legacy', null, 'MobileApi', 'dashboardAction', 'mobile_app_communication']); $collection->addRoute('GET','/opentrans/dispatchnotification/{id:\d+}', ['Legacy',null,'OpenTransConnect','readDispatchnotification', 'handle_opentrans'] ); $collection->addRoute('GET','/opentrans/dispatchnotification/orderid/{orderid:\d+}', ['Legacy',null,'OpenTransConnect','readDispatchnotification', 'handle_opentrans'] ); $collection->addRoute('GET','/opentrans/dispatchnotification/ordernumber/{ordernumber:\w+}', ['Legacy',null,'OpenTransConnect','readDispatchnotification', 'handle_opentrans'] ); $collection->addRoute('GET','/opentrans/dispatchnotification/extorder/{extorder:\w+}', ['Legacy',null,'OpenTransConnect','readDispatchnotification', 'handle_opentrans'] ); /*$collection->addRoute('POST', '/opentrans/dispatchnotification', ['Legacy', null, 'OpenTransConnect', 'createDispatchnotification'] );*/ $collection->addRoute('PUT', '/opentrans/dispatchnotification/{id:\d+}', ['Legacy', null, 'OpenTransConnect', 'updateDispatchnotification', 'handle_opentrans'] ); $collection->addRoute('PUT', '/opentrans/dispatchnotification/orderid/{orderid:\d+}', ['Legacy', null, 'OpenTransConnect', 'updateDispatchnotification', 'handle_opentrans'] ); $collection->addRoute('PUT', '/opentrans/dispatchnotification/ordernumber/{ordernumber:\w+}', ['Legacy', null, 'OpenTransConnect', 'updateDispatchnotification', 'handle_opentrans'] ); $collection->addRoute('PUT', '/opentrans/dispatchnotification/extorder/{extorder:\w+}', ['Legacy', null, 'OpenTransConnect', 'updateDispatchnotification', 'handle_opentrans'] ); $collection->addRoute('GET','/opentrans/order/{id:\d+}',['Legacy',null,'OpenTransConnect','readOrder', 'handle_opentrans']); $collection->addRoute('GET','/opentrans/order/ordernumber/{ordernumber:\w+}',['Legacy',null,'OpenTransConnect','readOrder', 'handle_opentrans']); $collection->addRoute('GET','/opentrans/order/extorder/{extorder:\w+}',['Legacy',null,'OpenTransConnect','readOrder', 'handle_opentrans']); $collection->addRoute('POST', '/opentrans/order', ['Legacy', null, 'OpenTransConnect', 'createOrder', 'handle_opentrans'] ); $collection->addRoute('DELETE','/opentrans/order/{id:\d+}',['Legacy',null,'OpenTransConnect','deleteOrder', 'handle_opentrans']); $collection->addRoute('DELETE','/opentrans/order/ordernumber/{ordernumber:\w+}',['Legacy',null,'OpenTransConnect','deleteOrder', 'handle_opentrans']); $collection->addRoute('DELETE','/opentrans/order/extorder/{extorder:\w+}',['Legacy',null,'OpenTransConnect','deleteOrder', 'handle_opentrans']); /*$collection->addRoute('PUT', '/opentrans/order/{id:\d+}', ['Legacy', null, 'OpenTransConnect', 'updateOrder'] );*/ $collection->addRoute('GET','/opentrans/invoice/{id:\d+}',['Legacy',null,'OpenTransConnect','readInvoice', 'handle_opentrans']); $collection->addRoute('GET','/opentrans/invoice/orderid/{orderid:\d+}',['Legacy',null,'OpenTransConnect','readInvoice', 'handle_opentrans']); $collection->addRoute('GET','/opentrans/invoice/ordernumber/{ordernumber:\w+}',['Legacy',null,'OpenTransConnect','readInvoice', 'handle_opentrans']); $collection->addRoute('GET','/opentrans/invoice/extorder/{extorder:\w+}',['Legacy',null,'OpenTransConnect','readInvoice', 'handle_opentrans']); $collection->addRoute('POST', '/shopimport/auth', ['Legacy', null, 'Shopimport', 'auth', 'communicate_with_shop'] ); $collection->addRoute('POST', '/shopimport/syncstorage/{articlenumber:.+}', ['Legacy', null, 'Shopimport', 'syncStorage', 'communicate_with_shop'] ); $collection->addRoute('POST', '/shopimport/articletoxentral/{articlenumber:.+}', ['Legacy', null, 'Shopimport', 'putArticleToXentral', 'communicate_with_shop'] ); $collection->addRoute('POST', '/shopimport/articletoshop/{articlenumber:.+}', ['Legacy', null, 'Shopimport', 'putArticleToShop', 'communicate_with_shop'] ); $collection->addRoute('POST', '/shopimport/ordertoxentral/{ordernumber:.+}', ['Legacy', null, 'Shopimport', 'putOrderToXentral', 'communicate_with_shop'] ); $collection->addRoute('GET', '/shopimport/articlesyncstate', ['Legacy', null, 'Shopimport', 'getArticleSyncState', 'communicate_with_shop'] ); $collection->addRoute('GET', '/shopimport/statistics', ['Legacy', null, 'Shopimport', 'getStatistics', 'communicate_with_shop'] ); $collection->addRoute('GET', '/shopimport/modulelinks', ['Legacy', null, 'Shopimport', 'getModulelinks', 'communicate_with_shop'] ); $collection->addRoute('POST', '/shopimport/disconnect', ['Legacy', null, 'Shopimport', 'postDisconnect', 'communicate_with_shop'] ); $collection->addRoute('POST', '/shopimport/reconnect', ['Legacy', null, 'Shopimport', 'postReconnect', 'communicate_with_shop'] ); $collection->addRoute('GET', '/shopimport/status', ['Legacy', null, 'Shopimport', 'getStatus', 'communicate_with_shop'] ); $collection->addRoute('POST', '/shopimport/refund', ['Legacy', null, 'Shopimport', 'postRefund', 'communicate_with_shop'] ); /** * REST-API (v1) * * @example GET /www/api/v1/adressen */ // Abo-Artikel $collection->addRoute('POST', '/v1/aboartikel', ['Version1', 'ArticleSubscription', 'ArticleSubscription', 'createAction', 'create_subscription'] // Achtung: Eigener Controller ); $collection->addRoute('GET', '/v1/aboartikel', ['Version1', 'ArticleSubscription', 'Generic', 'listAction', 'list_subscriptions'] ); $collection->addRoute('GET', '/v1/aboartikel/{id:\d+}', ['Version1', 'ArticleSubscription', 'Generic', 'readAction', 'view_subscription'] ); $collection->addRoute('PUT', '/v1/aboartikel/{id:\d+}', ['Version1', 'ArticleSubscription', 'ArticleSubscription', 'updateAction', 'edit_subscription'] // Achtung: Eigener Controller ); $collection->addRoute('DELETE', '/v1/aboartikel/{id:\d+}', ['Version1', 'ArticleSubscription', 'Generic', 'deleteAction', 'delete_subscription'] ); // Abo-Artikel-Gruppen $collection->addRoute('POST', '/v1/abogruppen', ['Version1', 'ArticleSubscriptionGroup', 'Generic', 'createAction', 'create_subscription_group'] ); $collection->addRoute('GET', '/v1/abogruppen', ['Version1', 'ArticleSubscriptionGroup', 'Generic', 'listAction', 'list_subscription_groups'] ); $collection->addRoute('GET', '/v1/abogruppen/{id:\d+}', ['Version1', 'ArticleSubscriptionGroup', 'Generic', 'readAction', 'view_subscription_group'] ); $collection->addRoute('PUT', '/v1/abogruppen/{id:\d+}', ['Version1', 'ArticleSubscriptionGroup', 'Generic', 'updateAction', 'edit_subscription_group'] ); // Adressen /** @see AddressController::createAction */ $collection->addRoute('POST', '/v1/adressen', ['Version1', null, 'Address', 'createAction', 'create_address']); /** @see AddressController::listAction */ $collection->addRoute('GET', '/v1/adressen', ['Version1', null, 'Address', 'listAction', 'list_addresses']); /** @see AddressController::readAction */ $collection->addRoute('GET', '/v1/adressen/{id:\d+}', ['Version1', null, 'Address', 'readAction', 'view_address']); /** @see AddressController::updateAction */ $collection->addRoute('PUT', '/v1/adressen/{id:\d+}', ['Version1', null, 'Address', 'updateAction', 'edit_address']); // Addressen /*$collection->addRoute('POST', '/v2/adressen', array('Version1', 'Address', 'Generic', 'createAction') );*/ $collection->addRoute('GET', '/v2/adressen', ['Version1', 'Address', 'Generic', 'listAction','list_addresses'] ); $collection->addRoute('GET', '/v2/adressen/{id:\d+}', ['Version1', 'Address', 'Generic', 'readAction','view_address'] ); /*$collection->addRoute('PUT', '/v2/adressen/{id:\d+}', array('Version1', 'Address', 'Generic', 'updateAction') );*/ // Addressen-Typ (herr, frau, firma) $collection->addRoute('POST', '/v1/adresstyp', ['Version1', 'AddressType', 'Generic', 'createAction', 'create_address_type'] ); $collection->addRoute('GET', '/v1/adresstyp', ['Version1', 'AddressType', 'Generic', 'listAction', 'list_address_types'] ); $collection->addRoute('GET', '/v1/adresstyp/{id:\d+}', ['Version1', 'AddressType', 'Generic', 'readAction', 'view_address_type'] ); $collection->addRoute('PUT', '/v1/adresstyp/{id:\d+}', ['Version1', 'AddressType', 'Generic', 'updateAction', 'edit_address_type'] ); // Artikel /*$collection->addRoute('POST', '/v1/artikel', array('Version1', 'Article', 'Generic', 'createAction') );*/ $collection->addRoute('GET', '/v1/artikel', ['Version1', 'Article', 'Generic', 'listAction', 'list_articles'] ); $collection->addRoute('GET', '/v1/artikel/{id:\d+}', ['Version1', 'Article', 'Generic', 'readAction', 'view_article'] ); /*$collection->addRoute('PUT', '/v1/artikel/{id:\d+}', array('Version1', 'Article', 'Generic', 'updateAction') );*/ // Eigenschaften $collection->addRoute('GET', '/v1/eigenschaften', ['Version1', 'Property', 'Generic', 'listAction', 'list_property'] ); $collection->addRoute('GET', '/v1/eigenschaften/{id:\d+}', ['Version1', 'Property', 'Generic', 'readAction', 'view_property'] ); $collection->addRoute('DELETE', '/v1/eigenschaften/{id:\d+}', ['Version1', 'Property', 'Generic', 'deleteAction', 'delete_property'] ); $collection->addRoute('PUT', '/v1/eigenschaften/{id:\d+}', ['Version1', 'Property', 'Generic', 'updateAction', 'edit_property'] ); $collection->addRoute('POST', '/v1/eigenschaften', ['Version1', 'Property', 'Generic', 'createAction', 'create_property'] ); // Eigenschaftenwerte $collection->addRoute('GET', '/v1/eigenschaftenwerte', ['Version1', 'PropertyValue', 'Generic', 'listAction', 'list_property_value'] ); $collection->addRoute('GET', '/v1/eigenschaftenwerte/{id:\d+}', ['Version1', 'PropertyValue', 'Generic', 'readAction', 'view_property_value'] ); $collection->addRoute('DELETE', '/v1/eigenschaftenwerte/{id:\d+}', ['Version1', 'PropertyValue', 'Generic', 'deleteAction', 'delete_property_value'] ); $collection->addRoute('PUT', '/v1/eigenschaftenwerte/{id:\d+}', ['Version1', 'PropertyValue', 'Generic', 'updateAction', 'edit_property_value'] ); $collection->addRoute('POST', '/v1/eigenschaftenwerte', ['Version1', 'PropertyValue', 'Generic', 'createAction', 'create_property_value'] ); // // BELEGE // // /v1/belege => Nothing here $collection->addRoute('GET', '/v1/belege', ['Version1', null, 'Start', 'indexAction']); // Angebote $collection->addRoute('GET', '/v1/belege/angebote', ['Version1', 'DocumentOffer', 'Generic', 'listAction', 'list_quotes'] ); $collection->addRoute('GET', '/v1/belege/angebote/{id:\d+}', ['Version1', 'DocumentOffer', 'Generic', 'readAction', 'view_quote'] ); // Aufträge $collection->addRoute('GET', '/v1/belege/auftraege', ['Version1', 'DocumentSalesOrder', 'Generic', 'listAction', 'list_orders'] ); $collection->addRoute('GET', '/v1/belege/auftraege/{id:\d+}', ['Version1', 'DocumentSalesOrder', 'Generic', 'readAction', 'view_order'] ); // Lieferscheine $collection->addRoute('GET', '/v1/belege/lieferscheine', ['Version1', 'DocumentDeliveryNote', 'Generic', 'listAction', 'list_delivery_notes'] ); $collection->addRoute('GET', '/v1/belege/lieferscheine/{id:\d+}', ['Version1', 'DocumentDeliveryNote', 'Generic', 'readAction', 'view_delivery_note'] ); // Rechnungen $collection->addRoute('GET', '/v1/belege/rechnungen', ['Version1', 'DocumentInvoice', 'Generic', 'listAction', 'list_invoices'] ); $collection->addRoute('GET', '/v1/belege/rechnungen/{id:\d+}', ['Version1', 'DocumentInvoice', 'Generic', 'readAction', 'view_invoice'] ); $collection->addRoute('DELETE', '/v1/belege/rechnungen/{id:\d+}', ['Version1', 'DocumentInvoice', 'Generic', 'deleteAction', 'delete_invoice'] ); // Gutschriften/Stornorechnungen $collection->addRoute('GET', '/v1/belege/gutschriften', ['Version1', 'DocumentCreditNote', 'Generic', 'listAction', 'list_credit_memos'] ); $collection->addRoute('GET', '/v1/belege/gutschriften/{id:\d+}', ['Version1', 'DocumentCreditNote', 'Generic', 'readAction', 'view_credit_memo'] ); // // ENDE: BELEGE // $collection->addRoute('GET', '/v1/reports/{id:\d+}/download', ['Version1', null, 'Reports', 'downloadAction', 'view_report'] ); // Dateien $collection->addRoute('POST', '/v1/dateien', ['Version1', 'File', 'File', 'createAction', 'create_file'] ); $collection->addRoute('GET', '/v1/dateien', ['Version1', 'File', 'File', 'listAction', 'list_files'] ); $collection->addRoute('GET', '/v1/dateien/{id:\d+}', ['Version1', 'File', 'File', 'readAction', 'view_file'] ); $collection->addRoute('GET', '/v1/dateien/{id:\d+}/download', ['Version1', 'File', 'File', 'downloadAction', 'view_file'] ); $collection->addRoute('GET', '/v1/dateien/{id:\d+}/base64', ['Version1', 'File', 'File', 'base64Action', 'view_file'] ); /*$collection->addRoute('PUT', '/v1/dateien/{id:\d+}', array('Version1', 'File', 'File', 'updateAction') );*/ // Dokumenten-Scanner (DocScan) $collection->addRoute('POST', '/v1/docscan', ['Version1', 'DocumentScanner', 'DocumentScanner', 'createAction', 'create_scanned_document'] ); $collection->addRoute('GET', '/v1/docscan', ['Version1', 'DocumentScanner', 'DocumentScanner', 'listAction', 'list_scanned_documents'] ); $collection->addRoute('GET', '/v1/docscan/{id:\d+}', ['Version1', 'DocumentScanner', 'DocumentScanner', 'readAction', 'view_scanned_document'] ); // Artikelkategorien $collection->addRoute('POST', '/v1/artikelkategorien', ['Version1', 'ArticleCategory', 'Generic', 'createAction', 'create_article_category'] ); $collection->addRoute('GET', '/v1/artikelkategorien', ['Version1', 'ArticleCategory', 'Generic', 'listAction', 'list_article_categories'] ); $collection->addRoute('GET', '/v1/artikelkategorien/{id:\d+}', ['Version1', 'ArticleCategory', 'Generic', 'readAction', 'view_article_category'] ); $collection->addRoute('PUT', '/v1/artikelkategorien/{id:\d+}', ['Version1', 'ArticleCategory', 'Generic', 'updateAction', 'edit_article_category'] ); // Gruppen $collection->addRoute('POST', '/v1/gruppen', ['Version1', 'Group', 'Generic', 'createAction', 'create_group'] ); $collection->addRoute('GET', '/v1/gruppen', ['Version1', 'Group', 'Generic', 'listAction', 'list_groups'] ); $collection->addRoute('GET', '/v1/gruppen/{id:\d+}', ['Version1', 'Group', 'Generic', 'readAction', 'view_group'] ); $collection->addRoute('PUT', '/v1/gruppen/{id:\d+}', ['Version1', 'Group', 'Generic', 'updateAction', 'edit_group'] ); //CrmDokumente $collection->addRoute('POST', '/v1/crmdokumente', ['Version1', 'CrmDocument', 'Generic', 'createAction', 'create_crm_document'] ); $collection->addRoute('GET', '/v1/crmdokumente', ['Version1', 'CrmDocument', 'Generic', 'listAction', 'list_crm_documents'] ); $collection->addRoute('GET', '/v1/crmdokumente/{id:\d+}', ['Version1', 'CrmDocument', 'Generic', 'readAction', 'view_crm_document'] ); $collection->addRoute('PUT', '/v1/crmdokumente/{id:\d+}', ['Version1', 'CrmDocument', 'Generic', 'updateAction', 'edit_crm_document'] ); $collection->addRoute('DELETE', '/v1/crmdokumente/{id:\d+}', ['Version1', 'CrmDocument', 'Generic', 'deleteAction', 'delete_crm_document'] ); // Länder $collection->addRoute('POST', '/v1/laender', ['Version1', 'Country', 'Generic', 'createAction', 'create_country'] ); $collection->addRoute('GET', '/v1/laender', ['Version1', 'Country', 'Generic', 'listAction', 'list_countries'] ); $collection->addRoute('GET', '/v1/laender/{id:\d+}', ['Version1', 'Country', 'Generic', 'readAction', 'view_country'] ); $collection->addRoute('PUT', '/v1/laender/{id:\d+}', ['Version1', 'Country', 'Generic', 'updateAction', 'edit_country'] ); // Lager-Charge $collection->addRoute('GET', '/v1/lagercharge', ['Version1', 'StorageBatch', 'Generic', 'listAction', 'view_storage_batch'] ); // Lager-Mindesthaltbarkeitsdatum (MHD) $collection->addRoute('GET', '/v1/lagermhd', ['Version1', 'StorageBestBeforeDate', 'Generic', 'listAction', 'view_storage_best_before'] ); // Lieferadressen $collection->addRoute('POST', '/v1/lieferadressen', ['Version1', 'DeliveryAddress', 'Generic', 'createAction', 'create_delivery_address'] ); $collection->addRoute('GET', '/v1/lieferadressen', ['Version1', 'DeliveryAddress', 'Generic', 'listAction', 'list_delivery_addresses'] ); $collection->addRoute('GET', '/v1/lieferadressen/{id:\d+}', ['Version1', 'DeliveryAddress', 'Generic', 'readAction', 'view_delivery_address'] ); $collection->addRoute('PUT', '/v1/lieferadressen/{id:\d+}', ['Version1', 'DeliveryAddress', 'Generic', 'updateAction', 'edit_delivery_address'] ); $collection->addRoute('DELETE', '/v1/lieferadressen/{id:\d+}', ['Version1', 'DeliveryAddress', 'Generic', 'deleteAction', 'delete_delivery_address'] ); // Steuersätze $collection->addRoute('POST', '/v1/steuersaetze', ['Version1', 'TaxRate', 'Generic', 'createAction', 'create_tax_rate'] ); $collection->addRoute('GET', '/v1/steuersaetze', ['Version1', 'TaxRate', 'Generic', 'listAction', 'list_tax_rates'] ); $collection->addRoute('GET', '/v1/steuersaetze/{id:\d+}', ['Version1', 'TaxRate', 'Generic', 'readAction', 'view_tax_rate'] ); $collection->addRoute('PUT', '/v1/steuersaetze/{id:\d+}', ['Version1', 'TaxRate', 'Generic', 'updateAction', 'edit_tax_rate'] ); // Versandarten $collection->addRoute('POST', '/v1/versandarten', ['Version1', 'ShippingMethod', 'Generic', 'createAction', 'create_shipping_method'] ); $collection->addRoute('GET', '/v1/versandarten', ['Version1', 'ShippingMethod', 'Generic', 'listAction', 'list_shipping_methods'] ); $collection->addRoute('GET', '/v1/versandarten/{id:\d+}', ['Version1', 'ShippingMethod', 'Generic', 'readAction', 'view_shipping_method'] ); $collection->addRoute('PUT', '/v1/versandarten/{id:\d+}', ['Version1', 'ShippingMethod', 'Generic', 'updateAction', 'edit_shipping_method'] ); // Wiedervorlagen $collection->addRoute('POST', '/v1/wiedervorlagen', ['Version1', 'Resubmission', 'Generic', 'createAction', 'create_resubmission'] ); $collection->addRoute('GET', '/v1/wiedervorlagen', ['Version1', 'Resubmission', 'Generic', 'listAction', 'list_resubmissions'] ); $collection->addRoute('GET', '/v1/wiedervorlagen/{id:\d+}', ['Version1', 'Resubmission', 'Generic', 'readAction', 'view_resubmission'] ); $collection->addRoute('PUT', '/v1/wiedervorlagen/{id:\d+}', ['Version1', 'Resubmission', 'Generic', 'updateAction', 'edit_resubmission'] ); // Zahlungsweisen $collection->addRoute('POST', '/v1/zahlungsweisen', ['Version1', 'PaymentMethod', 'Generic', 'createAction', 'create_payment_method'] ); $collection->addRoute('GET', '/v1/zahlungsweisen', ['Version1', 'PaymentMethod', 'Generic', 'listAction', 'list_payment_methods'] ); $collection->addRoute('GET', '/v1/zahlungsweisen/{id:\d+}', ['Version1', 'PaymentMethod', 'Generic', 'readAction', 'view_payment_method'] ); $collection->addRoute('PUT', '/v1/zahlungsweisen/{id:\d+}', ['Version1', 'PaymentMethod', 'Generic', 'updateAction', 'edit_payment_method'] ); // Trackingnummern $collection->addRoute('POST', '/v1/trackingnummern', ['Version1', 'TrackingNumber', 'TrackingNumber', 'createAction', 'create_tracking_number'] // Achtung: Eigener Controller ); $collection->addRoute('GET', '/v1/trackingnummern', ['Version1', 'TrackingNumber', 'Generic', 'listAction', 'list_tracking_numbers'] ); $collection->addRoute('GET', '/v1/trackingnummern/{id:\d+}', ['Version1', 'TrackingNumber', 'Generic', 'readAction', 'view_tracking_number'] ); $collection->addRoute('PUT', '/v1/trackingnummern/{id:\d+}', ['Version1', 'TrackingNumber', 'TrackingNumber', 'updateAction', 'edit_tracking_number'] // Achtung: Eigener Controller ); // @todo Aufträge //$collection->addRoute('GET', '/v1/auftraege', array('Version1', 'Order', 'GetAllOrders')); //$collection->addRoute('GET', '/v1/auftraege/{id:\d+}', array('Version1', 'Order', 'GetOrderById')); //$collection->addRoute('POST', '/v1/auftraege', array('Version1', 'Order', 'CreateOrder')); /* * Route ermitteln */ $apiRouter->setCollection($collection); $routeInfo = $apiRouter->dispatch($method, $uri); $this->routerResult = $routeInfo; /* * Check permission */ if($routeInfo->getPermission() !== null){ $guard = New PermissionGuard($this->container->get('Database'), $this->auth->getApiAccountId()); $guard->check($routeInfo->getPermission()); } /* * Controller dispatchen */ $this->request->attributes->add($routeInfo->getRouterParams()); // Legacy-API-Controller if ($routeInfo->getControllerClass() === DefaultController::class) { $controller = new DefaultController( $this->container->get('LegacyApi'), $this->container->get('Request'), $this->container->get('DigestAuth')->getApiAccountId() ); $action = $routeInfo->getControllerAction(); return $controller->$action(); } if ($routeInfo->getControllerClass() === GobNavConnectController::class) { $controller = new GobNavConnectController( $this->container->get('LegacyApplication'), $this->container->get('Request') ); $action = $routeInfo->getControllerAction(); return $controller->$action(); } if ($routeInfo->getControllerClass() === OpenTransConnectController::class) { $controller = new OpenTransConnectController( $this->container->get('LegacyApplication'), $this->container->get('OpenTransConverter'), $this->container->get('Request'), $this->container->get('DigestAuth')->getApiAccountId() ); $action = $routeInfo->getControllerAction(); return $controller->$action(); } if ($routeInfo->getControllerClass() === ShopimportController::class) { $controller = new ShopimportController( $this->container->get('LegacyApplication'), $this->container->get('Request'), $this->container->get('DigestAuth')->getApiAccountId() ); $action = $routeInfo->getControllerAction(); return $controller->$action(); } if ($routeInfo->getControllerClass() === MobileApiController::class) { $controller = new MobileApiController( $this->container->get('LegacyApplication'), $this->container->get('Converter'), $this->container->get('Database'), $this->container->get('Request') ); $action = $routeInfo->getControllerAction(); return $controller->$action(); } if ($routeInfo->getControllerClass() === ReportsController::class) { $controller = new ReportsController( $this->container->get('LegacyApplication'), $this->container->get('Request'), $this->container->get('DigestAuth')->getApiAccountId() ); $action = $routeInfo->getControllerAction(); return $controller->$action(); } /** @var AbstractController $controller */ $controller = $this->container->getApiController( $routeInfo->getControllerClass() ); $controller->setResourceClass($routeInfo->getResourceClass()); return $controller->dispatch($routeInfo->getControllerAction()); } /** * @param int $errorCode * * @return string */ private function buildErrorLink($errorCode) { $pathInfo = $this->request->getPathInfo(); $fullUrl = $this->request->getFullUrl(); $apiUrl = $fullUrl; if ($pos = strrpos($fullUrl, $pathInfo)) { $apiUrl = substr($fullUrl, 0, $pos); } if ($pos = strrpos($apiUrl, '/index.php')) { $apiUrl = substr($apiUrl, 0, $pos); } return $apiUrl . '/docs.html#error-' . $errorCode; } /** * @param ApiHttpException $e * * @return Response */ private function createErrorResponse($e) { // Fehler-Informationen zusammenbauen $data = [ 'error' => [ 'code' => $e->getCode(), 'http_code' => $e->getStatusCode(), 'message' => $e->getMessage(), 'href' => $this->buildErrorLink($e->getCode()), ], ]; if ($e->hasErrors()) { // Validierungsfehler anhängen $data['error']['details'] = $e->getErrors(); } if ($this->isDebugModeActive()) { $data['debug'] = []; // Router-Informationen anhängen $data['debug']['router'] = $this->routerResult !== null ? $this->routerResult->toArray() : false; // Request-Informationen anhängen $pathInfoDetector = new PathInfoDetector($this->request); $pathInfo = $pathInfoDetector->detect(); $data['debug']['request'] = [ 'isFailsafe' => $this->request->isFailsafeUri(), 'pathInfo' => [ 'actual' => (string)$this->request->server->get('PATH_INFO'), 'expected' => $pathInfo, ], 'info' => [ 'method' => $this->request->getMethod(), 'requestUri' => $this->request->getRequestUri(), 'fullUri' => $this->request->getFullUri(true), ], 'serverParams' => $this->request->server->all(), 'header' => $this->request->header->all(), 'getParams' => $this->request->get->all(), 'postParams' => $this->request->post->all(), 'additionalParams' => $this->request->attributes->all(), ]; } // XML oder JSON if (in_array('text/html', $this->request->getAcceptableContentTypes(), true)) { // Client ist vermutlich ein Browser > JSON ausliefern $json = $this->converter->arrayToJson($data); $response = new Response( $json, $e->getStatusCode(), ['Content-Type' => 'application/json; charset=UTF-8'] ); } else { if (in_array('application/xml', $this->request->getAcceptableContentTypes(), true)) { $xml = $this->converter->arrayToXml($data['error'], 'error'); $response = new Response( $xml, $e->getStatusCode(), ['Content-Type' => 'application/xml; charset=UTF-8'] ); } else { $json = $this->converter->arrayToJson($data); $response = new Response( $json, $e->getStatusCode(), ['Content-Type' => 'application/json; charset=UTF-8'] ); } } // Login-Header mitschicken $response->setHeader('WWW-Authenticate', $this->auth->generateAuthenticationString()); return $response; } /** * @return bool */ private function isDebugModeActive() { return defined('DEBUG_MODE') && (int)DEBUG_MODE === 1; } }