I am new to the eBay API and currently developing in PHP, I have managed to use GetItem to import details of an order based on the Item ID to my website's database. But What I want to do now is to link a users account to my website and import their listings to my database. I have put the code I used for GetItem (below) but now I am stuck and I don't know what to use, GetAccount, GetUser or GetSellerList to:
First: have my user redirected from my website to eBay to authorize my application to access his/her listings.
Second: Import that listing (an echo would be enough for now) to my website.
This is my code for GetItem:
require_once('keys.php');
require_once('eBaySession.php');
if(isset($_POST['Id']))
{
//Get the ItemID inputted
$id = $_POST['Id'];
//SiteID must also be set in the Request's XML
//SiteID = 0 (US) - UK = 3, Canada = 2, Australia = 15, ....
//SiteID Indicates the eBay site to associate the call with
$siteID = 101;
//the call being made:
$verb = 'GetItem';
///Build the request Xml string
$requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
$requestXmlBody .= '<GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
$requestXmlBody .= "<RequesterCredentials><eBayAuthToken>$userToken</eBayAuthToken></RequesterCredentials>";;
$requestXmlBody .= "<ItemID>$id</ItemID>";
$requestXmlBody .= '</GetItemRequest>';
//Create a new eBay session with all details pulled in from included keys.php
$session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);
//send the request and get response
$responseXml = $session->sendHttpRequest($requestXmlBody);
if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
die('<P>Error sending request');
//Xml string is parsed and creates a DOM Document object
$responseDoc = new DomDocument();
$responseDoc->loadXML($responseXml);
//get any error nodes
$errors = $responseDoc->getElementsByTagName('Errors');
//if there are error nodes
if($errors->length > 0)
{
echo '<P><B>eBay returned the following error(s):</B>';
//display each error
//Get error code, ShortMesaage and LongMessage
$code = $errors->item(0)->getElementsByTagName('ErrorCode');
$shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
$longMsg = $errors->item(0)->getElementsByTagName('LongMessage');
//Display code and shortmessage
echo '<P>', $code->item(0)->nodeValue, ' : ', str_replace(">", ">", str_replace("<", "<", $shortMsg->item(0)->nodeValue));
//if there is a long message (ie ErrorLevel=1), display it
if(count($longMsg) > 0)
echo '<BR>', str_replace(">", ">", str_replace("<", "<", $longMsg->item(0)->nodeValue));
}
else //no errors
{
//get the nodes needed
$titleNode = $responseDoc->getElementsByTagName('Title');
$primaryCategoryNode = $responseDoc->getElementsByTagName('PrimaryCategory');
$categoryNode = $primaryCategoryNode->item(0)->getElementsByTagName('CategoryName');
$listingDetailsNode = $responseDoc->getElementsByTagName('ListingDetails');
$startedNode = $listingDetailsNode->item(0)->getElementsByTagName('StartTime');
$endsNode = $listingDetailsNode->item(0)->getElementsByTagName('EndTime');
$ShippingPackageDetailsNode = $responseDoc->getElementsByTagName('ShippingPackageDetails');
if ($ShippingPackageDetailsNode->length > 0) {
$packageDepthNode = $ShippingPackageDetailsNode->item(0)->getElementsByTagName('PackageDepth');
$DepthUnit = $packageDepthNode->item(0)->getAttribute('unit');
$packageLengthNode = $ShippingPackageDetailsNode->item(0)->getElementsByTagName('PackageLength');
$LengthUnit = $packageLengthNode->item(0)->getAttribute('unit');
$packageWidthNode = $ShippingPackageDetailsNode->item(0)->getElementsByTagName('PackageWidth');
$WidthUnit = $packageWidthNode->item(0)->getAttribute('unit');
}
$sellingStatusNode = $responseDoc->getElementsByTagName('SellingStatus');
$currentPriceNode = $sellingStatusNode->item(0)->getElementsByTagName('CurrentPrice');
$currency = $currentPriceNode->item(0)->getAttribute('currencyID');
$startPriceNode = $responseDoc->getElementsByTagName('StartPrice');
$buyItNowPriceNode = $responseDoc->getElementsByTagName('BuyItNowPrice');
$bidCountNode = $sellingStatusNode->item(0)->getElementsByTagName('BidCount');
$sellerNode = $responseDoc->getElementsByTagName('Seller');
//Display the details
echo '<P><B>', $titleNode->item(0)->nodeValue, " ($id)</B>";
echo '<BR>Category: ', $categoryNode->item(0)->nodeValue;
echo '<BR>Started: ', $startedNode->item(0)->nodeValue;
echo '<BR>Ends: ', $endsNode->item(0)->nodeValue;
if ($ShippingPackageDetailsNode->length > 0) {
echo "<BR>Package Length: ", $packageLengthNode->item(0)->nodeValue, ' '.$LengthUnit.'';
echo "<BR>Package Width: ", $packageWidthNode->item(0)->nodeValue, ' '.$WidthUnit.'';
echo "<BR>Package Depth: ", $packageDepthNode->item(0)->nodeValue, ' '.$DepthUnit.'';
}
echo "<P>Current Price: ", $currentPriceNode->item(0)->nodeValue, $currency;
echo "<BR>Start Price: ", $startPriceNode->item(0)->nodeValue, $currency;
echo "<BR>BuyItNow Price: ", $buyItNowPriceNode->item(0)->nodeValue, $currency;
echo "<BR>Bid Count: ", $bidCountNode->item(0)->nodeValue;
//Display seller detail if present
if($sellerNode->length > 0)
{
echo '<P><B>Seller</B>';
$userIDNode = $sellerNode->item(0)->getElementsByTagName('UserID');
$scoreNode = $sellerNode->item(0)->getElementsByTagName('FeedbackScore');
$regDateNode = $sellerNode->item(0)->getElementsByTagName('RegistrationDate');
echo '<BR>UserID: ', $userIDNode->item(0)->nodeValue;
echo '<BR>Feedback Score: ', $scoreNode->item(0)->nodeValue;
echo '<BR>Registration Date: ', $regDateNode->item(0)->nodeValue;
}
}
}
After reading a lot of poor documentation on eBay about it's API and getting crazy! I took matters in to my own hands and made a step by step guide about the API and figured out a way to do this. Which I will try to explain as simple as possible. (Using PHP)
What we will do:
First You would need two PHP files called: keys.php and eBaySession.php which are found in eBay's PHP SDK which is located in eBay's Developers website Documentations. (https://www.x.com/developers/ebay/documentation-tools/sdks)
Second You will include these two files in a new PHP file which will also hold the user interface.
Third You will create an account on eBay's Developers website and create a new application.
Fourth You will obtain sandbox and production keys for your application using your developers account. Then you will generate a sandbox user and obtain a user token. (via My Account Page)
It could be a bit hard to find yourself around on eBay's Developers website but you will find the hang of it eventually.
Fifth You will insert the DEV, APP, CERT and UserToken of your application in the keys.php file (both for production and sand-box modes)
Sixth You would require a RuName, which is also located in the My Account Page (Manage Your RuNames).
Seventh You will now insert the RuName in your keys.php file as a new parameter:
$RuName = 'your RuName key';
So our keys.php will look like this:
<?php
//show all errors - useful whilst developing
error_reporting(E_ALL);
// these keys can be obtained by registering at http://developer.ebay.com
$production = true; // toggle to true if going against production
$compatabilityLevel = 551; // eBay API version
if ($production) {
$devID = 'production dev id'; // these prod keys are different from sandbox keys
$appID = 'production app id';
$certID = 'production cert id';
$RuName = 'production RuName';
//set the Server to use (Sandbox or Production)
$serverUrl = 'https://api.ebay.com/ws/api.dll'; // server URL different for prod and sandbox
//the token representing the eBay user to assign the call with
$userToken = 'production user token';
} else {
// sandbox (test) environment
$devID = 'sandbox dev id'; // these prod keys are different from sandbox keys
$appID = 'sandbox app id';
$certID = 'sandbox cert id';
//set the Server to use (Sandbox or Production)
$serverUrl = 'https://api.sandbox.ebay.com/ws/api.dll';
// the token representing the eBay user to assign the call with
// this token is a long string - don't insert new lines - different from prod token
$userToken = 'sandbox user token';
}
?>
Eight Now we will build our first page that has some output for the user as below:
<?php require_once('keys.php') ?>
<?php require_once('eBaySession.php') ?>
<?php
session_start();
//SiteID must also be set in the Request's XML
//SiteID = 0 (US) - UK = 3, Canada = 2, Australia = 15, ....
//SiteID Indicates the eBay site to associate the call with
$siteID = 0;
//the call being made:
$verb = 'GetSessionID';
///Build the request Xml string
$requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
$requestXmlBody .= '<GetSessionIDRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
$requestXmlBody .= '<RuName>'.$RuName.'</RuName>';
$requestXmlBody .= '</GetSessionIDRequest>';
//Create a new eBay session with all details pulled in from included keys.php
$session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);
//send the request and get response
$responseXml = $session->sendHttpRequest($requestXmlBody);
if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
die('<P>Error sending request');
//Xml string is parsed and creates a DOM Document object
$responseDoc = new DomDocument();
$responseDoc->loadXML($responseXml);
//get any error nodes
$errors = $responseDoc->getElementsByTagName('Errors');
//if there are error nodes
if($errors->length > 0)
{
echo '<P><B>eBay returned the following error(s):</B>';
//display each error
//Get error code, ShortMesaage and LongMessage
$code = $errors->item(0)->getElementsByTagName('ErrorCode');
$shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
$longMsg = $errors->item(0)->getElementsByTagName('LongMessage');
//Display code and shortmessage
echo '<P>', $code->item(0)->nodeValue, ' : ', str_replace(">", ">", str_replace("<", "<", $shortMsg->item(0)->nodeValue));
//if there is a long message (ie ErrorLevel=1), display it
if(count($longMsg) > 0)
echo '<BR>', str_replace(">", ">", str_replace("<", "<", $longMsg->item(0)->nodeValue));
}
else //no errors
{
//get the nodes needed
$sessionIDNode = $responseDoc->getElementsByTagName('SessionID');
//Display the details
$sessionID = $sessionIDNode->item(0)->nodeValue;
$_SESSION['eBaySession'] = $sessionID;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Get eBay User Items</TITLE>
</HEAD>
<BODY>
<FORM action="GetItem.php" method="post">
<h2>Testing eBay Connection Plugin</h2>
<h3>Linking User Account to our website</h3>
<p>Session ID: <?php echo $_SESSION['eBaySession']; ?></p>
<BR><a href="https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&RuName=<?php echo $RuName; ?>&SessID=<?php echo $sessionID; ?>">Click Here To Link Your Ebay Account To Our Website</a>
</FORM>
</BODY>
</HTML>
This new PHP page will receive a Session ID from eBay using $verb = 'GetSessionID';
so when we click the "Link Your Ebay Account" button the user is sent to this URL:
https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&RuName=<?php echo $RuName; ?>&SessID=<?php echo $sessionID; ?>
Which contains your RuName and Session ID.
Ninth
User will login to eBay, grant access to your application and sent back to your website. Now we will use the same Session ID in the previous part to receive the User Token (since we have access to the user's account now) using $verb = 'FetchToken';
.
<?php require_once('keys.php') ?>
<?php require_once('eBaySession.php') ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<TITLE>Get eBay User Items (Result)</TITLE>
</HEAD>
<BODY>
<h2>Testing eBay Connection Plugin</h2>
<h3>Receiving User Tocken</h3>
<h4>With a User Tocken ID we can import user data to our website.</h4>
<?php
session_start();
//SiteID must also be set in the Request's XML
//SiteID = 0 (US) - UK = 3, Canada = 2, Australia = 15, ....
//SiteID Indicates the eBay site to associate the call with
$siteID = 0;
//the call being made:
$verb = 'FetchToken';
///Build the request Xml string
$requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
$requestXmlBody .= '<FetchTokenRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
$requestXmlBody .= '<SessionID>'.$_SESSION["eBaySession"].'</SessionID>';
$requestXmlBody .= '</FetchTokenRequest>';
//Create a new eBay session with all details pulled in from included keys.php
$session = new eBaySession($userToken, $devID, $appID, $certID, $serverUrl, $compatabilityLevel, $siteID, $verb);
//send the request and get response
$responseXml = $session->sendHttpRequest($requestXmlBody);
if(stristr($responseXml, 'HTTP 404') || $responseXml == '')
die('<P>Error sending request');
//Xml string is parsed and creates a DOM Document object
$responseDoc = new DomDocument();
$responseDoc->loadXML($responseXml);
//get any error nodes
$errors = $responseDoc->getElementsByTagName('Errors');
//if there are error nodes
if($errors->length > 0)
{
echo '<P><B>eBay returned the following error(s):</B>';
//display each error
//Get error code, ShortMesaage and LongMessage
$code = $errors->item(0)->getElementsByTagName('ErrorCode');
$shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
$longMsg = $errors->item(0)->getElementsByTagName('LongMessage');
//Display code and shortmessage
echo '<P>', $code->item(0)->nodeValue, ' : ', str_replace(">", ">", str_replace("<", "<", $shortMsg->item(0)->nodeValue));
//if there is a long message (ie ErrorLevel=1), display it
echo '<BR/>User Session ID: '.$_COOKIE["eBaySession"].'';
if(count($longMsg) > 0)
echo '<BR>', str_replace(">", ">", str_replace("<", "<", $longMsg->item(0)->nodeValue));
}
else //no errors
{
//get the nodes needed
$eBayAuthTokenNode = $responseDoc->getElementsByTagName('eBayAuthToken');
//Display the details
echo '<BR/>User Session ID: '.$_SESSION["eBaySession"].'';
echo '<BR/><BR/>User Token: '.$eBayAuthTokenNode->item(0)->nodeValue.'';
}
?>
</BODY>
</HTML>
And there you go you have access and a token. But make sure you host this on a HTTPS URL since eBay only accepts these function through a secure connection (SSL). Otherwise you will have difficulty running this code.
I will improve this answer eventually by receiving feedback. I know it may confuse you a bit but I hope I could make it a better answer by time. I have also covered the GetItem function for eBay API in the question if you would need it.
Edit: Of course you can integrate cUrl and XML requests.