OneShopAPI.cs

From Developer's API

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.IO;
using System.Net;
using System.Collections.Generic;

/// <summary>
/// This class is a wrapper class to the API and will be used to contact the 1ShoppingCart API
/// </summary>
public class OneShopApi
{
    private string _merchantId;
    private string _merchantKey;
    private string _apiUri;
    private Dictionary<string, string> _apiParameters;

    // This property sets your merchant id
    public string MerchantID
    {
        get {return _merchantId;}
        set {_merchantId = value;}
    }

    // This property sets your merchant api key
    public string MerchantKey
    {
        get {return _merchantKey;}
        set {_merchantKey = value;}
    }

    // This property sets the uri location of the api
    public string ApiUri
    {
        get {return _apiUri;}
        set {_apiUri = value;}
    }

    public OneShopApi(string APIUri)
    {
        _apiUri = APIUri;
    }
    
    public OneShopApi(string merchantId, string merchantKey, string apiUri)
    {
        _merchantId = merchantId;
        _merchantKey = merchantKey;
        _apiUri = apiUri;
        _apiParameters = new Dictionary<string,string>();
    }

    // This methods takes the NextRecordSet node and 
    // parses it into the the Api Parameters dictionary
    public void BuildApiParameters(XmlNode nextRecordSet)
    {
        if (nextRecordSet.Name == "NextRecordSet")
        {
            ClearApiParameters();

            foreach (XmlNode node in nextRecordSet)
            {
                AddApiParameter(node.Name, node.InnerText);
            }
        }
    }

    // This method will add required parameters to a parameter array
    // the array will be used when building the request body to 
    // send to the API	
    public void AddApiParameter(string parameterName, string parameterValue)
    {
        // Check if key already exists if so reset the value to the
        // value passed in to the method
        if (_apiParameters.ContainsKey(parameterName))
        {
            _apiParameters[parameterName] = parameterValue;
        }
        else
        {
            _apiParameters.Add(parameterName, parameterValue);
        }
    }

    public void ClearApiParameters()
    {
        _apiParameters.Clear();
    }
    
    // This method uses the HttpWebRequest object to make
    // a POST request to the api and return the response
    // from the API
    private XmlDocument SendHttpRequest(string uri, string requestBody)
    {
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);

        // send POST data
        request.Method = "POST";
        Stream stream = request.GetRequestStream();

        using (StreamWriter streamWriter = new StreamWriter(stream))
        {
            streamWriter.WriteLine(requestBody);
        }

        // get response
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        
        using (response)
        {
            Stream APIResult = response.GetResponseStream();
            XmlDocument xmlResult = new XmlDocument();
            xmlResult.Load(APIResult);
            return xmlResult;
        }
    }

    // This method will call the SendHttpRequest method
    // after appending the proper information to the uri
    // and creating the request body
    private XmlDocument ApiRequest(string apiPath)
    {
        XmlDocument result = new XmlDocument();

        string  uri,
                requestbody;

        uri = _apiUri + "/API/" + _merchantId + apiPath;
        requestbody = CreateRequestString();

        result = SendHttpRequest(uri, requestbody);

        return result;
    }

    // This method will take a properly formatted api uri
    // and create the response body then call the http request method
    public XmlDocument XLinkApiRequest(string uri)
    {
        string requestBody;
        XmlDocument result = new XmlDocument();

        requestBody = CreateRequestString();
        result = SendHttpRequest(uri, requestBody);

        return result;
    }

    private string CreateRequestString()
    {
        string requestBody;
        requestBody = "<Request>" +
                            "<Key>" + _merchantKey + "</Key>" + 
                            ParseApiParameters() + 
                      "</Request>";
        return requestBody;
    }

    private string ParseApiParameters()
    {
        string bodyParameters = "";

        foreach (string key in _apiParameters.Keys)
        {
            bodyParameters += "<" + key + ">" + _apiParameters[key] + "</" + key + ">";
        }
        return bodyParameters;
    }

    public XmlDocument GetOrderCount()
    {
        return ApiRequest("/ORDERS/COUNT");
    }

    public XmlDocument GetOrderList()
    {
        return ApiRequest("/ORDERS/LIST");
    }

    public XmlDocument GetOrderById(string orderId)
    {
        return ApiRequest("/ORDERS/" + orderId + "/READ");
    }

    public XmlDocument GetProductList()
    {
        return ApiRequest("/PRODUCTS/LIST");
    }

    public XmlDocument GetProductById(string productId)
    {
        return ApiRequest("/PRODUCTS/" + productId + "/READ");
    }

    public XmlDocument GetClientList()
    {
        return ApiRequest("/CLIENTS/LIST");
    }

    public XmlDocument GetClientById(string clientId)
    {
        return ApiRequest("/CLIENTS/" + clientId + "/READ");
    }

    public XmlDocument GetErrorList()
    {
        return ApiRequest("/ERRORS/LIST");
    }

    public XmlDocument GetAvailableAPIMethods()
    {
        return ApiRequest(string.Empty);
    }
}