Not sure if this has been covered (if so excuse the newb error) but I thought I'd best post it.
I was made aware of a bug in SagePayPaymentProcessor.cs , method GenerateCryptField .
Line 101:
cryptBuilder.AppendFormat("VendorTxCode={0}", order.OrderId.ToString("N"));
This causes the orderId value to be formatted with comma delimiter after breaching the 1000 value. eg. 1,000.
SagePay refuses this and throws an error:
STATUS: Invalid
Status Detail: 3035: The VendorTxCode format is invalid
To fix this I removed the formatting parameter on the ToString call.
cryptBuilder.AppendFormat("VendorTxCode={0}", order.OrderId.ToString());
Hope this helps others...