In this article, we will learn about getting Amazon FBA Fee using the Amazon MWS API in C#. As every seller required to know their FBA fee in order to improve himself/herself regarding selling products on Amazon. Amazon provides us the GetMyFeeEstimate API call in products API.
Prerequisites
- Knowledge of C#
- You must have the Amazon credentials like SellerId, Access Key, etc.
So let’s get started.
Firstly, install the NuGet package for products API.
Install-Package MWSProductsCSharpClientLibrary -Version 2017.3.22
Starting from _Layout.cshtml file.
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - My ASP.NET Application</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") <style> #loading { position: fixed; top: -50%; left: -50%; width: 200%; height: 200%; background: rgba(241, 241, 241, 0.48); z-index: 2000; overflow: hidden; } #loading img { position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; } </style> </head> <body> <div id="loading"> <img src="~/Content/spinner.gif" /> </div> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> @Html.ActionLink("Amazon FBA Fees", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Home", "Index", "Home")</li> </ul> </div> </div> </div> <div class="container body-content"> @RenderBody() <hr /> <footer> <p>© @DateTime.Now.Year - My ASP.NET Application</p> </footer> </div> @RenderSection("scripts", required: false) </body> </html> <script> function showLoader() { $('#loading').show(); } function hideLoader() { $('#loading').fadeOut(); } function getUrl() { var getUrl = window.location; var baseUrl = getUrl.protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[0]; return baseUrl; } $(document).ready(function () { hideLoader(); }); </script>
Navigate to View -> Home -> Index.cshtml
@{ ViewBag.Title = "Home Page"; } <div class="row" style="margin-top:5%"> <div class="form-group col-md-4"> <label>Enter ASIN</label> <input type="text" class="form-control" id="asin" /> </div> </div> <div class="row"> <div class="form-group col-md-4"> <input type="button" class="btn btn-success" id="calculate" value="Calculate Fees" /> </div> </div> <hr /> <script> $(document).on("click", "#calculate", function () { if ($('#asin').val() == "") { alert("ASIN is required"); $('#asin').focus(); return; } else { showLoader(); $.ajax({ url: getUrl() + '/Home/GetFeeEstimateData', type: 'POST', data: { 'ASIN': $('#asin').val() }, success: function (res) { hideLoader(); if (res.result) alert("FBA Fee is " + res.fee + " " + res.currency); else alert("Something went wrong. Please contact administrator"); }, error: function (err) { hideLoader(); alert(err); } }); } }); </script>
We have to add the Credentials in Web.Config file present in the root directory.
<add key="ServiceURL" value="https://mws.amazonservices.com" /> <add key="SellerId" value="seller-id" /> <add key="MarketplaceID" value="marketplace-id" /> <add key="AccessKeyID" value="access-key" /> <add key="SecretKey" value="secret-key" />
Finally, the code which makes us possible to call through the API
using MarketplaceWebServiceProducts; using MarketplaceWebServiceProducts.Model; using System; using System.Configuration; using System.IO; using System.Web.Mvc; using System.Xml; namespace GetMyFeeEstimateForAmazonMWS.Controllers { public class HomeController : Controller { public MarketplaceWebServiceProductsConfig _productConfig; public MarketplaceWebServiceProducts.MarketplaceWebServiceProducts _productClient; public static string sellerId = ""; public static string marketplaceID = ""; public static string accessKeyID = ""; public static string secretKey = ""; public static string serviceURL = ""; public HomeController() { sellerId = ConfigurationManager.AppSettings["SellerId"]; marketplaceID = ConfigurationManager.AppSettings["MarketplaceID"]; accessKeyID = ConfigurationManager.AppSettings["AccessKeyID"]; secretKey = ConfigurationManager.AppSettings["SecretKey"]; serviceURL = ConfigurationManager.AppSettings["ServiceURL"]; _productConfig = new MarketplaceWebServiceProductsConfig { ServiceURL = serviceURL }; _productClient = new MarketplaceWebServiceProductsClient("MWS", "1.0", accessKeyID, secretKey, _productConfig); } public ActionResult Index() { return View(); } public JsonResult GetFeeEstimateData(string ASIN) { try { StreamWriter BaseTag; var uploadRootFolder = AppDomain.CurrentDomain.BaseDirectory + "\\Reports"; Directory.CreateDirectory(uploadRootFolder); var directoryFullPath = uploadRootFolder; string targetFile = Path.Combine(directoryFullPath, "FeeEstimateResponse_" + Guid.NewGuid() + ".xml"); var response = InvokeGetMyFeesEstimate(ASIN); BaseTag = System.IO.File.CreateText(targetFile); BaseTag.Write(response.ToXML()); BaseTag.Close(); XmlDocument root = new XmlDocument(); root.Load(targetFile); XmlNodeList elemList1 = root.GetElementsByTagName("FeeAmount"); var data = elemList1[3].InnerText; var currency = data.Substring(0, 3); var fee = data.Substring(3); return Json(new { result = true, currency = currency, fee = fee }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { result = false }, JsonRequestBehavior.AllowGet); } } public GetMyFeesEstimateResponse InvokeGetMyFeesEstimate(string ASIN) { try { GetMyFeesEstimateRequest request = new GetMyFeesEstimateRequest(); request.SellerId = sellerId; request.MWSAuthToken = "example"; FeesEstimateRequestList feesEstimateRequestList = new FeesEstimateRequestList(); feesEstimateRequestList.FeesEstimateRequest.Add(new FeesEstimateRequest { MarketplaceId = marketplaceID, IdType = "ASIN", IdValue = ASIN, PriceToEstimateFees = new PriceToEstimateFees { ListingPrice = new MoneyType { Amount = 0M, CurrencyCode = "USD" } }, Identifier = "request_" + Guid.NewGuid().ToString(), IsAmazonFulfilled = true }); request.FeesEstimateRequestList = feesEstimateRequestList; return _productClient.GetMyFeesEstimate(request); } catch (Exception ex) { return null; } } } }
Output:
You can download the source code from here