Subversion Repositories munaweb

Rev

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.";
    }
}
?>