Had a quick look at this and I 'think' that the problem lies in the before_process part of the code.
Its currently
function before_process() {
global $HTTP_GET_VARS, $_POST;
if ($HTTP_GET_VARS['code'] == 'A' && !empty($HTTP_GET_VARS['auth_code']) && empty($HTTP_GET_VARS['resp_code']) && !empty($HTTP_GET_VARS['zenid'])) {
// MUST CONTAIN YOUR DIGEST PASSWORD ESTABLISHED WITH SECPAY
// $DIGEST_PASSWORD = "secpay" ;
$DIGEST_PASSWORD = MODULE_PAYMENT_SECPAY_DIGEST ;
list($REQUEST_URI, $CHECK_SUM) = split("hash=", $_SERVER['REQUEST_URI']) ;
if ($HTTP_GET_VARS['hash'] != MD5($REQUEST_URI.$DIGEST_PASSWORD)) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, zen_session_name() . '=' . $HTTP_GET_VARS[zen_session_name()] . '&payment_error=' . $this->code, 'SSL', false, false));
}
}
else
{
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, zen_session_name() . '=' . $HTTP_GET_VARS[zen_session_name()] . '&payment_error=' . $this->code, 'SSL', false, false));
}
}
I think it should be;
function before_process() {
global $HTTP_GET_VARS, $_POST;
if ($HTTP_GET_VARS['code'] == 'A' && !empty($HTTP_GET_VARS['auth_code']) && empty($HTTP_GET_VARS['resp_code']) && !empty($HTTP_GET_VARS['zenid'])) {
// MUST CONTAIN YOUR DIGEST PASSWORD ESTABLISHED WITH SECPAY
// $DIGEST_PASSWORD = "secpay" ;
$DIGEST_PASSWORD = MODULE_PAYMENT_SECPAY_DIGEST ;
list($REQUEST_URI, $CHECK_SUM) = split("hash=", $_SERVER['REQUEST_URI']) ;
if ($HTTP_GET_VARS['hash'] != MD5($REQUEST_URI.$DIGEST_PASSWORD)) {
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, zen_session_name() . '=' . $HTTP_GET_VARS[zen_session_name()] . '&payment_error=' . $this->code, 'SSL', false, false));
}
}
}
With the else clause removed as the else clause is asking it to show the error page even if the error condition isn't met.
Hope this helps.