Here is my code for doing FedEx tracking - feel free to email me off list
with questions.
=]
<cffunction name="trackShipment" access="public" returntype="struct">
<!--- Args --->
<cfargument name="shippingNumber" type="string" required="true">
<!--- Logic --->
<cfscript>var local = {XMLPacket = '',cleanedXML = '',parsedData =
'',sReturn = {Status = false,ErrorMessage = ''}};</cfscript>
<cftry>
<cfsavecontent variable="local.XMLPacket">
<cfoutput>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:v6="http://fedex.com/ws/track/v6">
<soapenv:Header/>
<soapenv:Body>
<v6:TrackRequest>
<v6:WebAuthenticationDetail>
<v6:UserCredential>
<v6:Key>#application.SiteDetails.FedEx.authKey#</v6:Key>
<v6:Password>#application.SiteDetails.FedEx.authPassword#</v6:Password>
</v6:UserCredential>
</v6:WebAuthenticationDetail>
<v6:ClientDetail>
<v6:AccountNumber>#application.SiteDetails.FedEx.authAcctNumber#</v6:AccountNumber>
<v6:MeterNumber>#application.SiteDetails.FedEx.authMeterNumber#</v6:MeterNumber>
</v6:ClientDetail>
<v6:Version>
<v6:ServiceId>trck</v6:ServiceId>
<v6:Major>6</v6:Major>
<v6:Intermediate>0</v6:Intermediate>
<v6:Minor>0</v6:Minor>
</v6:Version>
<v6:PackageIdentifier>
<v6:Value>#Arguments.shippingNumber#</v6:Value>
<v6:Type>TRACKING_NUMBER_OR_DOORTAG</v6:Type>
</v6:PackageIdentifier>
</v6:TrackRequest>
</soapenv:Body>
</soapenv:Envelope>
</cfoutput>
</cfsavecontent>
<cfhttp url="https://ws.fedex.com:443/web-services/track" method="POST"
throwonerror="yes">
<cfhttpparam type="header" name="charset" value="utf-8">
<cfhttpparam type="header" name="Accept-Encoding" value="*">
<cfhttpparam type="header" name="TE" value="deflate;q=0">
<cfhttpparam type="header" name="content-type" value="text/xml">
<cfhttpparam type="header" name="content-length"
value="#len(local.XMLPacket)#">
<cfhttpparam type="xml" name="message"
value="#trim(local.XMLPacket)#">
</cfhttp>
<cfscript>
//Clean the returned string
local.cleanedXML = CFHTTP.FileContent;
local.cleanedXML = CleanUpXMLString(local.cleanedXML);
//Strip out namespaces references - they just make parsing harder
local.cleanedXML =
local.cleanedXML.ReplaceAll("xmlns(:\w+)?=""[^""]*""","");
local.cleanedXML =
local.cleanedXML.ReplaceAll("diffgr(:\w+)?=""[^""]*""","");
local.cleanedXML =
local.cleanedXML.ReplaceAll("msdata(:\w+)?=""[^""]*""","");
local.cleanedXML = local.cleanedXML.ReplaceAll("xsi(:\w+)?=""[^""]*""","");
local.cleanedXML = local.cleanedXML.ReplaceAll("(</?)(\w+:)","$1");
if(IsXML(TRIM(local.cleanedXML))){
//parse it
local.parsedData = XMLParse(local.cleanedXML);
writeDump(var=local.parsedData,abort=true);
}
else{
writeDump(var=CFHTTP.FileContent,abort=true);
}
</cfscript>
<cfcatch type="any">
<cfdump var="#cfcatch#"><cfabort>
</cfcatch>
</cftry>
<!--- Return --->
<cfreturn local.sReturn />
</cffunction>
Alan Rother
Manager, Phoenix Cold Fusion User Group, www.AZCFUG.org
Twitter: @AlanRother
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Order the Adobe Coldfusion Anthology now!
http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion
Archive:
http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:356168
Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm