Quantcast
Channel: Classic ASP
Viewing all articles
Browse latest Browse all 488

Parsing SOAP XML with Classic ASP

$
0
0

I'm typically a LAMP stack developer, so I'm a little out of my element on this one. I'm working on a classic ASP site that is doing a SOAP based XML API connection. It's worked in the past, but now we're updating the API to connect to a different application. Problem is, I'm not able to get the API to work any more. 

I set up a SOAP client before editing this API, and it tested good. I've run several tests since to be sure that it is still working. I set up an ASP server on my local computer to get detailed error reporting. 

Microsoft VBScript runtime error '800a01c2'
Wrong number of arguments or invalid property assignment

This is the line in question (Line 69):

isSuccess = objDoc.getElementsByTagName("Status")

If it is helpful, here is the code for the entire document. Thank you!

<%@ language=vbscript %><% Option Explicit %><%
'============================================================'
'   Authenticate a representative using the representative's
'   user name (RepDID or EmailAddress) and password.
'============================================================'

'----------------------------------------------------------'
' Process User Submitted Data
'----------------------------------------------------------'
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then

	'Load form fields into variables
	Dim repUsername, repPassword
	repUsername = Trim(Request.Form("rep-username"))
	repPassword = Trim(Request.Form("rep-password"))

	'Set up basic Validation...
	If repUsername = "" Or repPassword = "" Then
		Response.Redirect ("../index.asp?login=error#login")

	Else
		'----------------------------------------------------------'
		' Compose SOAP Request
		'----------------------------------------------------------'
		Dim xobj, SOAPRequest
		Set xobj = Server.CreateObject("Msxml2.ServerXMLHTTP")
		xobj.Open "POST", "http://api.domain.com/3.0/Api.asmx", False
		xobj.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
		xobj.setRequestHeader "SOAPAction", "http://api.domain.com/AuthenticateCustomer"
		SOAPRequest = _"<?xml version=""1.0"" encoding=""utf-8""?>" &_"<x:Envelope xmlns:x='http://schemas.xmlsoap.org/soap/envelope/' xmlns:api='http://api.domain.com/'>"&_"<x:Header>" &_"<api:ApiAuthentication>" &_"<api:LoginName>string</api:LoginName>" &_"<api:Password>string</api:Password>" &_"<api:Company>string</api:Company>" &_"<api:ApiAuthentication>" &_"</x:Header>" &_"<x:Body>" &_"<api:AuthenticateCustomerRequest>" &_"<api:LoginName>"&repUsername&"</api:LoginName>" &_"<api:Password>"&repPassword&"</api:Password>" &_"</api:AuthenticateCustomerRequest>" &_"</x:Body>" &_"</x:Envelope>"

		' Send SOAP envelope
		xobj.send SOAPRequest

        '----------------------------------------------------------'
        ' Retrieve SOAP Response
        '----------------------------------------------------------'
		Dim strReturn, objDoc, isSuccess
		' Receive SOAP response
		strReturn = xobj.responseText 'Get the return envelope

        Set objDoc = CreateObject("Microsoft.XMLDOM")
		objDoc.async = False
		' Load XML
		objDoc.LoadXml(strReturn)
		' Parse XML
		isSuccess = objDoc.getElementsByTagName("Status")("Success").text

		'----------------------------------------------------------'
		' If user is valid set Session Authenticated otherwise
		' restrict user and redirect to the index page and show error
		'----------------------------------------------------------'
		' Authenticate
		If isSuccess = "Success" Then
			Session("Authenticated") = 1
			'Session.Timeout = 1 '60 'Expire session 1 hours from current time
			Response.Redirect ("../welcome.asp#AdvancedTrainingVideos")

		Else
			Session("Authenticated") = 0
			Response.Redirect ("../index.asp?login=error#login")

		End IF 'END - isSuccess

	End IF ' END - Basic Validation...
End IF 'END - REQUEST_METHOD POST

%>


Viewing all articles
Browse latest Browse all 488

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>