fsObject = new Filesystem(); $this->current_dir_path = getcwd(); $this->hiltesApiUrl = $_ENV['HILTES_API_URL']; $this->hiltesUsr = $_ENV['HILTES_API_USER']; $this->hiltesPass = $_ENV['HILTES_API_PASS']; } public function import() { $finder = new Finder(); $finder->files()->in($this->current_dir_path . "/hiltes/h2c/"); foreach ($finder as $file) { $contents = $file->getContents(); var_dump($contents); } } /** * @param string $data * @return void */ public function export(string $data) { try { $new_file_path = $this->current_dir_path . "/hiltes/c2h/" . $this->createFileName(); if (!$this->fsObject->exists($new_file_path)) { $this->fsObject->touch($new_file_path); $this->fsObject->chmod($new_file_path, 0777); $this->fsObject->dumpFile($new_file_path, $data); } } catch (IOExceptionInterface $exception) { echo "Error creating file at" . $exception->getPath(); } } /** * Aufbau des Dateinamens: * WU + Datum(TTMM) + Fortlaufendenummer (x2) + “.“ +Filialnummer(x4) * Beispieldateiname : WU220401.0001 */ public function createFileName(): string { $date = date('dm'); $number = '01'; $filial = '0001'; return 'WU' . $date . $number . '.' . $filial; } public function createRequest($orderData) { dump($orderData); $data = array(); $this->loginToHiltes('', ''); $order = $this->orderRepository->findOneBy(array('orderId' => $orderData->getOrderId())); dump($order); /** * @var Order */ if ($order) { //foreach ($orders as $order) { // if ($order->getStatus() > 0) continue; $tA = $order->getData();#json_decode($order->getData()); #$tA['orderdate'] = "2023-08-30T12:05:24.000Z"; dump($tA); #dd($order->getData()); #dd(array( # 'orderdate'=> $tA['orderdate'], # 'time'=> strtotime($tA['orderdate']), # 'gmdate '=> gmdate ('d-m-Y\TH:i:s.v\Z',strtotime($tA['orderdate'])), #)); #*** Umkonvertieren des Datumstings ***************** $tA['orderdate'] = gmdate('Y-m-d\TH:i:s.v\Z', $tA['orderdate'] ? strtotime($tA['orderdate']) : time()); #**** $arr = array( 'SalesDate' => $tA['orderdate'], "BranchNumber" => 8, #Die Filialnummer "ShopNumber" => 1, #Die Shopnummer "DistributionChannel" => 5, #Der Vertriebskanal 'SaleList' => array(), 'CustomerList' => array(), ); #*** Items *************** if (!empty($tA['data']) && is_array($tA['data'])) { # Noch nötig # "CalculatedSellingPrice" => 0, #X Kalkulierter Verkaufspreis # "AchievedSalesPrice" => 0, #X Erzielter Verkaufspreis $tSalNr = array(); foreach ($tA['data'] as $v) { $SalesNumber = (!empty($v['gtin']) ? $v['gtin'] : $v['sku']); if (preg_match('/^([0-9]+)_/', $SalesNumber, $tP)) { $SalesNumber = $tP[1]; } if (isset($tSalNr[$SalesNumber])) { $tSalNr[$SalesNumber]++; $SalesNumber .= $tSalNr[$SalesNumber]; } else { $tSalNr[$SalesNumber] = 0; } #dump($SalesNumber); #******** $v['CalculatedSellingPrice'] = 100.00; $v['AchievedSalesPrice'] = 90.00; $arr['SaleList'][] = array( "SalesLabel" => 'Ean',#$v['sku'],#X "SalesLabelNumber" => $SalesNumber,#X "SalesGoodsGroupNumber" => 0, "SizeDescription" => '',#"string", "CustomerNumber" => 0, "TypeOfEstate" => 0, "Amount" => $v['menge'],#X "CalculatedSellingPrice" => $v['CalculatedSellingPrice'], #X Kalkulierter Verkaufspreis "AchievedSalesPrice" => $v['AchievedSalesPrice'], #X Erzielter Verkaufspreis "TransactionType" => "Sale", #X Die Vorgangsart Sale=Verkauf Exchange=Umtausch / Storno "ReceiptNumber" => 0, #Die Belegnummer "DateOfSale" => $tA['orderdate'],#X das Verkaufsdatum mit Verkaufszeit "PaymentMethod" => 'Invoice',#X "CreditCard", "Currency" => 'EUR',#X "string", "Unit" => "Piece",#X "DistributionChannel" => 5, ); } } #*** Kundne ******************************* $arr['CustomerList'][] = array( "CustomerNumber" => $tA['kundennummer'], # Fake Daten "Surname" => 'MAX',#"string", "Forename" => 'MUSTERMANN',#"string", "AddressCity" => 'ERFURT',#"string", "AddressZipCode" => '99084', "string", "AddressStreet" => 'MusterStrasse 22',#"string", "AddressCountry" => 'DE',#"string", #*** Nicht nötig #"CardNumber" => 0, #"SalutionNumber" => 0, #"PostOfficeBox" => '',#"string", #"PostOfficeBoxZipCode" => '',#"string", #"Title" => '',#"string", #"PhoneNumber1" => '',#"string", #"PhoneNumber2" => '',#"string", #"FaxNumber" => '',#"string", #"BirthDay" => '',#"2023-09-14T11:54:26.708Z", #"Gender" => 'Male', #"EmailAddress" => '',#"string", #"Discount" => 0, #"Limit" => 0, #"LockMark" => 'Unblocked', #"DubiousMark" => 'Undubious', #"DubiousText" => '',#"string", #"DirectDebit" => '',#true, #"BankName1" => '',#"string", #"BankAccountNumber1" => '',#"string", #"BankCodeNumber1" => '',#"string", #"BankName2" => '',#"string", #"BankAccountNumber2" => '',#"string", #"BankCodeNumber2" => '',#"string", #"BankName3" => '',#"string", #"BankAccountNumber3" => '',#"string", #"BankCodeNumber3" => '',#"string", #"CreditcardNumber1" => '',#"string", #"CreditcardNumber2" => '',#"string", #"CreditcardNumber3" => '',#"string", #"CreditcardNumber4" => '',#"string", #"ChangeIndicator" => '',#true, #"Newsletter" => '',#true, #"Password" => '',#"string", #"AdBan" => '',#true ); dd($arr); $data = $this->createJson($arr); // } return $this->sendOrderToHiltes($data); } } /** * @param $usr * @param $pass * @return bool */ public function loginToHiltes($usr, $pass): bool { $url = $this->hiltesApiUrl . '/api/Authentication/authenticate'; $param = array( 'Username' => (!empty($usr) ? $usr : $this->hiltesUsr), 'Password' => (!empty($pass) ? $pass : $this->hiltesPass), # 'parse_mode' => 'html', # 'disable_notification' => $disable_notification, # 'text' => $message_text ); $r = $this->sendToHiltes($url, $param); $t = json_decode($r, true); if ($t['Success']) { $this->hiltesApiHash = $t['Data']; return true; } else { dump($r); dump('Login Error ' . __LINE__); return false; } } public function sendToHiltes($url, $param, $auth = false) { if ($auth) { #var_export($this->hiltesApiHash); #var_export($url); #var_export($param); } $ch = curl_init($url); if ($auth) { $authorization = "Authorization: Bearer " . $this->hiltesApiHash; } else { $authorization = false; } #dump($param); # Setup request to send json via POST. $payload = json_encode($param); #dump($payload); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json', $authorization)); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); # Return response instead of printing. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); # Send request. $result = curl_exec($ch); curl_close($ch); return $result; } public function createJson($data) { $arr = array( 'File' => array( "BranchNumber" => $data['BranchNumber'], #Die Filialnummer "ShopNumber" => $data['ShopNumber'], #Die Shopnummer "SalesDate" => $data['SalesDate'], #Das Umsatzdatu "DistributionChannel" => $data['DistributionChannel'] #Der Vertriebskanal ), 'SaleList' => array(), 'CustomerList' => array(), ); #*** Sale List if (!empty($data['SaleList'])) { foreach ($data['SaleList'] as $v) { $arr['SaleList'][] = array( "SalesLabel" => $v['SalesLabel'], #Das Etikettkennzeichen "SalesLabelNumber" => $v['SalesLabelNumber'], #Etikettennummer "SalesGoodsGroupNumber" => $v['SalesGoodsGroupNumber'], #"SizeDescription" => $v['SizeDescription'], #"CustomerNumber" => $v['CustomerNumber'], #"TypeOfEstate" => $v['TypeOfEstate'], "Amount" => $v['Amount'], "CalculatedSellingPrice" => $v['CalculatedSellingPrice'], "AchievedSalesPrice" => $v['AchievedSalesPrice'], "TransactionType" => $v['TransactionType'], #"ReceiptNumber" => $v['ReceiptNumber'], "DateOfSale" => $data['SalesDate'],#"2023-09-14T11:54:26.708Z", "PaymentMethod" => $v['PaymentMethod'], "Currency" => $v['Currency'], "Unit" => $v['Unit'], "DistributionChannel" => $v['DistributionChannel'] ); } } #*** Sale List if (true) { foreach ($data['CustomerList'] as $v) { $arr['CustomerList'][] = array( "CustomerNumber" => $v['CustomerNumber'], #"CardNumber" => $v['CardNumber'], #"SalutionNumber" => $v['SalutionNumber'], "Surname" => $v['Surname'], "Forename" => $v['Forename'], "AddressCity" => $v['AddressCity'], "AddressZipCode" => $v['AddressZipCode'], "AddressStreet" => $v['AddressStreet'], "AddressCountry" => $v['AddressCountry'], #"PostOfficeBox" => $v['PostOfficeBox'], #"PostOfficeBoxZipCode" => $v['PostOfficeBoxZipCode'], #"Title" => $v['Title'], #"PhoneNumber1" => $v['PhoneNumber1'], #"PhoneNumber2" => $v['PhoneNumber2'], #"FaxNumber" => $v['FaxNumber'],#"string", #"BirthDay" => $v['BirthDay'], #"Gender" => $v['Gender'], #"EmailAddress" => $v['EmailAddress'], #"Discount" => $v['Discount'], #"Limit" => $v['Limit'], #"LockMark" => $v['LockMark'], #"DubiousMark" => $v['DubiousMark'], #"DubiousText" => $v['DubiousText'], #"DirectDebit" => $v['DirectDebit'], #"BankName1" => $v['BankName1'],#"string", #"BankAccountNumber1" => $v['BankAccountNumber1'],#"string", #"BankCodeNumber1" => $v['BankCodeNumber1'],#"string", #"BankName2" => $v['BankName2'],#"string", #"BankAccountNumber2" => $v['BankAccountNumber2'],#"string", #"BankCodeNumber2" => $v['BankCodeNumber2'],#"string", #"BankName3" => $v['BankName3'],#"string", #"BankAccountNumber3" => $v['BankAccountNumber3'],#"string", #"BankCodeNumber3" => $v['BankCodeNumber3'],#"string", #"CreditcardNumber1" => $v['CreditcardNumber1'],#"string", #"CreditcardNumber2" => $v['CreditcardNumber2'],#"string", #"CreditcardNumber3" => $v['CreditcardNumber3'],#"string", #"CreditcardNumber4" => $v['CreditcardNumber4'],#"string", #"ChangeIndicator" => $v['ChangeIndicator'], #"Newsletter" => $v['Newsletter'], #"Password" => $v['Password'], #"AdBan" => $v['AdBan'] ); } } #dump($arr); return $arr; } public function sendOrderToHiltes($data) { $url = $this->hiltesApiUrl . '/api/WebSale/import'; $param = $data; dump($param); $r = $this->sendToHiltes($url, $param, true); $t = json_decode($r, true); if ($t['Success']) { return true; } else { dump($r); return false; } } public function checkData($data) { $umsatz = [ 'EtikettKz' => 'E', // E = EAN, I = Ident, W = Warengruppe 'Etikettnummer' => $data['sku'], // mit führenden Nullen bei Satzart „W“ die Warengruppennummer 'Warengruppennummer' => '0000', // mit führenden Nullen 'Groessenbez' => '', 'Kundennummer' => '00000000000000000000', 'Nachlassart' => '0', 'Menge' => '00000000000000000000', //7 Vor – und 2 Nachkommastellen (Darstellung ohne Komma mit führenden Nullen). 'Kalk-VkPreis' => '00000000000000000000', //7 Vor – und 2 Nachkommastellen (Darstellung ohne Komma mit führenden Nullen). 'Vorgangsart' => 'v', // u = Umtausch, v = Verkauf 'Belegnummer' => '00000000000000000000', // mit führenden Nullen 'Verkaufsdatum' => '00000000', // YYYYMMTT 'Verkaufszeit' => '000000', // HHMM 'Zahlungsart' => 2, // 1 = Kreditkarte, 2 = Rechnung, 3 = Lastschrift, 4 = Gutschein, 5 = Gutschrift, 6 = Mischzahlung 'Währung' => 'EUR', // EUR 'Einheit' => 'S', // S= Stück, M = Meter 'Vertriebskanal' => '0000', // Vertriebskanäle werden über das Stammdatenprogramm angelegt und müssen mit der hinterlegten Nummer aus dem Webshop übergeben werden ]; $kunde = [ 'Kunden-Nummer' => '00000000000000000000', // mit führenden Nullen 'Kartennummer' => '00000000000000000000', // mit führenden Nullen 'Nachname' => '00000000000000000000', // mit führenden Nullen 'Vorname' => '00000000000000000000', // mit führenden Nullen 'Ort' => '00000000000000000000', // mit führenden Nullen 'PLZ' => '00000000000000000000', // mit führenden Nullen 'Straße' => '00000000000000000000', // mit führenden Nullen 'Land' => '00000000000000000000', // mit führenden Nullen 'Postfach' => '00000000000000000000', // mit führenden Nullen 'PostfachPLZ' => '00000000000000000000', // mit führenden Nullen 'Titel' => '00000000000000000000', // mit führenden Nullen 'Telefon1' => '00000000000000000000', // mit führenden Nullen 'Telefon2' => '00000000000000000000', // mit führenden Nullen 'Telefax' => '00000000000000000000', // mit führenden Nullen 'Geburtsdatum' => '00000000', // YYYYMMDD 'Geschlecht' => '00000000000000000000', // s = sonstiges, m = männlich, w = weiblich 'Email' => '00000000000000000000', // mit führenden Nullen 'Rabatt' => '00000000000000000000', // mit führenden Nullen 'Limit' => '00000000000000000000', // mit führenden Nullen 'Sperr Kennzeichen' => '0', // 0 = nicht gesperrt, 1 = gesperrt 'Dubios Kennzeichen' => '0', // 0 = nicht dubios, 1 = dubios 'Bankeinzug' => '0', // 0 = kein Bankeinzug, 1 = Bankeinzug 'BankName1' => '00000000000000000000', // mit führenden Nullen 'Konto1' => '00000000000000000000', // mit führenden Nullen 'BLZ1' => '00000000000000000000', // mit führenden Nullen 'BankName2' => '00000000000000000000', // mit führenden Nullen 'Konto2' => '00000000000000000000', // mit führenden Nullen 'BLZ2' => '00000000000000000000', // mit führenden Nullen 'BankName3' => '00000000000000000000', // mit führenden Nullen 'Konto3' => '00000000000000000000', // mit führenden Nullen 'BLZ3' => '00000000000000000000', // mit führenden Nullen 'Kreditkartennummer Kreditkarte1' => '', // mit führenden Nullen 'Kreditkartennummer Kreditkarte2' => '', // mit führenden Nullen 'Kreditkartennummer Kreditkarte3' => '', // mit führenden Nullen 'Kreditkartennummer Kreditkarte4' => '', // mit führenden Nullen 'Änderungskennzeichen' => '0', // 0 = Kunde ist OK, 1 = Änderung 'Newsletter' => '0', // 0 = kein Newsletter, 1 = Newsletter 'Passwort' => '', // 'Werbesperre' => '0', // 0 = keine Werbung, 1 = Werbung ]; } }