I was working on implementing a ColdFusion payment processor for Chase Paymentech, but I kept running into the same error (which I’ve formatted so nicely using my ruby clipboard format utility!)
<?xml version='1.0' encoding='UTF-8'?>
<Response>
<QuickResp>
<ProcStatus>05</ProcStatus>
<StatusMsg>PTI43,TEXT/XML; CHARSET=UTF-8 is not supported</StatusMsg>
</QuickResp>
</Response>
I knew that PTI43 was part of the MIME Header Content-Type I was passing, so I did a little bit of poking around in the docs and came upon this. Apparently setting a cfhttpparam type of “xml” “identifies the request as having a content-type of text/xml.”.
In order to send a valid message to chase you have to specify a particular MIME header setting “Content-Type”, which ColdFusion was garbling. Thankfully all I had to do to fix it was switch the cfhttpparam type attribute to “body” in order to fix it.
<cffunction name="Authorize" output="no">
<cfargument name="vars" required="yes"/>
<cfset var cfhttp = ""/>
<cfset var i = ""/>
<cfheader name="POST /AUTHORIZE HTTP/1.1">
<cfhttp url="#GetURL()#" port="#GetPort()#" method="POST">
<cfloop collection="#arguments.vars#" item="i">
<!--- header variables --->
<cfif i NEQ "XML">
<cfhttpparam
type="header"
name="#i#"
value="#arguments.vars[i]#"
/>
</cfif>
</cfloop>
<!--- set the type to "body" NOT "xml"!!! --->
<cfhttpparam
type="body"
value="#arguments.vars["XML"]#"
/>
</cfhttp>
<cfreturn cfhttp/>
</cffunction>
I hadn’t run into this problem before, so I thought I’d share!