Seite 1 von 1

eBay-API mit PHP -

Verfasst: 12. Jan 2019 20:27
von Maik_Koch
Ich versuche mich an einer eBay-API in PHP. Letztendlich soll das .php folgendes können:
1. Alle meine Artikel anzeigen, welche ich bei eBay gelistet habe.
2. Wie kann ich mir alle Artikel als csv downloaden? Die Datei soll mehr Infos zu den Artikeln enthalten als ein eBay-CSV Manager. (siehe Code Block 1)
3. Wie kann ich mit Hilfe der API die Versandkosten bei Artikeln mit Versandkosten i.H.v. 4,99 EUR auf 5,99 EUR erhöhen? (siehe Code Block 2)

FYI: Ich rufe die php-Datei nur über den Browser ohne eine SDK oder einer IDE ab.

Problem:
Die Ausgabe ist entweder ein weißer Bildschirm oder ein Syntaxfehler ( ' . $data['userToken'] . ' '220705951941' '; ** Ende des Tests **/ while ($main = mysqli_fetch_object($sql_main)) { $requestXmlBody_item = ' ' . $data['userToken'] . ' ' . $main->artikelNr . ' '; //build eBay headers using variables passed via constructor //initialise a CURL session $connection_item = curl_init(); curl_setopt($connection_item, CURLOPT_URL, ...)

Ich wäre für jede Hilfe sehr dankbar.

Folgend mein Code:

<?php
//***** Code-Block 1 *****
/*
List all my articles
*/
require_once('../../../func/central_test.php');
require_once('../../../db/intranet.php');
ini_set('max_execution_time', 9000);

$data_item['verb'] = "GetItemRequest";
$data['devID'] = "AAAA-AAAA-AAAA-AAAA";
$data['appID'] = "BBBB-BBBB-BBBB-BBBB";
$data['certID'] = "CCCC-CCCC-CCCC-CCCC";
$data['serverUrl'] = "https://api.ebay.com/ws/api.dll";
$data['userToken'] = "DDDD**DDDD**DDDD**DDDD";
$data['username'] = "EEE";
$data['siteID'] = 77;

$headers_item = array(
//Regulates versioning of the XML interface for the API
"X-EBAY-API-COMPATIBILITY-LEVEL: 967",
//set the keys
"X-EBAY-API-DEV-NAME: " . $data['devID'],
"X-EBAY-API-APP-NAME: " . $data['appID'],
"X-EBAY-API-CERT-NAME: " . $data['certID'],
"X-EBAY-API-CALL-NAME: " . $data_item['verb'],
"X-EBAY-API-SITEID: " . $data['siteID']
);


$sql_main = mysqli_query($connection, "SELECT Artikelnummer as artikelNr FROM nr_ebay_angebote WHERE up_kat = '1' AND disable = '0'");

/** Test mit einem Beispiel-Artikel **
$requestXmlBody_item = '<?xml version="1.0" encoding="utf-8"?>
<GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<RequesterCredentials>
<eBayAuthToken>' . $data['userToken'] . '</eBayAuthToken>
</RequesterCredentials>
<ItemID>'220705951941'</ItemID>
</GetItemRequest>';
** Ende des Tests **/

while ($main = mysqli_fetch_object($sql_main)) {
$requestXmlBody_item = '<?xml version="1.0" encoding="utf-8"?>
<GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<RequesterCredentials>
<eBayAuthToken>' . $data['userToken'] . '</eBayAuthToken>
</RequesterCredentials>
<ItemID>' . $main->artikelNr . '</ItemID>
</GetItemRequest>';


//build eBay headers using variables passed via constructor
//initialise a CURL session
$connection_item = curl_init();
curl_setopt($connection_item, CURLOPT_URL, $data['serverUrl']);

//stop CURL from verifying the peer"s certificate
curl_setopt($connection_item, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($connection_item, CURLOPT_SSL_VERIFYHOST, 0);

//set the headers using the array of headers
curl_setopt($connection_item, CURLOPT_HTTPHEADER, $headers_item);

//set method as POST
curl_setopt($connection_item, CURLOPT_POST, 1);

//set the XML body of the request
curl_setopt($connection_item, CURLOPT_POSTFIELDS, $requestXmlBody_item);

//set it to return the transfer as a string from curl_exec
curl_setopt($connection_item, CURLOPT_RETURNTRANSFER, 1);

//Send the Request
$response = curl_exec($connection_item);

//Send the Request
$response = curl_exec($connection);

$responseXml = $response;
echo $responseXml;

//close the connection
curl_close($connection_item);
}

echo "End of request."

?>



<?php
//***** Code-Block 2 *****
/*
change the shipping cost from 4.99 to 5.99 EUR
*/
require_once('../../../func/central_test.php');
require_once('../../../db/intranet.php');
ini_set('max_execution_time', 9000);

$data_item['verb'] = "ShippingCostSummary";
$data['devID'] = "AAAA-AAAA-AAAA-AAAA";
$data['appID'] = "BBBB-BBBB-BBBB-BBBB";
$data['certID'] = "CCCC-CCCC-CCCC-CCCC";
$data['serverUrl'] = "https://api.ebay.com/ws/api.dll";
$data['userToken'] = "DDDD**DDDD**DDDD**DDDD";
$data['username'] = "EEE";
$data['siteID'] = 77;

$headers_item = array(
//Regulates versioning of the XML interface for the API
"X-EBAY-API-COMPATIBILITY-LEVEL: 967",
//set the keys
"X-EBAY-API-DEV-NAME: " . $data['devID'],
"X-EBAY-API-APP-NAME: " . $data['appID'],
"X-EBAY-API-CERT-NAME: " . $data['certID'],
"X-EBAY-API-CALL-NAME: " . $data_item['verb'],
"X-EBAY-API-SITEID: " . $data['siteID']
);

$sql_main = mysqli_query($connection, "SELECT Artikelnummer as artNumb FROM nr_ebay_angebote WHERE up_kat = '1' AND disable = '0'");

while ($main = mysqli_fetch_object($sql_main)) {
$requestXmlBody_item = '<?xml version="1.0" encoding="utf-8"?>
<ShippingCostSummary>
<ListedShippingServiceCost currencyID="CurrencyCodeType"> currentCost </ListedShippingServiceCost>
<ShippingServiceCost currencyID="CurrencyCodeType"> newShippingCost </ShippingServiceCost>
</ShippingCostSummary>;


//build eBay headers using variables passed via constructor
//initialise a CURL session
$connection_item = curl_init();
curl_setopt($connection_item, CURLOPT_URL, $data['serverUrl']);

//stop CURL from verifying the peer"s certificate
curl_setopt($connection_item, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($connection_item, CURLOPT_SSL_VERIFYHOST, 0);

//set the headers using the array of headers
curl_setopt($connection_item, CURLOPT_HTTPHEADER, $headers_item);

//set method as POST
curl_setopt($connection_item, CURLOPT_POST, 1);

//set the XML body of the request
curl_setopt($connection_item, CURLOPT_POSTFIELDS, $requestXmlBody_item);

//set it to return the transfer as a string from curl_exec
curl_setopt($connection_item, CURLOPT_RETURNTRANSFER, 1);

//Send the Request
$response = curl_exec($connection);

$responseXml = $response;
echo $responseXml;

if ($response->currentCost == 4.99) {
newShippingCost == 5.99;
}
}

?>

Re: eBay-API mit PHP -

Verfasst: 13. Jan 2019 08:17
von mwp
Maik_Koch hat geschrieben: 12. Jan 2019 20:27 Problem:
Die Ausgabe ist entweder ein weißer Bildschirm oder ein Syntaxfehler ( ' . $data['userToken'] . ' '220705951941' '; ** Ende des Tests **/ while ($main = mysqli_fetch_object($sql_main)) { $requestXmlBody_item = ' ' . $data['userToken'] . ' ' . $main->artikelNr . ' '; //build eBay headers using variables passed via constructor //initialise a CURL session $connection_item = curl_init(); curl_setopt($connection_item, CURLOPT_URL, ...)
Der in Klammern erwähnte Syntaxfehler erscheint nur, wenn du mit dem "Beispiel-Artikel" testest, oder? Das liegt an der ItemID. Statt '220705951941' muss 220705951941 rein.

Im Code Block 2 ist der Syntaxfehler dieser

Code: Alles auswählen

</ShippingCostSummary>;
richtig:

Code: Alles auswählen

</ShippingCostSummary>';
Diese Fehler sollte dir eigentlich schon jede Entwicklungsumgebung vor der Ausführung anzeigen. Sogar bei einer Benutzung eines simplen php Editor mit Syntax-Highlighting fällt so etwas auf. Das du die "php-Datei nur über den Browser" abrufst, hindert dich doch nicht daran, beim Bearbeiten der php-Datei einen entsprechend passenden Editor zu verwenden.

Ein weiterer Fehler ist

Code: Alles auswählen

if ($response->currentCost == 4.99) {
newShippingCost == 5.99;
}
richtig:

Code: Alles auswählen

if ($response->currentCost == 4.99) {
newShippingCost = 5.99;
}
Grundsätzlich frage ich mich, warum du erst die Artikel aus deinem Shopsystem ausliest, statt dir direkt von eBay alle gelistete Artikel geben zu lassen. Vielleicht tust du dir leichter, wenn du ein SDK nutzt, z. B. davidtsadler/ebay-sdk-php. Dort gibt es entsprechende Funktionen wie z. B. getMyeBaySelling.

Re: eBay-API mit PHP -

Verfasst: 14. Jan 2019 15:31
von Maik_Koch
Vielen Dank für die Antwort und die Hinweise!
a) Bei dem Syntaxfehler habe ich die ' entfernt. Es kam immer noch die dieselbe Fehlermeldung: ' . $data['userToken'] . ' 220705951941 '; ** Ende des Tests **/ while ($main = mysqli_fetch_object($sql_main)) { $requestXmlBody_item = ' ' . $data['userToken'] . ' ' . $main->artikelNr . ' '; //build eBay headers using variables passed via constructor //initialise a CURL session $connection_item = curl_init(); curl_setopt($connection_item, CURLOPT_URL, $data['serverUrl']); //...

b) für die anderen Dinge habe ich mir Notepad++ installiert.

c) Der 1. Code-Block diente für mich nur zum Testen. Denn ich mir künftig alles im Intranet auslegen, ohne mich überall extra einzuloggen. Deshalb soll es wenn möglich ohne SDK oder IDE gehen. Doch leider klappen die einfachen Anfragen nicht und ich frage mich, wie eine simple Abfrage in php aussehen soll damit ich eine Auflistung meiner Artikel im Browser angezeigt bekomme?

Re: eBay-API mit PHP -

Verfasst: 14. Jan 2019 20:06
von mwp
zu a) Ich sehe keine Fehlermeldung. So wie ich das sehe, wird der Quellcode ausgegeben, sprich er parst den Teil nicht (mehr).

Mir kommt so ein Verdacht und es gibt ja keine dummen Frage: Welchen Webserver nutzt du zum Testen mit welcher php Version?

Re: eBay-API mit PHP -

Verfasst: 15. Jan 2019 09:04
von koshop
Windows Server IIS mit ASP und Access wegrenn

Re: eBay-API mit PHP -

Verfasst: 15. Jan 2019 09:39
von Maik_Koch
Apache mit PHP/5.6.14

Die Frage war super und hat mit geholfen, dass die Syntaxfehler weg sind (y).

Habt ihr auch eine Idee dazu, warum mir sonst nichts weiter angezeigt wird bzw. wie ich mir auch diesem die Daten anzeigen/verändern kann?

Re: eBay-API mit PHP -

Verfasst: 15. Jan 2019 12:32
von mwp
Maik_Koch hat geschrieben: 15. Jan 2019 09:39 Apache mit PHP/5.6.14

Die Frage war super und hat mit geholfen, dass die Syntaxfehler weg sind (y).
Als ich mir deine Posts mehrmals durchgelesen habe, dämmerte es mir langsam. Und wie geschrieben, es war kein Fehler, auch kein Syntaxfehler.

Maik_Koch hat geschrieben: 15. Jan 2019 09:39 Habt ihr auch eine Idee dazu, warum mir sonst nichts weiter angezeigt wird bzw. wie ich mir auch diesem die Daten anzeigen/verändern kann?
Mach mal ein paar Einsteiger Tutorials zu PHP durch, um die Begrifflichkeiten zu lernen und zu verstehen, wie das ganze funktioniert, wie man Fehlersuche angeht, etc. Dann wird es dir auch leichter Fallen, die ganz einfachen Fehler zu finden.

Re: eBay-API mit PHP -

Verfasst: 17. Jan 2019 08:51
von elevennerds.de

Code: Alles auswählen

$response->currentCost == 4.99
Wo auch immer Du das rauskopiert hast, das ist schlechtester Programmierstil. Man kann ein float nicht auf Gleichheit prüfen, nur auf kleiner als oder größer als.

Re: eBay-API mit PHP -

Verfasst: 17. Jan 2019 13:30
von Templer
Also ich nutze die Funktion http://developer.ebay.com/DevZone/XML/d ... lling.html zum Abruf unserer aktiven Angebote auf eBay. Da bekommt man ein XML zurück, aus welchem ich mir die von mir benötigten Felder in eine CSV-Datei schreibe.