Blame | Last modification | View Log | RSS feed
<?php
ini_set('include_path', ini_get('include_path') . ':.:../ebay/php');
require_once ('keys.php');
require_once ('eBaySession.php');
// Generates an indexed URL snippet from the array of item filters
function buildURLArray($filterarray)
{
$urlfilter = '';
$i = '0';
// Iterate through each filter in the array
foreach($filterarray as $itemfilter) {
// Iterate through each key in the filter
foreach($itemfilter as $key => $value) {
if (is_array($value)) {
foreach($value as $j => $content) { // Index the key for each value
$urlfilter.= "&itemFilter($i).$key($j)=$content";
}
}
else {
if ($value != "") {
$urlfilter.= "&itemFilter($i).$key=$value";
}
}
}
$i++;
}
return "$urlfilter";
} // End of buildURLArray function
function eBayProductAdjust($query, $quantitySold)
{
global $seller;
global $findUrl;
global $findVersion;
global $app;
$result = '';
$resultFlag = true;
// API request variables
$safequery = urlencode($query); // Make the query URL-friendly
// Create a PHP array of the item filters you want to use in your request
$filterarray = array(
array(
'name' => 'Seller',
'value' => $seller
) ,
);
// Build the indexed item filter URL snippet
$urlfilter = buildURLArray($filterarray);
// Construct the findItemsByKeywords HTTP GET call
$apicall = "$findUrl";
$apicall.= "?OPERATION-NAME=findItemsByKeywords";
$apicall.= "&SERVICE-VERSION=$findVersion";
$apicall.= "&SECURITY-APPNAME=$app";
$apicall.= "&GLOBAL-ID=EBAY-US";
$apicall.= "&keywords=$safequery";
$apicall.= "&paginationInput.entriesPerPage=1";
$apicall.= "$urlfilter";
// Load the call and capture the document returned by eBay API
$resp = simplexml_load_file($apicall);
// Check to see if the request was successful, else print an error
if ($resp->ack == "Success") {
$results = '';
if ($resp->paginationOutput->totalEntries == 1) {
$quantityAvailable = intval(getSingleItemResults($resp->searchResult->item->itemId));
$quantityRemaining = $quantityAvailable - $quantitySold;
if ($quantityRemaining > 0) {
$result = reviseItem($resp->searchResult->item->itemId, $quantityRemaining);
}
else {
$result = endItem($resp->searchResult->item->itemId);
}
}
else {
$result = "Couldn't adjust, found " . $resp->paginationOutput->totalEntries . " results.";
}
}
else {
$result = "Couldn't adjust, findItemsByKeywords call failed.";
}
$resultFlag = !strpos($result, 'Couldn\'t');
return array($resultFlag, $result);
}
// GetSingleItem call to determine available quantity
function getSingleItemResults($selectedItemID)
{
global $shopUrl;
global $shopVersion;
global $app;
global $compatibilityLevel;
// Construct the GetSingleItem call
$apicallb = "$shopUrl";
$apicallb.= "?callname=GetSingleItem";
$apicallb.= "&version=$shopVersion";
$apicallb.= "&appid=$app";
$apicallb.= "&itemid=$selectedItemID";
$apicallb.= "&responseencoding=XML";
$apicallb.= "&includeselector=Details";
// Load the call and capture the document returned by eBay API
$resp = simplexml_load_file($apicallb);
// Check to see if the response was loaded
if ($resp) {
return ($resp->Item->Quantity - $resp->Item->QuantitySold);
}
return "0";
} // End of getSingleItemResults function
function reviseItem($id, $newQuantity)
{
global $token;
global $dev;
global $app;
global $cert;
global $gatewayUrl;
global $compatabilityLevel;
// Build the request Xml string
$requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
$requestXmlBody.= '<ReviseItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
$requestXmlBody.= "<RequesterCredentials><eBayAuthToken>$token</eBayAuthToken></RequesterCredentials>";
$requestXmlBody.= "<Item>";
$requestXmlBody.= "<ItemID>$id</ItemID>";
$requestXmlBody.= "<Quantity>$newQuantity</Quantity>";
$requestXmlBody.= "</Item>";
$requestXmlBody.= '</ReviseItemRequest>';
// Create a new eBay session with all details pulled in from included keys.php
$session = new eBaySession($token, $dev, $app, $cert, $gatewayUrl, $compatabilityLevel, 0, 'ReviseItem');
// send the request and get response
$responseXml = $session->sendHttpRequest($requestXmlBody);
if (stristr($responseXml, 'HTTP 404') || $responseXml == '') return "Couldn't adjust quantity for Id $id, reviseItem call failed.";
// 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)
{
$code = $errors->item(0)->getElementsByTagName('ErrorCode');
$shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
error_log("reviseItem: " . $code->item(0)->nodeValue . " - " . $shortMsg->item(0)->nodeValue);
return "Couldn't adjust quantity for Id $id, reviseItem call failed.";
}
else {
return "Quantity for Id $id is now $newQuantity.";
}
}
function endItem($id)
{
global $token;
global $dev;
global $app;
global $cert;
global $gatewayUrl;
global $compatabilityLevel;
// Build the request Xml string
$requestXmlBody = '<?xml version="1.0" encoding="utf-8" ?>';
$requestXmlBody.= '<EndItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
$requestXmlBody.= "<RequesterCredentials><eBayAuthToken>$token</eBayAuthToken></RequesterCredentials>";
$requestXmlBody.= "<EndingReason>NotAvailable</EndingReason>";
$requestXmlBody.= "<ItemID>$id</ItemID>";
$requestXmlBody.= '</EndItemRequest>';
// Create a new eBay session with all details pulled in from included keys.php
$session = new eBaySession($token, $dev, $app, $cert, $gatewayUrl, $compatabilityLevel, 0, 'EndItem');
// send the request and get response
$responseXml = $session->sendHttpRequest($requestXmlBody);
if (stristr($responseXml, 'HTTP 404') || $responseXml == '') return "Couldn't end Id $id, endItem call failed.";
// 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)
{
$code = $errors->item(0)->getElementsByTagName('ErrorCode');
if ($code == "1047") { // auction already closed
$response2 = addNote($id);
return "Id $id already ended. $response2";
} else {
$shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
error_log("endItem: " . $code->item(0)->nodeValue . " - " . $shortMsg->item(0)->nodeValue);
return "Couldn't end Id $id, endItem call failed.";
}
}
else { //no errors
$response2 = addNote($id);
return "Id $id ended. $response2";
}
}
function addNote($id)
{
global $token;
global $dev;
global $app;
global $cert;
global $gatewayUrl;
global $compatabilityLevel;
// Build the request Xml string
$requestXmlBody = '<?xml version="1.0" encoding="utf-8"?>';
$requestXmlBody .= '<SetUserNotesRequest xmlns="urn:ebay:apis:eBLBaseComponents">';
$requestXmlBody .= "<RequesterCredentials><eBayAuthToken>$token</eBayAuthToken></RequesterCredentials>";
$requestXmlBody .= "<ItemID>$id</ItemID>";
$requestXmlBody .= "<Action>AddOrUpdate</Action>";
$requestXmlBody .= "<NoteText>Sold via Shopify on " . date('Y-m-d') . ".</NoteText>";
$requestXmlBody .= "</SetUserNotesRequest>";
// Create a new eBay session with all details pulled in from included keys.php
$session = new eBaySession($token, $dev, $app, $cert, $gatewayUrl, $compatabilityLevel, 0, 'SetUserNotes');
// send the request and get response
$responseXml = $session->sendHttpRequest($requestXmlBody);
if (stristr($responseXml, 'HTTP 404') || $responseXml == '') return "Couldn't add note for Id $id, setUserNotes call failed.";
// 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)
{
$code = $errors->item(0)->getElementsByTagName('ErrorCode');
$shortMsg = $errors->item(0)->getElementsByTagName('ShortMessage');
error_log("setUserNotes: " . $code->item(0)->nodeValue . " - " . $shortMsg->item(0)->nodeValue);
return "Couldn't add note for Id $id, setUserNotes call failed.";
}
else { //no errors
return "Note added for Id $id.";
}
}
?>