OneShopAPI.asp

From Developer's API

<%
'This class is a wrapper class to the API and will be used to contact the 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				
			ClearAPIParameters				
			for each node in nextRecordSetNode.ChildNodes
				AddApiParameter node.nodename, node.text
			next				
		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
		else
			m_apiCallParameters.item(parameterName) = parameterValue
		end if			
		
	end Sub	
	
	'This method will clear all the values in the api parameters dictionary
	public Sub ClearAPIParameters()
		m_ApiCallParameters.RemoveAll
	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 & ">"
		next
			
		ParseAPIParameters = bodyParameters
	
	end function
				
	public function GetOrderList()
		GetOrderList = ApiRequest("/ORDERS/LIST")
	end function
	
	public function GetOrderById(order_id)
		GetOrderById = ApiRequest("/ORDERS/" & order_id & "/READ")
	end function
	
	public function GetProductList()
		GetProductList = ApiRequest("/PRODUCTS/LIST")
	end function
	
	public function GetProductById(product_id)
		GetProductById = ApiRequest("/PRODUCTS/" & product_id & "/READ")
	end function
	
	public function GetClientList()
		GetClientList = ApiRequest("/CLIENTS/LIST")
	end function
	
	public function GetClientById(client_id)
		GetClientById = ApiRequest("/CLIENTS/" & client_id & "/READ")
	end function
	
	public function GetAvailableAPIMethods()
		GetAvailableAPIMethods = ApiRequest("")
	end function	
	
	public function GetErrorList()
		GetErrorList = ApiRequest("/ERRORS/LIST")
	end function		

end Class
%>