Rev 19 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<!DOCTYPE html>
<html lang="en">
<head>
<title>eBay Listing Upload</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<script src="js/XMLWriter.js"></script>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>
<link rel="stylesheet" href="css/style.css">
<script src="js/muna-tools.js"></script>
</head>
<body onload="return initConfig();">
<div">
<div>
<div class="container-fluid bg-secondary">
<div class="clearfix">
<img class="img-fluid float-right" src="images/MUNA%20-%20Logo%20100x100.png" alt="MUNA Trading Logo" />
<h1 id="connected">eBay Listing Upload
<input id="login" type="button" class="btn bg-success mb-2 w3-hide" onclick="eBayLogin();" value="Login" /></h1>
</div>
</div>
<div class="border col">
<div>
<form id="searchForm" class="container-fluid bg-light">
<div class="clearfix">
<input id="startButton" type="button" class="btn btn-danger float-left" onclick="uploadListings();" value="Start" />
<p id="numberOfListings" class="float-right"></p>
</div>
</form>
</div>
<div class="modal" id="progressBarDiv">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 id="progressBarHeader"></h4>
</div>
<div class="modal-body">
<div class="progress">
<div id="progressBar" class="progress-bar" style="width:0%">0%</div>
</div>
</div>
</div>
</div>
</div>
<div id="results" class="border bg-info w3-hide"></div>
<div id="logging"></div>
</div>
</div>
<footer class="container-fluid text-center border border-bottom-0 border-left-0 border-right-0">
<div w3-include-html="php/footer.php"></div>
</footer>
</div>
<script>
// Globals
var configGetRecommendations = true;
var xml = '';
var listItems = [];
// Initialize Configuration Variables
function initConfig() {
var i;
var j;
eBayAuthToken = readCookie();
if (eBayAuthToken.length > 0) {
connected();
}
if (eBayAuthTokenFlag === false) {
var x = document.getElementById("login");
if (x.className.indexOf("w3-show") == -1) {
x.className += " w3-show";
}
}
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
//window.alert(this.responseText);
var parser = new DOMParser();
var htmlDoc = parser.parseFromString(this.responseText, "text/html");
var x = htmlDoc.getElementsByTagName("a");
listItems = [];
for (i = 0, j = 0; i < x.length; i++) {
if (htmlDoc.getElementsByTagName("a")[i].innerHTML.endsWith(".xml")) {
var n = htmlDoc.getElementsByTagName("a")[i].innerHTML.lastIndexOf(".xml");
listItems[j] = htmlDoc.getElementsByTagName("a")[i].innerHTML.substr(0, n);
j++;
}
}
document.getElementById('numberOfListings').innerHTML = j + ' Listing(s) Ready for eBay Upload';
}
};
xhttp.open("GET", configListingUrl + '?t=' + Math.random(), true);
xhttp.send();
}
function requireNewLogin() {
// dummy
}
function uploadListings() {
var i = 0;
document.getElementById("logging").innerHTML = '';
document.getElementById("results").innerHTML = '';
initProgressBar('Uploading Listings');
function for1() {
updateProgressBar(listItems.length, i);
uploadListing(listItems[i]);
for2();
}
function for2() {
if (i == listItems.length) {
endProgressBar();
return false;
}
setTimeout(function() {
i++;
document.getElementById("logging").innerHTML = 'Uploading No. ' + i + '/' + listItems.length;
for1();
}, 500);
}
for1();
}
function uploadListing(name) {
var xhttp;
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// verifyListing(name, xhttp.responseText);
submitListing(name, xhttp.responseText);
}
};
xhttp.open("GET", configListingUrl + name + '.xml', true);
xhttp.send();
}
function verifyListing(name, itemXML) {
var i;
var authErrorFlag = false;
if (eBayAuthTokenFlag === false) {
return;
}
var xw = new XMLWriter('UTF-8', '1.0');
var xhr = new XMLHttpRequest();
createAddXML(xw, xhr, 'VerifyAddItemRequest', 'VerifyAddItem', itemXML);
xml = xw.flush();
xw.close();
xhr.onload = function() {
var jsonObj = XMLparse(xhr.responseXML, false);
var obj = jsonObj.VerifyAddItemResponse;
var returnCode = obj.Ack;
var str;
var x = document.getElementById("results");
if (x.className.indexOf("w3-show") == -1) {
x.className += " w3-show";
}
if (returnCode == 'Success' || (returnCode == 'Warning' && obj.Errors.ErrorCode == '21917108')) {
str = '<p><strong>' + returnCode + ' (' + name + ')</strong></p>';
if (returnCode == 'Warning') {
str += "<p>" + obj.Errors.SeverityCode + " (" + obj.Errors.ErrorCode + "): " + escapeHtml(obj.Errors.LongMessage) + "</p>";
}
var fees = getJsonArray(obj.Fees.Fee);
str += "<p>";
for (i = 0; i < fees.length; i++) {
if (fees[i].Fee.text !== "0.0") {
str += fees[i].Name + ": $" + Number(fees[i].Fee.text).toFixed(2) + "<br/>";
}
}
str += "</p>";
if (obj.DiscountReason) {
str += "<p>Discount Reason: " + obj.DiscountReason + "</p>";
}
var recommendations = getJsonArray(obj.ListingRecommendations);
for (i = 0; i < recommendations.length; i++) {
str += decode(recommendations[i]);
}
x.innerHTML += str;
} else {
str = '<p class="text-danger"><strong>' + returnCode + ' (' + name + ')</strong></p>';
var errors = getJsonArray(obj.Errors);
str += "<p>";
for (i = 0; i < errors.length; i++) {
str += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
if (errors[i].LongMessage.includes('Auth')) {
authErrorFlag = true;
}
}
str += "</p>";
if (obj.DuplicateInvocationDetails) {
str += '<p>Duplicate Invocation Id ' + obj.DuplicateInvocationDetails.DuplicateInvocationID + ' Tracking Id' + obj.DuplicateInvocationDetails.InvocationTrackingID + ' Status ' + obj.DuplicateInvocationDetails.Status + '</p>';
}
x.innerHTML += str;
if (authErrorFlag === true) {
eBayAuthTokenFlag = false;
x = document.getElementById("login");
if (x.className.indexOf("w3-show") == -1) {
x.className += " w3-show";
}
}
}
if (obj.Message) {
x.innerHTML += obj.Message;
}
};
xhr.send(xml);
}
function decode(recommendation) {
var str = "<p>";
var i;
str += recommendation.Code + " (" + recommendation.Type + "/" + recommendation.Group + ") for '" + recommendation.FieldName;
if (recommendation.Value) {
str += "': " + recommendation.Value;
}
if (recommendation.Message) {
str += "<br/>" + recommendation.Message;
}
var metadata = recommendation.Metadata;
if (metadata) {
if (metadata.length > 0) {
for (i = 0; i < metadata.length; i++) {
if (metadata[i].Name != "correlationId" &&
metadata[i].Name != "currency" &&
metadata[i].Name != "similarItems") {
str += "<br/>" + metadata[i].Name + " = " + metadata[i].Value;
}
}
} else {
if (metadata.Name != "correlationId" &&
metadata.Name != "currency" &&
metadata.Name != "similarItems") {
str += "<br/>" + metadata.Name + " = " + metadata.Value;
}
}
}
str += "</p>";
return str;
}
function submitListing(name, itemXML) {
var i;
var authErrorFlag = false;
if (document.getElementById("startButton").className.indexOf("btn-dark") == -1) {
return;
}
var xw = new XMLWriter('UTF-8', '1.0');
var xhr = new XMLHttpRequest();
createAddXML(xw, xhr, 'AddItemRequest', 'AddItem', itemXML);
xml = xw.flush();
xw.close();
xhr.onload = function() {
var jsonObj = XMLparse(xhr.responseXML, false);
var obj = jsonObj.AddItemResponse;
var returnCode = obj.Ack;
var str;
var x = document.getElementById("results");
if (x.className.indexOf("w3-show") == -1) {
x.className += " w3-show";
}
if (returnCode == 'Success' || (returnCode == 'Warning' && obj.Errors.ErrorCode == '21917108')) {
str = '<p><strong>' + returnCode + '</strong>, Item Id <a href="https://www.ebay.com/itm/' + obj.ItemID + '" target="_blank">' + obj.ItemID + '</a> (' + name + ')</p>';
if (returnCode == 'Warning') {
str += "<p>" + obj.Errors.SeverityCode + " (" + obj.Errors.ErrorCode + "): " + escapeHtml(obj.Errors.LongMessage) + "</p>";
}
var fees = getJsonArray(obj.Fees.Fee);
str += "<p>";
for (i = 0; i < fees.length; i++) {
if (fees[i].Fee.text !== "0.0") {
str += fees[i].Name + ": $" + Number(fees[i].Fee.text).toFixed(2) + "<br/>";
}
}
str += "</p>";
if (obj.DiscountReason) {
str += "<p>Discount Reason: " + obj.DiscountReason + "</p>";
}
x.innerHTML += str;
} else {
str = '<p class="text-danger"><strong>' + returnCode + ' (' + name + ')</strong></p>';
var errors = getJsonArray(obj.Errors);
str += "<p>";
for (i = 0; i < errors.length; i++) {
str += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
if (errors[i].LongMessage.includes('Auth')) {
authErrorFlag = true;
}
}
str += "</p>";
if (obj.DuplicateInvocationDetails) {
str += '<p>Duplicate Invocation Id ' + obj.DuplicateInvocationDetails.DuplicateInvocationID + ' Tracking Id' + obj.DuplicateInvocationDetails.InvocationTrackingID + ' Status ' + obj.DuplicateInvocationDetails.Status + '</p>';
}
x.innerHTML += str;
if (authErrorFlag === true) {
eBayAuthTokenFlag = false;
x = document.getElementById("login");
if (x.className.indexOf("w3-show") == -1) {
x.className += " w3-show";
}
}
}
};
xhr.send(xml);
}
function createAddXML(xw, xhr, xmlrequest, callname, itemXML) {
xw.writeStartDocument();
xw.writeStartElement(xmlrequest);
xw.writeAttributeString('xmlns', 'urn:ebay:apis:eBLBaseComponents');
xw.writeStartElement('RequesterCredentials');
xw.writeElementString('eBayAuthToken', eBayAuthToken);
xw.writeEndElement(); /* RequesterCredentials */
xw.writeXML(itemXML);
xw.writeElementString('ErrorLanguage', 'en_US');
xw.writeElementString('Version', configeBayTradingVersion);
xw.writeElementString('WarningLevel', configWarningLevel);
xw.writeEndElement(); /* xmlrequest */
xw.writeEndDocument();
xhr.open('POST', configProxyUrl, true);
xhr.setRequestHeader('Content-Type', 'text/xml');
xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
}
function clearStatusWindows() {
var x = document.getElementById("results");
x.innerHTML = "";
x.className = x.className.replace(" w3-show", "");
}
function connected() {
var x;
eBayAuthTokenFlag = true;
document.getElementById("connected").innerHTML += " (Connected)";
x = document.getElementById("startButton");
x.className = x.className.replace(" btn-danger", " btn-dark");
x = document.getElementById("login");
x.className = x.className.replace(" w3-show", "");
}
</script>
<script>includeHTML();</script>
</body>
</html>