Thanks Eric, understood.
I only got the one error message (Status code: INVALID) using the error reporting code on the checkout failure page below. From the lack of error information I'm guessing this means I'm missing some serious detail in the Protx_VSPForm.php page?
Success: <?php echo $_SESSION["Protx_VSPServer_Success"]; ?><br />
Status code: <?php echo $_SESSION["Protx_VSPServer_StatusCode"]; ?><br />
Error message: <?php echo $_SESSION["Protx_VSPServer_ErrorMessage"]; ?><br />
Bug report:
Success: <?php echo $Protx_VSPServer_Auth["Success"]; ?><br />
Status code: <?php echo $Protx_VSPServer_Auth["StatusCode"]; ?><br />
Error message: <?php echo $Protx_VSPServer_Auth["ErrorMessage"]; ?><br />
Vendor trans code: <?php echo $Protx_VSPServer_Auth["VendorTxCode"]; ?><br />
SagePay Trans ID: <?php echo $Protx_VSPServer_Auth["VPSTxId"]; ?><br />
Security Key: <?php echo $Protx_VSPServer_Auth["SecurityKey"]; ?><br />
Next URL: <?php echo $Protx_VSPServer_Auth["NextURL"]; ?><br />
Full response: <?php echo $Protx_VSPServer_Auth["FullResponse"]; ?></p>