<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0">
			<channel>
			<title>James Allen&apos;s Coldfusion and Internet Technology Blog - SagePay</title>
			<link>http://jamesallen.name/index.cfm</link>
			<description>Adventures in Coldfusion and Internet development.</description>
			<language>en-us</language>
			<pubDate>Wed, 19 Jun 2013 19:05:06 +0100</pubDate>
			<lastBuildDate>Fri, 18 Sep 2009 13:20:00 +0100</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>slingshotuk@googlemail.com</managingEditor>
			<webMaster>slingshotuk@googlemail.com</webMaster>
			
			
			
			
			
			<item>
				<title>Problems connecting to SagePay&apos;s TEST and SIM servers  - FIXED</title>
				<link>http://jamesallen.name/index.cfm/2009/9/18/Problems-connecting-to-SagePays-TEST-and-SIM-servers---FIXED</link>
				<description>
				
				&lt;p&gt;Since Tuesday afternoon we have found that we can&apos;t connect to the TEST or SIM servers at SagePay. Live is fine however, even though the exact same code is used.&lt;/p&gt;
&lt;p&gt;It&apos;s a strange problem as an immediate connection failure is received when attempting to POST a transaction registration to either the test or sim servers.&lt;/p&gt;
&lt;p&gt;After this had happened we contacted SagePay support who did some checks but told us that there are no problems on the server. However, when I did a quick Twitter search I found another developer who is also getting this issue. I confirmed the problem via my local development server in the office and on the live server so it doesn&apos;t appear to be a specific ISP routing problem etc.&lt;/p&gt;
&lt;p&gt;However over the past few day SagePay have confirmed that a small number of user&apos;s are having problems. It&apos;s most certainy not affecting the majority though.&lt;/p&gt;
&lt;p&gt;This has led support to believe that the problem is due to Coldfusion and the way it is sending the POST request to the SagePay server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Luckily while throwing this problem out to Twitter a very helpful user (@Zefer) suggested that the problem might be due to the server sending back a gzipped response which cfhttp in Coldfusion can&apos;t handle (and certain URL functions in PHP it seems). To fix this we just need to send headers to tell the server what we can accept:&lt;/p&gt;
&lt;p&gt;{code}&lt;/p&gt;
&lt;p&gt;&amp;lt;cfhttpparam type=&quot;Header&quot; name=&quot;Accept-Encoding&quot; value=&quot;deflate;q=0&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfhttpparam type=&quot;Header&quot; name=&quot;TE&quot; value=&quot;deflate;q=0&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;{/code}&lt;/p&gt;
&lt;p&gt;The raw headers sent in the request will look like this:&lt;/p&gt;
&lt;p&gt;{code}&lt;br /&gt;Accept-Encoding: deflate;q=0&lt;br /&gt;TE: deflate;q=0&lt;br /&gt;{/code}&lt;/p&gt;
&lt;p&gt;Once I made this change the problem went away immediately.&lt;/p&gt;
&lt;p&gt;I assume that SagePay must have made a system change on SIM and TEST but not on LIVE (luckily).&lt;/p&gt;
				
				</description>
						
				
				<category>SagePay</category>				
				
				<pubDate>Fri, 18 Sep 2009 13:20:00 +0100</pubDate>
				<guid>http://jamesallen.name/index.cfm/2009/9/18/Problems-connecting-to-SagePays-TEST-and-SIM-servers---FIXED</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>SagePay: Inconsistency in IFrame &apos;Low profile&apos; option on Server solution - ** Workaround **</title>
				<link>http://jamesallen.name/index.cfm/2009/5/19/SagePay-Inconsistency-in-IFrame-Low-profile-option-on-Server-solution-workaround</link>
				<description>
				
				&lt;p&gt;I&apos;ve recently been integrating the SagePay Server solution into a client site and it was decided to utilise the new &apos;Low Profile&apos; option (introduced in protocol 2.23). This new option allows the SagePay payment pages to appear within an Iframe placed inside the main site template. The obvious benefit of this is that the customer is not redirected to another site to complete payment and confidence in the vendor is improved.&lt;/p&gt;
