app=$app; $this->devID=$devID; $this->appID=$appID; $this->certID=$certID; $this->siteID=$siteID; $this->userToken = $userToken; if($sandbox){ $this->baseUrl = $this->sandboxUrl; $this->bulkExchangeUrl = $this->sandboxBulkExchangeUrl; $this->fileTransferUrl = $this->sandboxFileTransferUrl; } } /** * @param $apicall * @param $requestbody * @param bool $giveerrormessage * * @return bool|SimpleXMLElement|string|null */ public function call($apicall, $requestbody, $giveerrormessage = false) { $this->eBayLog($apicall,print_r($requestbody,true)); $fehler = array(); $requestHeader = array('X-EBAY-API-COMPATIBILITY-LEVEL: '.self::APIVERSION, 'X-EBAY-API-DEV-NAME:' . $this->devID, 'X-EBAY-API-APP-NAME:' . $this->appID, 'X-EBAY-API-CERT-NAME:' . $this->certID, 'X-EBAY-API-CALL-NAME:' . $apicall, 'X-EBAY-API-SITEID:'. $this->siteID ); $requestbody = ''.$requestbody; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->baseUrl); // Verhindere dass curl die Zertifizierung der SSL Verbindung überprüft curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeader); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $requestbody); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_TIMEOUT, 6000); $versuche = 0; do { $error = false; $responseXml = curl_exec($ch); $this->lastResponse = $responseXml; if(!isset($this->countCalls[$apicall])) { $this->countCalls[$apicall] = 1; } else { $this->countCalls[$apicall]++; } if($responseXml === false){ $error = 'Keine Rueckmeldung der API.'; } else if((int)$this->protokoll === self::PROTOCOL_ACTIVATED_EXTENDED){ $this->eBayLog($apicall . ' Request Header', print_r($requestHeader, true)); $this->eBayLog($apicall . ' Request', $requestbody); $this->eBayLog($apicall . ' Response', $responseXml); } if(!($responseXml == null)){ try { $response = new SimpleXMLElement($responseXml); }catch(Exception $e) { $response = null; } if($response == null) { if(!empty($responseXml)) { $error = 'XML konnte nich geparst werden.'; }else{ $error = 'Antwort ist leer.'; } }elseif($apicall==='getOrders'){ //Wenn Aufträge abgeholt werden aber fehlerhafte vorhanden sind wird in ImportGetAuftrag weitergeschleift und aussortiert if((bool)$response->HasMoreOrders){ $error =''; $response->Ack = 'Success'; } }elseif($apicall==='GetUser'){ if((string)$response->User->UserID != ''){ $error = ''; $response->Ack = 'Success'; } }else{ foreach ($response->Errors as $key => $value) { if((string)$value->LongMessage != ''){ $error = (string)$value->LongMessage; }else{ $error = (string)$value->Error->ShortMessage; } } } if((string)$response->Ack !== 'Success' && (string)$response->Ack !== 'Warning') { if(empty($response)){ $error = 'Möglicherweise liegt das Problem bei eBay.'; }else{ $errorobjekt = $response->Errors; if(is_array($errorobjekt)){ $errorobjekt = $errorobjekt[0]; } $error = (string)$errorobjekt->LongMessage; switch ((int)$errorobjekt->ErrorCode){ case 0: $error = 'Ein unbekannter Fehler ist aufgetreten'; break; case 932; $error = (string)$errorobjekt->LongMessage; $this->app->erp->InternesEvent($this->app->User->GetID(),'Das Authentifizierungstoken des eBay Importers ist abgelaufen','warning',1); break; case 518: case 21919188: $versuche = 10; $this->eBayLog('Verkaufslimit erreicht', print_r($error,true)); $this->app->erp->InternesEvent($this->app->User->GetID(),'Das Verkaufslimit für den eBay Importer wurde erreicht','warning',1); break; default: $versuche = 10; $error = (string)$errorobjekt->LongMessage; break; } } }else{ if($giveerrormessage){ $response = 'success'; } break; } } $versuche ++; } while($versuche < 2 && $error); curl_close($ch); if(!empty($error)){ $this->eBayLog($apicall." failed (Versuche: $versuche)", print_r($requestHeader,true)); $this->eBayLog($apicall.' failed response', print_r($response,true)); $this->eBayLog($apicall.' failed request', print_r($requestbody,true)); if(isset($response->Errors) && $response->Errors){ foreach ($response->Errors as $key => $value) { if((string)$value->ErrorCode === '21919067'){ $this->fremdnummertmp = (string)$value->ErrorParameters[1]->Value; } } } if($giveerrormessage){ return $error; } if($apicall === 'GetItem') { return $response; } return false; } $this->eBayLog($apicall." success (Versuche: $versuche)", print_r($response,true)); return $response; } /** * @return mixed */ public function getLastResponse() { return $this->lastResponse; } /** * @return array */ public function getCountCalls(): array { return $this->countCalls; } public function resetCountCalls(): void { $this->countCalls = []; } /** * @param $apicall * @param $requestbody * * @return array */ public function propperCall($apicall, $requestbody) { $response = [ 'success' => false, 'data' => '', 'message' => 'no Message' ]; $this->eBayLog($apicall,print_r($requestbody,true)); $requestHeader = array('X-EBAY-API-COMPATIBILITY-LEVEL: '.self::APIVERSION, 'X-EBAY-API-DEV-NAME:' . $this->devID, 'X-EBAY-API-APP-NAME:' . $this->appID, 'X-EBAY-API-CERT-NAME:' . $this->certID, 'X-EBAY-API-CALL-NAME:' . $apicall, 'X-EBAY-API-SITEID:'. $this->siteID ); $requestbody = ''.$requestbody; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->baseUrl); // Verhindere dass curl die Zertifizierung der SSL Verbindung überprüft curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeader); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $requestbody); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_TIMEOUT, 6000); $versuche = 0; do { $response['data'] = ''; $ebayResponse = curl_exec($ch); $this->lastResponse = $ebayResponse; if(!isset($this->countCalls[$apicall])) { $this->countCalls[$apicall] = 1; } else { $this->countCalls[$apicall]++; } if(!empty($ebayResponse)){ $xml = null; try { $xml = new SimpleXMLElement($ebayResponse); $response['data'] = $xml; }catch(Exception $e) { $response['message'] = 'Response could not be parsed.'; } if($apicall==='getOrders'){ //Wenn Aufträge abgeholt werden aber fehlerhafte vorhanden sind wird in ImportGetAuftrag weitergeschleift und aussortiert if((bool)$xml->HasMoreOrders){ $response['success'] = true; $xml->Ack = 'Success'; } }elseif($apicall==='GetUser'){ if((string)$xml->User->UserID != ''){ $xml->Ack = 'Success'; $response['success'] = true; } }elseif((string)$xml->Ack !== 'Failure'){ $error = false; foreach ($xml->Errors as $key => $value) { if($value->SeverityCode === 'Error'){ $error = true; if((string)$value->LongMessage != ''){ $response['message'] = (string)$value->LongMessage; }else{ $response['message'] = (string)$value->Error->ShortMessage; } } } if(!$error){ $response['success'] = true; } } if((string)$xml->Ack !== 'Success' && (string)$xml->Ack !== 'Warning') { foreach ($xml->Errors as $errorobjekt){ if((string)$errorobjekt->SeverityCode === 'Error'){ $response['message'] = (string)$errorobjekt->LongMessage; switch ((int)$errorobjekt->ErrorCode){ case 0: $response['message'] = 'Ein unbekannter Fehler ist aufgetreten.'; break; case 932; $response['message'] = 'Das Authentifizierungstoken des eBay Importers ist abgelaufen.'; $this->app->erp->InternesEvent($this->app->User->GetID(),'Das Authentifizierungstoken des eBay Importers ist abgelaufen','warning',1); break; case 518: case 21919144: $versuche = 10; $this->eBayLog('Call Limit wurde erreicht', print_r($error,true)); $this->app->erp->InternesEvent($this->app->User->GetID(),'Das Call Limit für Ihren eBay Account wurde erreicht','warning',1); break; case 21919188: $versuche = 10; $response['message'] = 'Das Verkaufslimit für Ihren eBay Account wurde erreicht.'; $this->eBayLog('Verkaufslimit erreicht', print_r($error,true)); $this->app->erp->InternesEvent($this->app->User->GetID(),'Das Verkaufslimit für Ihren eBay Account wurde erreicht','warning',1); break; } break; } } }else{ break; } }else{ $response['message'] = 'Keine Rueckmeldung der API.'; } $versuche ++; } while($versuche < 2 && $error); curl_close($ch); if(!$response['success']){ $this->eBayLog($apicall." failed (Versuche: $versuche)", print_r($requestHeader,true)); $this->eBayLog($apicall.' failed response', print_r($response['data'],true)); $this->eBayLog($apicall.' failed request', print_r($requestbody,true)); $this->eBayLog($apicall." success (Versuche: $versuche)", print_r($xml,true)); } return $response; } /** * @param $nachricht * @param string $dump */ protected function eBayLog($nachricht, $dump = ''){ if($this->protokoll !== self::PROTOCOL_DISABLED){ $this->app->erp->LogFile($nachricht, $this->app->DB->real_escape_string($dump)); } } /** * @param $protokoll */ public function setProtokoll($protokoll){ $this->protokoll = (int)$protokoll; } /** * @return string */ public function getBulkExchangeApiUrl(){ return $this->bulkExchangeUrl; } /** * @return string */ public function getFileTransferApiUrl(){ return $this->fileTransferUrl; } }