| @@ -1,19 +1,16 @@ | |||
| <?php | |||
| /** | |||
| * @author Daniel Knudsen <d.knudsen@spawntree.de> | |||
| * @date 11.07.22 | |||
| */ | |||
| require_once('Product.php'); | |||
| class ApiExact | |||
| { | |||
| const DIVISION = '58687'; | |||
| const API_URL = "https://start.exactonline.de/api"; | |||
| const API_URL_WNR = self::API_URL . "/v1/" . self::DIVISION; | |||
| const CLIENT_ID = "5a04d118-349c-4750-aac3-fa3a386999c6"; | |||
| const CLIENT_SECRET = "E7Wuqcsp4Lih"; | |||
| const ACCESS_TOKEN_VALID_DURATION = 600 - 50; | |||
| const DIVISION = '58687'; | |||
| const ACCESS_TOKEN_VALID_DURATION = 600 - 50; | |||
| const ITEM_GROUP_UUID = 'df17bdaf-2af7-4e9f-8d60-326e36b57764'; | |||
| const PRODUCT_CODE_PREFIX = "WR"; | |||
| @@ -38,15 +35,12 @@ class ApiExact | |||
| $response = curl_exec($ch); | |||
| curl_close($ch); | |||
| $jsonResult = json_decode($response); | |||
| if (property_exists($jsonResult, 'error')) { | |||
| $msg = $jsonResult->error; | |||
| throw new Exception($msg); | |||
| } | |||
| $jsonResult->expiry_time = time() + self::ACCESS_TOKEN_VALID_DURATION; | |||
| file_put_contents('./tokenData', json_encode($jsonResult)); | |||
| @@ -57,7 +51,7 @@ class ApiExact | |||
| public function getProducts() | |||
| { | |||
| $baseUrl = self::API_URL . '/v1/' . self::DIVISION . "/bulk/Logistics/Items?"; | |||
| $baseUrl = self::API_URL_WNR . "/bulk/Logistics/Items?"; | |||
| $fields = [ | |||
| 'ID', | |||
| 'StandardSalesPrice', | |||
| @@ -93,6 +87,49 @@ class ApiExact | |||
| return $res; | |||
| } | |||
| public function createCustomer() | |||
| { | |||
| $url = self::API_URL_WNR . "/crm/Accounts"; | |||
| $parameters = [ | |||
| 'Name' => 'Daniel Knudsen', | |||
| 'AddressLine1' => 'Tarpenbekstrasse 100', | |||
| 'AddressLine2' => 'spawntree GmbH', | |||
| 'City' => 'Hamburg', | |||
| 'Postcode' => '20251', | |||
| 'Email' => 'd.knudsen@spawntree.de', | |||
| 'Country' => 'DE', | |||
| 'Phone' => '017663186731', | |||
| 'Status' => 'C', | |||
| ]; | |||
| return json_decode($this->postApiData($url, $parameters)); | |||
| } | |||
| public function createSalesOrder() | |||
| { | |||
| $url = self::API_URL_WNR . "/salesorder/SalesOrders"; | |||
| $parameters = [ | |||
| 'Description' => 'Daniel Knudsen', | |||
| 'OrderDate' => '07/13/2022 17:00:00', | |||
| 'OrderedBy' => '9ba706a3-d6f5-40c8-8d4f-e55a37692cef', | |||
| 'WarehouseID' => 'd8a6a9b8-d0ac-4d36-8d00-bd420d0d81f5', | |||
| 'SalesOrderLines' => [ | |||
| [ | |||
| 'Description' => 'TEST: Reinigungstuch grün', | |||
| 'Item' => '9dcd8b50-5de6-4f15-a51a-c51282292383', | |||
| 'UnitPrice' => '2.45', | |||
| 'Quantity' => '3' | |||
| ], | |||
| [ | |||
| 'Description' => 'TEST: McQuade´s E-Bike Kettenrückführ - Tool', | |||
| 'Item' => '0e04113f-1299-4d3c-b65e-01e83ca5b3b2', | |||
| 'UnitPrice' => '476.00', | |||
| 'Quantity' => '1' | |||
| ], | |||
| ] | |||
| ]; | |||
| return json_decode($this->postApiData($url, $parameters)); | |||
| } | |||
| private function getApiData($url) | |||
| { | |||
| $ch = curl_init(); | |||
| @@ -101,7 +138,27 @@ class ApiExact | |||
| CURLOPT_HTTPHEADER => array('Accept: application/json' , "Authorization: Bearer " . $this->getAccessToken() ), | |||
| CURLOPT_RETURNTRANSFER => TRUE, | |||
| )); | |||
| return curl_exec($ch); | |||
| $res = curl_exec($ch); | |||
| curl_close($ch); | |||
| return $res; | |||
| } | |||
| private function postApiData($url, $data) | |||
| { | |||
| $ch = curl_init(); | |||
| curl_setopt_array($ch, array( | |||
| CURLOPT_URL => $url, | |||
| CURLOPT_HTTPHEADER => array( | |||
| 'Content-Type: application/json', | |||
| 'Accept: application/json', | |||
| "Authorization: Bearer " . $this->getAccessToken() ), | |||
| CURLOPT_RETURNTRANSFER => TRUE, | |||
| CURLOPT_POST => TRUE, | |||
| CURLOPT_POSTFIELDS => json_encode($data) | |||
| )); | |||
| $res = curl_exec($ch); | |||
| curl_close($ch); | |||
| return $res; | |||
| } | |||
| private function getFieldString($fields) | |||
| @@ -115,5 +172,4 @@ class ApiExact | |||
| } | |||
| return $res; | |||
| } | |||
| } | |||
| @@ -1,9 +1,4 @@ | |||
| <?php | |||
| /** | |||
| * @author Daniel Knudsen <d.knudsen@spawntree.de> | |||
| * @date 11.07.22 | |||
| */ | |||
| class Product | |||
| { | |||
| @@ -0,0 +1,7 @@ | |||
| <?php | |||
| require __DIR__ . '/ApiExact.php'; | |||
| require __DIR__ . '/IsotopeDatabaseHandler.php'; | |||
| $apiExact = new ApiExact(); | |||
| var_dump($apiExact->createCustomer()); | |||
| @@ -0,0 +1,7 @@ | |||
| <?php | |||
| require __DIR__ . '/ApiExact.php'; | |||
| require __DIR__ . '/IsotopeDatabaseHandler.php'; | |||
| $apiExact = new ApiExact(); | |||
| var_dump($apiExact->createSalesOrder()); | |||
| @@ -0,0 +1,7 @@ | |||
| <?php | |||
| require __DIR__ . '/ApiExact.php'; | |||
| require __DIR__ . '/IsotopeDatabaseHandler.php'; | |||
| $apiExact = new ApiExact(); | |||
| echo $apiExact->getAccessToken() . "\n"; | |||
| @@ -1,12 +1,10 @@ | |||
| <?php | |||
| require __DIR__ . '/ApiExact.php'; | |||
| require __DIR__ . '/IsotopeDatabaseHandler.php'; | |||
| $apiConnector = new ApiExact(); | |||
| $apiExact = new ApiExact(); | |||
| $databaseHandler = new IsotopeDatabaseHandler(); | |||
| //echo $apiConnector->getAccessToken() . "\n"; | |||
| $products = $apiConnector->getProducts(); | |||
| $products = $apiExact->getProducts(); | |||
| $databaseHandler->processProducts($products); | |||
| $b = 0; | |||
| @@ -0,0 +1,22 @@ | |||
| <?php | |||
| /** | |||
| * @author Daniel Knudsen <d.knudsen@spawntree.de> | |||
| * @date 12.07.22 | |||
| */ | |||
| namespace App\EventListener; | |||
| use Contao\CoreBundle\ServiceAnnotation\Hook; | |||
| use Contao\FrontendTemplate; | |||
| use Contao\Module; | |||
| class PostCheckoutListener | |||
| { | |||
| /** | |||
| * @Hook("postCheckout") | |||
| */ | |||
| public function __invoke(int $userId, array $userData, Module $module): void | |||
| { | |||
| throw new \Exception('ARRRRRRRGGGGGGGGGG'); | |||
| } | |||
| } | |||
| @@ -1 +1 @@ | |||
| {"access_token":"stampDE001.gAAAAADL6aOtBYXnf9oX8oo7QyrDQln7zJtt7sEaJn2dbvaous1UbSvppR1Ya3CqVAanUy1qRx9lkr6U7tCTjX318c4kxnm67dmQmPukEAWpbUjetTe4avA8UMx-J5ykAkUN1pNTB1R9y2GxDt4jCCL1bUZkCDq0HNKnjXkXhtwVBBKWVAIAAIAAAACReWmKSqdcD9GTilQlefKkIOXIV7IWN27Wv2H73pY06G6khyNvxDbfoWCF_ZKeaR6ncZJshOuZ6JzsMdBle7CuX3OE98277itx8n36aVyoxnbE40-dWv9XnFfteOHQfKsAnasF8q746fdxGhJdvxfZmv_99ncUwpuR-7UqePwshwsM0wBvPMI0gaEROyEHv1RwhrtCINJi92UlNNv5pJfD5MQIflZ_3xm1mxF_d-vXNMHASos3YciXA1BzCWTO5ouTRjxTz7PDXhQSrOHOudrPWuCxUa_vQ8i9RbtVxd8DUPRU7fheRGsfaTKwDo76IHYDx0ZP8_YhTaMYlEXKTJM-7qPmNiWZ6_M2J0BsytQtdyXcUP8H6W_S0e0yQ6Ds6Yt8XEfBUPFkyRXKcaL0Jix-YlAA2yRbqyM4g_ndN5R9oiJtrKUxbKEf8WXmmnAWL7yz4UTkgXP-zi7o_z-YvZcrCUHpcESF7chhEXh6C1OPb1XkfeqozFX-JSwO_FwcOsRktXxqT5OCnNeZ7tnaw7zGN8ETRnMCLAOKOueX6lBgOOrGszAJYSkegpl5ZLAQBPgGi3JDASo86xF-yc1zDRKcgIONnAFSatASdvdZen11JzedrCIPaUnXVIKLHOQSTIzqVKNp23yVMEbQfEFj4tFkHsLaiKVab6fMOJdQ5qNHNnoVAzKRhcvhyz3tP__g6BTgUm3C3awOHzu_1LFsZuApavWLf_jZRq6na5jWitCUgCy6Ib4vrBC6KaHqdHi1xb3NXfq3FGw_ZO1phMm2TSK7","token_type":"bearer","expires_in":"600","refresh_token":"stampDE001.vhK0!IAAAALosHRpQdPUuLdhX-jaECbgokkK2deGK7TFtE2UnTaF28QEAAAFEZACQo3HB6AUdD06dCUPbm6lVP-4OtC0-ypV5PXBpfcssApvgMeC5P3JVyqB88YJmy1mvOhlewxPBW5oimVSgoXwJRGTMr9CxgSQTRbfusoi4ZMxEE7pDdfx0W1YffbCUluwuq8-qrQtlALer-5nnUU8B699O_B9qMGAbyO94wapxDKIAX9ArcMQFBiSSflFJtMpGQvrdOI-UCPw-TQ7mKfFSKN6XpG9v8QIzgcxOd8oSt4cGlWVUD7bRMmCFUYkgv2OBMxdlvvJ6ETCkRqQ2B3ydY2XjLm_8_S7FOi7f6ZCck0d9mIY7sQoCAmM8G19fgWX4s02eLOSJ4pY7tLGwfPU0l-d1NZiCedhcDjUVugl3bF42F_LJuPTr2HEbU7Zqgfjh5LvlQrFxBpX9-fYCxGjQPU4pDg39s1BUlUKWADQuR_xZe7q4GyQHV9414B9qUWyf9sC5dYxYcWGEszm6TZyofybaFEK5N2tgGc8h3BbVayX4exUuY_B-bPBiv1uzfv_uDc0UKQ0VX__yyhvER5HQTSg8kGndXKJ3ReOvroXzzJOjZ1AOM5OnZCZZ9lyWGDZuyPJyoSb-W1DfVmiwUmclCxD-OCN7t_W1U1w3ZX4YiS7nANi7KpmFGo0ptcX7GwmyhCPk7jg8JUEyWEAp","expiry_time":1657629511} | |||
| {"access_token":"stampDE001.gAAAAKLeomGUJnO_59CX7KmwE4tkt1bPxLR7EfU5E2eHjj6LeU2dAPfkRstKdlJJoudf3y6ehyKwF5wQQ1SljbA5sRrGwQsw4M876o0RRtxVHwyR6_QSoM7kP3qj7HfJLEDWjY-KrlJf_rlKtZZ2sRGJkX9jbd-4XDA_uqQECkf2NnIfVAIAAIAAAAC2ADvWhSjIjtyvs4_rhH9HzqaVKUbQthUoKf6StMSX4O5GzilHhM2cQCQJly_7hbpKHJMe4o167cPYIQLTeOilQdlQh21nhGykWfOKtXG31h210WtT2bg8Kc0MtrHQGi_f161wE_xINPXr-H7GTcXLe4klIGUkv0kmmmUacNoDUDfU1fPRTCCFvmkRnE7iBzd116aY9XMVw6mDucFExI9U-dLOD8IFWCPa9U6DSd50T7WoglDHC8Enh-J92C1c8kAhCCiGyA5GHyb9S1eJAnHFDYzOl9y0pwtIHekBJq-LxpzAbVieBUZrXEsTJnD7eiHvKoy9g_Bl-jOVgPTJT29n0dFDUClE_iQ6MGydAiEVKoyhQO20W7EJg64G8l6ZHZrd8r1J36TZ4jmdZ8E8_wqw3MzYGZm4vEXK4G0Lf2-j5uD0eh3aKPQCCdn_jEiCaEABQ-bsvd9sQazNNHbDwzl82GZdlhY8sqln14NpNloahOxhY9-jKu5nT9IBN2EftT-VoLNWp_E4ydPltM_7SS0Xro9j8nf7xNjpBDa__GeR2QSg_He5VR6u2n4lUbU1Qzks2W38RiCA3jXrQ-T6FCtiiaf5rhMzudqeq2c94Ggbn1g7BD_3S9xUFeA5kmSCkn1NZ3RzSqmkMq4IVPcbsJFYeoCiuZ1gYcvSOoBMHN8mjZ8j3xpPEvzJSX39arD5IeNqrLZDXuEU5aORiRnqjN6kPC4w1GQbbMsEL94r8tYGy8VkW7bstxkar7vb2J8vOPhLamN0mcxJdTZCCJ8tj18e","token_type":"bearer","expires_in":"600","refresh_token":"stampDE001.vhK0!IAAAANKu8TC2-MBN5wFyro7uwanpxXBsRFy7YkYSPaM9jMCm8QEAAAEVEJUYfzoc3Q1hatgTMAOm__pmwjTgdkOyzb7qUj7oRvir1XftD_cb5eE7J-06Q0SxWegFPfULR65PDc6Id0pDXZbugqaKhK24Gg9Gr0x74g4EW8HMYJ0PsW1uqvpOb_ph9mQxYllDQf598_uPZvuvxAMN4NOipKiHEXn9tExbn-rmJdrV9bwa3fAm5b2ALbzfBEKCuzuwLkrjH3cheaMC2TaksJ6M2we9IeAezapsyOVEl6QtnhY67L3Irp_bUV_SCZ6H-gbPDX3mFujxyw-lvRoC-ZcgIpM8EuWC3pN24abFp7Qaj8wE2X9_oAgvoJgn42lHl-x6M-QChdf78f6wiCPquk3OwwuBYsjmiJrHFQt4a6nRS-Y_A-J8IOdwq-_KZkvNTY5UI1ZmiGH5pvIDfaXTcvPn6r3C-sQecdImJM43Y_tgZ9a6p2gwPi8zNZSkXfwQH5bfal6tBcH43_8eGSp_M-VbLb7TotZfJgEIePSlZ--VV1aTaRMJ78_JBloFWvQabvhYEvvuvRaePbdGRgXzj95KgQeW8DzBXE6_zHSmhwkUEv11xgXimH3BFToSV_F25ZND7H3OkVM1-M8Jhbvrzh4SR5wRV5WfzC83Mk58HmDtI7xR0owYAu-9mtidFsK8mRC3nJzZSOWdGenZ","expiry_time":1657726518} | |||