&lt;p&gt;The integration went pretty well with the SagePay XSLT templating system being relatively easy to use and customise. I soon had a template which nicely matched the style of the vendor&apos;s website.&lt;/p&gt;
&lt;p&gt;During testing everything worked great. The payment form appeared within the IFrame, the card details could be entered and the 3D Secure page worked as expected. After the payment side had been handled SagePay redirect back to the vendor website outside of the IFrame - just what we need.&lt;/p&gt;
&lt;p&gt;However, during testing I tested an AMEX card. AMEX cards are not part of the 3D Secure system and so the customer is not shown a 3D Secure page - just the card input form. Now this shouldn&apos;t really be a problem but when the card details have been entered and validated, SagePay redirect the customer back to the vendor site but &lt;strong&gt;inside&lt;/strong&gt; the IFrame!&lt;/p&gt;
&lt;p&gt;This is definetely &lt;strong&gt;NOT &lt;/strong&gt;what we want as once redirected to our payment processing template the full site design is shown within the IFrame (header, sidebar and footer).&lt;/p&gt;
&lt;p&gt;At this point I hit the HTTP debugger to find out what was causing this inconsistency. Here is what I found:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When 3DS authentication is required, the following HTTP requests are triggered:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;{code}&lt;/p&gt;
&lt;p&gt;https://test.sagepay.com/gateway/service/carddetails&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/carddetails&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/gateway/service/cardconfirmation&amp;nbsp;&amp;nbsp;&amp;nbsp; 302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/cardconfirmation&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/gateway/service/authentication&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/authentication&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/mpitools/accesscontroler?action=pareq&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /mpitools/accesscontroler?action=pareq&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/mpitools/accesscontroler?action=auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /mpitools/accesscontroler?action=auth&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/gateway/service/authentication?action=callback&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/authentication?action=callback&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/gateway/service/authentication?action=completion&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/authentication?action=completion&lt;br /&gt;REDIRECT&lt;br /&gt;http://dev.jamesallen.name/index.cfm/page/orders.order.cfm&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dev.jamesallen.name /index.cfm/page/orders.order.cfm&lt;br /&gt;{/code}&lt;/p&gt;
&lt;p&gt;In this case, the final SagePay request is a POST (assumng it uses target=&quot;_top&quot; which jumps the customer out of the Iframe)&lt;br /&gt;The redirect back to the site is thus outside of the Iframe and all is good.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;If 3DS authentication is NOT required the following HTTP requests are triggered:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;{code}&lt;br /&gt;https://test.sagepay.com/gateway/service/cardselection?vpstxid={283FE985-CE13-A510-B9E6-840531*****} 302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/cardselection?vpstxid={283FE985-CE13-A510-B9E6-840531*****} &lt;br /&gt;https://test.sagepay.com/gateway/service/carddetails&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/carddetails&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/gateway/service/carddetails&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POST&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/carddetails&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/gateway/service/cardconfirmation&amp;nbsp;&amp;nbsp;&amp;nbsp; 302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/cardconfirmation&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;https://test.sagepay.com/gateway/service/authentication&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 302&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test.sagepay.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /gateway/service/authentication&lt;br /&gt;REDIRECT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;http://dev.jamesallen.name/index.cfm/page/orders.order.cfm&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GET&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dev.jamesallen.name/index.cfm/page/orders.order.cfm&lt;br /&gt;{/code}&lt;/p&gt;
&lt;p&gt;In this case the last request inside SagePay is a GET which means the customer is left in the Iframe.&lt;/p&gt;
&lt;p&gt;So there is a fundamental inconsistency in the implementation of the new &apos;Low Profile&apos; option in the SagePay Server product. So, how do we solve this?&lt;/p&gt;
&lt;p&gt;After some head scratching I came up with a solution which I feel is fairly straight forward and will ensure that when SagePay fix the problem, the site will not suddenly change it&apos;s behaviour and will be easy to modify to remove the Javascript redirect.&lt;/p&gt;
&lt;p&gt;The solution is as follows:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;In your &lt;strong&gt;notification &lt;/strong&gt;template (the one that SagePay POSTS back to and you respond with Status, RedirectURL, StatusDetail), set the RedirectURL to a new handler template (e.g http://site.com/orders/go.cfm). Then set a session variable to the URL you want the customer redirected to to continue the payment process.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create the handler template. This will build a dynamic form whose target is set to the redirect URL set in session in the step above. Javascript will be used to automatically submit the form when the page is loaded. An HTML submit button will be created inside the form in case the user does not have Javascript enabled.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;That&apos;s the solution in a nutshell. We are modifying our notification template to always redirect to a new handler template which will jump the customer out of the Iframe and direct them to the correct template that continues the order process. The form target on the handler template is set to &quot;_top&quot; which causes the form submission to break out of the IFrame.&lt;/p&gt;
&lt;p&gt;To help with this below is the code I use on my handler template (go.cfm). I use JQuery for the automatic form submission and to hide the submit button. You could of course code that functionality without JQuery.&lt;/p&gt;
&lt;p&gt;{code}&lt;/p&gt;
&lt;p&gt;&amp;lt;!--- URL to redirect to (set in session before the jump to here) ---&amp;gt;&lt;br /&gt;&amp;lt;cfset targetURL = session.targetURL&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;/styles/styles.css&quot; type=&quot;text/css&quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Payment Processor&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;script language=&quot;javascript&quot; src=&quot;/functions/jquery.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script language=&quot;javascript&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(&quot;#jump&quot;).hide();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $(&quot;#jump&quot;).submit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cfoutput&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form id=&quot;jump&quot; action=&quot;#targetURL#&quot; target=&quot;_top&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&quot;submit&quot; value=&quot;Click to continue your order&quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cfoutput&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;
&lt;p&gt;{/code}&lt;/p&gt;
&lt;p&gt;With this approach, once SagePay fix the inconsitency I can simply change this template to perform a server redirect to the required URL instead of using the Javascript and self submitting form.&lt;br /&gt;Either that, or to change the notification template so that it goes directly to the required URL&apos;s as before.&lt;/p&gt;
&lt;p&gt;Hopefully this will help some people who have got this problem when implementing the Server solution.&lt;/p&gt;
				
				</description>
						
				
				<category>SagePay</category>				
				
				<pubDate>Tue, 19 May 2009 15:41:00 +0100</pubDate>
				<guid>http://jamesallen.name/index.cfm/2009/5/19/SagePay-Inconsistency-in-IFrame-Low-profile-option-on-Server-solution-workaround</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>New SagePay URL&apos;s</title>
				<link>http://jamesallen.name/index.cfm/2009/4/21/New-SagePay-URLs</link>
				<description>
				
				&lt;p&gt;I thought it might be easier if I listed the new SagePay URL&apos;s here.&lt;/p&gt;
&lt;p&gt;I&apos;ll start with some code for Coldfusion developers who want to quickly copy and paste straight into their payment pages.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Note: These URL&apos;s are for the VSPDirect product&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Also, this is not a complete list of the operations available (I don&apos;t use all of them in my code so didn&apos;t include).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;{code}&lt;/p&gt;
&lt;p&gt;&amp;lt;cfset protx = StructNew()&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.live.purchaseURL = &quot;https://live.sagepay.com/gateway/service/vspdirect-register.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.live.voidURL = &quot;https://live.sagepay.com/gateway/service/void.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.live.refundURL = &quot;https://live.sagepay.com/gateway/service/refund.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.live.releaseURL = &quot;https://live.sagepay.com/gateway/service/release.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.live.repeatURL = &quot;https://live.sagepay.com/gateway/service/repeat.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.live.authoriseURL = &quot;https://live.sagepay.com/gateway/service/authorise.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.live.callbackURL = &quot;https://live.sagepay.com/gateway/service/direct3dcallback.vsp&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfset protx.test.purchaseURL = &quot;https://test.sagepay.com/gateway/service/vspdirect-register.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.test.voidURL = &quot;https://test.sagepay.com/gateway/service/void.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.test.refundURL = &quot;https://test.sagepay.com/gateway/service/refund.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.test.releaseURL = &quot;https://test.sagepay.com/gateway/service/release.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.test.repeatURL = &quot;https://test.sagepay.com/gateway/service/repeat.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.test.authoriseURL = &quot;https://test.sagepay.com/gateway/service/authorise.vsp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.test.callbackURL = &quot;https://test.sagepay.com/gateway/service/direct3dcallback.vsp&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;cfset protx.sim.purchaseURL = &quot;https://test.sagepay.com/Simulator/VSPDirectGateway.asp&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.sim.voidURL = &quot;https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorVoidTx&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.sim.refundURL = &quot;https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorRefundTx&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.sim.releaseURL = &quot;https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorReleaseTx&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.sim.repeatURL = &quot;https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorRepeatTx&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.sim.authoriseURL = &quot;https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorAuthoriseTx&quot;&amp;gt;&lt;br /&gt;&amp;lt;cfset protx.sim.callbackURL=&quot;https://test.sagepay.com/Simulator/VSPDirectCallback.asp&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;{/code}&lt;/p&gt;
&lt;p&gt;Now here are the URL&apos;s without the code:&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;LIVE&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;purchaseURL = https://live.sagepay.com/gateway/service/vspdirect-register.vsp&lt;br /&gt;voidURL = https://live.sagepay.com/gateway/service/void.vsp&lt;br /&gt;refundURL = https://live.sagepay.com/gateway/service/refund.vsp&lt;br /&gt;releaseURL = https://live.sagepay.com/gateway/service/release.vsp&lt;br /&gt;repeatURL = &quot;ttps://live.sagepay.com/gateway/service/repeat.vsp&lt;br /&gt;authoriseURL = https://live.sagepay.com/gateway/service/authorise.vsp&lt;br /&gt;callbackURL = https://live.sagepay.com/gateway/service/direct3dcallback.vsp&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;TEST&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;purchaseURL = https://test.sagepay.com/gateway/service/vspdirect-register.vsp&lt;br /&gt;voidURL = https://test.sagepay.com/gateway/service/void.vsp&lt;br /&gt;refundURL = https://test.sagepay.com/gateway/service/refund.vsp&lt;br /&gt;releaseURL = https://test.sagepay.com/gateway/service/release.vsp&lt;br /&gt;repeatURL = https://test.sagepay.com/gateway/service/repeat.vsp&lt;br /&gt;authoriseURL = https://test.sagepay.com/gateway/service/authorise.vsp&lt;br /&gt;callbackURL = https://test.sagepay.com/gateway/service/direct3dcallback.vsp&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SIM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;purchaseURL = https://test.sagepay.com/Simulator/VSPDirectGateway.asp&lt;br /&gt;voidURL = https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorVoidTx&lt;br /&gt;refundURL = https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorRefundTx&lt;br /&gt;releaseURL = https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorReleaseTx&lt;br /&gt;repeatURL = https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorRepeatTx&lt;br /&gt;authoriseURL = https://test.sagepay.com/Simulator/VSPServerGateway.asp?Service=VendorAuthoriseTx&lt;br /&gt;callbackURL = https://test.sagepay.com/Simulator/VSPDirectCallback.asp&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
				
				</description>
						
				
				<category>SagePay</category>				
				
				<pubDate>Tue, 21 Apr 2009 14:19:00 +0100</pubDate>
				<guid>http://jamesallen.name/index.cfm/2009/4/21/New-SagePay-URLs</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Protx - SagePay URL switch today - Old URL&apos;s DO NOT work anymore due to forwarding failure</title>
				<link>http://jamesallen.name/index.cfm/2009/4/21/Protx--SagePay-URL-switch-today--Old-URLs-DO-NOT-work-anymore-due-to-forwarding-failure</link>
				<description>
				
				&lt;p&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;NOTE: It looks like this problem may only affect Coldfusion and Java.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Protx have just switched over to the new SagePay URL&apos;s today on LIVE and unfortunately the old URL&apos;s have broken. This was not supposed to happen and the old URL&apos;s should have continued for the forseeable future.&lt;/p&gt;
&lt;p&gt;SagePay are telling developers to update all sites to the new URL system.&lt;/p&gt;
&lt;p&gt;I can&apos;t imagine how many orders are being lost this morning.&lt;/p&gt;
&lt;p&gt;Get your URL&apos;s updated ASAP, full details here:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://support.sagepay.com/forum/Topic8090-22-1.aspx&quot;&gt;https://support.sagepay.com/forum/Topic8090-22-1.aspx&lt;/a&gt;&lt;/p&gt;
				
				</description>
						
				
				<category>SagePay</category>				
				
				<pubDate>Tue, 21 Apr 2009 13:15:00 +0100</pubDate>
				<guid>http://jamesallen.name/index.cfm/2009/4/21/Protx--SagePay-URL-switch-today--Old-URLs-DO-NOT-work-anymore-due-to-forwarding-failure</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>ProtX is rebranding to SagePay - TEST and SIM servers now use different URL!</title>
				<link>http://jamesallen.name/index.cfm/2009/4/17/ProtX-is-rebranding-to-SagePay--TEST-and-SIM-servers-now-use-different-URL</link>
				<description>
				
				&lt;p&gt;I wondered why when I tried to test my Protx VSPServer integration today that it just wouldn&apos;t work. I kept getting this SSL problem when submitting the HTTP POST:&lt;/p&gt; {code}
I/O Exception: Name in certificate `test.sagepay.com&apos;
does not match host name `ukvpstest.protx.com&apos;{/code}
&lt;p&gt;I assumed this was a temporary issue but have just found out that ProtX is rebranding to SagePay and you need to use the following domain for TEST and SIM:&lt;/p&gt;
&lt;p&gt;http://test.sagepay.com&lt;/p&gt;
&lt;p&gt;There is also a new path for each operation so check out the table posted on the ProtX support forums:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://support.sagepay.com/forum/Topic8090-22-1.aspx&quot;&gt;https://support.sagepay.com/forum/Topic8090-22-1.aspx&lt;/a&gt;&lt;/p&gt;
				
				</description>
						
				
				<category>SagePay</category>				
				
				<pubDate>Fri, 17 Apr 2009 20:28:00 +0100</pubDate>
				<guid>http://jamesallen.name/index.cfm/2009/4/17/ProtX-is-rebranding-to-SagePay--TEST-and-SIM-servers-now-use-different-URL</guid>
				
			</item>
			
		 	
			</channel></rss>