From Developer's API

Revision as of 18:55, 28 May 2008 by Chrisn (Talk | contribs)
	'This class is a wrapper class to the API and will be used to contact the 1ShoppingCart API
	Class OneShopAPI
		private m_MerchantID
		private m_MerchantKey
		private m_ApiUrl
		private	m_ApiCallParameters		
		'This property sets your merchant id	
		public Property Let MerchantID(value)
    		m_merchantID = value
		end Property 
		'This property sets your merchant api key
		public Property Let MerchantKey(value)
    		m_merchantKey = value
		end Property
		'this property sets the url location of the api 
		public Property Let ApiUrl(value)
    		m_apiUrl = value
		end Property
		private sub class_initialize()
			set m_ApiCallParameters	= Server.CreateObject("Scripting.Dictionary")
		end sub
		'This methods takes the NextRecordSet node and 
    	'parses it into the the Api Parameters dictionary
		public sub BuildApiParameters(nextRecordSetNode)
			if nextRecordSetNode.nodename = "NextRecordSet" then
				for each node in nextRecordSetNode.ChildNodes
					AddApiParameter node.nodename, node.text
			end if	
		end sub
		'This method will add required parameters to a parameter array
		'This array will be used when building the request body to 
		'send to the API		
		public sub AddApiParameter(parameterName, parameterValue)
			'Check if key already exists if so reset the value to the
			'value passed in to the method
			if m_apiCallParameters.Exists(parameterName) = false then
				m_apiCallParameters.Add parameterName,parameterValue
				m_apiCallParameters.item(parameterName) = parameterValue
			end if			
		end Sub	
		'This method will clear all the values in the api parameters dictionary
		public Sub ClearAPIParameters()
		end Sub	

		'this method uses the WinHttpRequest object to make
		'a POST request to the api and return the response
		'from the API
		private function SendHttpRequest(url, request_body)
			dim winHttp
			dim apiResult 
			Set winHttp = Server.CreateObject("WinHttp.WinHttpRequest.5.1")			
			winHttp.Open "POST", url, false			
			winHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 						
			winHttp.Send request_body					
			apiResult = winHttp.ResponseBody
			set winHttp = nothing
			SendHttpRequest = apiResult
		end function
		'This method will call the win_http request method
		'after appending the proper information to the url
		'and creating the request body
		private function ApiRequest(api_path)
			dim url
			dim request_body
			dim result

			url = m_apiUrl & "/API/" & m_merchantID & api_path			
			request_body = CreateRequestString()			
			result = SendHttpRequest(url, request_body)			
			ApiRequest = result					
		end function		
		'This method will take a properly formatted api url
		'and create the response body then call the http request method
		public function XlinkApiRequest(url)
			dim request_body
			dim result
			request_body = CreateRequestString()			
			result = SendHttpRequest(url, request_body)			
			XlinkApiRequest = result
		end function
		'This method will create the request body
		'which consists of the merchant key wrapped
		'in XML expected by the API
		private function CreateRequestString()
			dim requestBody
			requestBody = "<Request><Key>" & m_merchantKey & "</Key>" &	ParseAPIParameters() & "</Request>"			
			CreateRequestString = requestBody
		end function
		'This method will take an array of parameters and create
		'the rest of the request body to send to the API
		private function ParseAPIParameters()
			dim bodyParameters
			bodyParameters = ""
			for each key in m_apiCallParameters.Keys
				bodyParameters = bodyParameters & _
					"<" & key & ">" & m_apiCallParameters.Item(key) & "</"  & key & ">"
			ParseAPIParameters = bodyParameters
		end function
		'Retrieve Order Information from API
		public function GetOrderList()
			GetOrderList = ApiRequest("/ORDERS/LIST")
		end function
		public function GetOrderById(order_id)
			GetOrderById = ApiRequest("/ORDERS/" & order_id & "/READ")
		end function
		'Retrieve Product Information from API
		public function GetProductList()
			GetProductList = ApiRequest("/PRODUCTS/LIST")
		end function
		public function GetProductById(product_id)
			GetProductById = ApiRequest("/PRODUCTS/" & product_id & "/READ")
		end function
		'Retrieve Client Information from API
		public function GetClientList()
			GetClientList = ApiRequest("/CLIENTS/LIST")
		end function
		public function GetClientById(client_id)
			GetClientById = ApiRequest("/CLIENTS/" & client_id & "/READ")
		end function
		'Retrieve the list of available methods
		public function GetAvailableAPIMethods()
			GetAvailableAPIMethods = ApiRequest("")
		end function	
		'Retrieve list of possible Error messages
		public function GetErrorList()
			GetErrorList = ApiRequest("/ERRORS/LIST")
		end function		
	end Class