コード例 #1
0
 /**
  * Error / exception handling
  */
 function _errorHandler($response, $operation = '', $ignore_codes = '')
 {
     global $messageStack, $doPayPal;
     $gateway_mode = isset($response['PNREF']) && $response['PNREF'] != '';
     $basicError = !$response || isset($response['RESULT']) && $response['RESULT'] != 0 || isset($response['ACK']) && !strstr($response['ACK'], 'Success') || !isset($response['RESULT']) && !isset($response['ACK']);
     $ignoreList = explode(',', str_replace(' ', '', $ignore_codes));
     foreach ($ignoreList as $key => $value) {
         if ($value != '' && $response['L_ERRORCODE0'] == $value) {
             $basicError = false;
         }
     }
     /** Handle unilateral **/
     if ($response['RESULT'] == 'Unauthorized: Unilateral') {
         $errorText = $response['RESULT'] . MODULE_PAYMENT_PAYPALWPP_TEXT_UNILATERAL;
         $messageStack->add_session($errorText, 'error');
     }
     /** Handle FMF Scenarios **/
     if (in_array($operation, array('DoExpressCheckoutPayment', 'DoDirectPayment')) && $response['PAYMENTSTATUS'] == 'Pending' && $response['L_ERRORCODE0'] == 11610) {
         $this->fmfResponse = urldecode($response['L_SHORTMESSAGE0']);
         $this->fmfErrors = array();
         if ($response['ACK'] == 'SuccessWithWarning' && isset($response['L_FMFPENDINGID0'])) {
             for ($i = 0; $i < 20; $i++) {
                 $this->fmfErrors[] = array('key' => $response['L_FMFPENDINGID' . $i], 'status' => $response['L_FMFPENDINGID' . $i], 'desc' => $response['L_FMFPENDINGDESCRIPTION' . $i]);
             }
         }
         return sizeof($this->fmfErrors) > 0 ? $this->fmfErrors : FALSE;
     }
     if (!isset($response['L_SHORTMESSAGE0']) && isset($response['RESPMSG']) && $response['RESPMSG'] != '') {
         $response['L_SHORTMESSAGE0'] = $response['RESPMSG'];
     }
     //echo '<br />basicError='.$basicError.'<br />' . urldecode(print_r($response,true)); die('halted');
     $errorInfo = "\n\nProblem occurred while customer " . $_SESSION['customer_id'] . ' ' . $_SESSION['customer_first_name'] . ' ' . $_SESSION['customer_last_name'] . ' was attempting checkout with PayPal Express Checkout.';
     switch ($operation) {
         case 'SetExpressCheckout':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ec_step1()', "In function: ec_step1()\r\n\r\nValue List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_GEN_ERROR;
                 $errorNum = urldecode($response['L_ERRORCODE0'] . $response['RESULT']);
                 if ($response['RESULT'] == 25) {
                     $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_NOT_WPP_ACCOUNT_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10002) {
                     $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_SANDBOX_VS_LIVE_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10565) {
                     $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_WPP_BAD_COUNTRY_ERROR;
                     $_SESSION['payment'] = '';
                 }
                 if ($response['L_ERRORCODE0'] == 10736) {
                     $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_ADDR_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10752) {
                     $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_DECLINED;
                 }
                 $detailedMessage = $errorText == MODULE_PAYMENT_PAYPALWPP_TEXT_GEN_ERROR || $this->enableDebugging || $response['CURL_ERRORS'] != '' || $this->emailAlerts ? $errorNum . ' ' . urldecode(' ' . $response['L_SHORTMESSAGE0'] . ' - ' . $response['L_LONGMESSAGE0'] . (isset($response['RESPMSG']) ? ' ' . $response['RESPMSG'] : '') . ' ' . $response['CURL_ERRORS']) : '';
                 $detailedEmailMessage = $detailedMessage == '' ? '' : MODULE_PAYMENT_PAYPALWPP_TEXT_EMAIL_ERROR_MESSAGE . urldecode($response['L_ERRORCODE0'] . "\n" . $response['L_SHORTMESSAGE0'] . "\n" . $response['L_LONGMESSAGE0'] . $response['L_ERRORCODE1'] . "\n" . $response['L_SHORTMESSAGE1'] . "\n" . $response['L_LONGMESSAGE1'] . $response['L_ERRORCODE2'] . "\n" . $response['L_SHORTMESSAGE2'] . "\n" . $response['L_LONGMESSAGE2'] . ($response['CURL_ERRORS'] != '' ? "\n" . $response['CURL_ERRORS'] : '') . "\n\n" . 'Zen Cart message: ' . $errorText) . $errorInfo;
                 if ($detailedEmailMessage != '') {
                     zen_mail(STORE_NAME, STORE_OWNER_EMAIL_ADDRESS, MODULE_PAYMENT_PAYPALWPP_TEXT_EMAIL_ERROR_SUBJECT . ' (' . zen_uncomment($errorNum) . ')', zen_uncomment($detailedMessage), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, array('EMAIL_MESSAGE_HTML' => zen_uncomment($detailedMessage)), 'paymentalert');
                 }
                 $this->terminateEC($errorText . ' (' . $errorNum . ') ' . $detailedMessage, true);
                 return true;
             }
             break;
         case 'GetExpressCheckoutDetails':
             if ($basicError || $_SESSION['paypal_ec_token'] != urldecode($response['TOKEN'])) {
                 // if response indicates an error, send the customer back to checkout and display the error. Debug to store owner if active.
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ec_step2()', "In function: ec_step2()\r\n\r\nValue List:\r\n" . str_replace('&', "\r\n", urldecode($doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList)))) . "\r\n\r\nResponse:\r\n" . urldecode(print_r($response, true)));
                 }
                 $this->terminateEC(MODULE_PAYMENT_PAYPALWPP_TEXT_GEN_ERROR . ' (' . $response['L_ERRORCODE0'] . ' ' . urldecode($response['L_SHORTMESSAGE0'] . $response['RESULT']) . ')', true);
                 return true;
             }
             break;
         case 'DoExpressCheckoutPayment':
             if ($basicError || $_SESSION['paypal_ec_token'] != urldecode($response['TOKEN'])) {
                 // there's an error, so alert customer, and if debug is on, notify storeowner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - before_process() - EC', "In function: before_process() - Express Checkout\r\n\r\nValue List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 // if funding source problem occurred, must send back to re-select alternate funding source
                 if ($response['L_ERRORCODE0'] == 10422) {
                     $paypal_url = $this->getPayPalLoginServer();
                     zen_redirect($paypal_url . "?cmd=_express-checkout&token=" . $_SESSION['paypal_ec_token']);
                     die;
                 }
                 // some other error condition
                 $errorText = MODULE_PAYMENT_PAYPALWPP_INVALID_RESPONSE;
                 $errorNum = urldecode($response['L_ERRORCODE0']);
                 if ($response['L_ERRORCODE0'] == 10415) {
                     $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_ORDER_ALREADY_PLACED_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10417) {
                     $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_INSUFFICIENT_FUNDS_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10474) {
                     $errorText .= urldecode($response['L_LONGMESSAGE0']);
                 }
                 $detailedMessage = $errorText == MODULE_PAYMENT_PAYPALWPP_INVALID_RESPONSE || $this->enableDebugging || $response['CURL_ERRORS'] != '' || $this->emailAlerts ? $errorNum . ' ' . urldecode(' ' . $response['L_SHORTMESSAGE0'] . ' - ' . $response['L_LONGMESSAGE0'] . $response['RESULT'] . ' ' . $response['CURL_ERRORS']) : '';
                 $detailedEmailMessage = $detailedMessage == '' ? '' : MODULE_PAYMENT_PAYPALWPP_TEXT_EMAIL_ERROR_MESSAGE . urldecode($response['L_ERRORCODE0'] . "\n" . $response['L_SHORTMESSAGE0'] . "\n" . $response['L_LONGMESSAGE0'] . $response['L_ERRORCODE1'] . "\n" . $response['L_SHORTMESSAGE1'] . "\n" . $response['L_LONGMESSAGE1'] . $response['L_ERRORCODE2'] . "\n" . $response['L_SHORTMESSAGE2'] . "\n" . $response['L_LONGMESSAGE2'] . ($response['CURL_ERRORS'] != '' ? "\n" . $response['CURL_ERRORS'] : '') . "\n\n" . 'Zen Cart message: ' . $errorText) . $errorInfo;
                 if ($detailedEmailMessage != '') {
                     zen_mail(STORE_NAME, STORE_OWNER_EMAIL_ADDRESS, MODULE_PAYMENT_PAYPALWPP_TEXT_EMAIL_ERROR_SUBJECT . ' (' . zen_uncomment($errorNum) . ')', zen_uncomment($detailedMessage), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, array('EMAIL_MESSAGE_HTML' => zen_uncomment($detailedMessage)), 'paymentalert');
                 }
                 $this->terminateEC($detailedEmailMessage == '' ? $errorText . ' (' . urldecode($response['L_SHORTMESSAGE0'] . $response['RESULT']) . ') ' : $detailedMessage, true);
                 return true;
             }
             break;
         case 'DoRefund':
             if ($basicError || !isset($response['RESPMSG']) && !isset($response['REFUNDTRANSACTIONID'])) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_REFUND_ERROR;
                 if ($response['L_ERRORCODE0'] == 10009) {
                     $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_REFUNDFULL_ERROR;
                 }
                 if ($response['RESULT'] == 105 || isset($response['RESPMSG'])) {
                     $response['L_SHORTMESSAGE0'] = $response['RESULT'] . ' ' . $response['RESPMSG'];
                 }
                 if (urldecode($response['L_LONGMESSAGE0']) == 'This transaction has already been fully refunded') {
                     $response['L_SHORTMESSAGE0'] = urldecode($response['L_LONGMESSAGE0']);
                 }
                 if (urldecode($response['L_LONGMESSAGE0']) == 'Can not do a full refund after a partial refund') {
                     $response['L_SHORTMESSAGE0'] = urldecode($response['L_LONGMESSAGE0']);
                 }
                 if (urldecode($response['L_LONGMESSAGE0']) == 'The partial refund amount must be less than or equal to the remaining amount') {
                     $response['L_SHORTMESSAGE0'] = urldecode($response['L_LONGMESSAGE0']);
                 }
                 if (urldecode($response['L_LONGMESSAGE0']) == 'You can not refund this type of transaction') {
                     $response['L_SHORTMESSAGE0'] = urldecode($response['L_LONGMESSAGE0']);
                 }
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'DoAuthorization':
         case 'DoReauthorization':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_AUTH_ERROR;
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'DoCapture':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_CAPT_ERROR;
                 if ($response['RESULT'] == 111) {
                     $response['L_SHORTMESSAGE0'] = $response['RESULT'] . ' ' . $response['RESPMSG'];
                 }
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'DoVoid':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_VOID_ERROR;
                 if ($response['RESULT'] == 12) {
                     $response['L_SHORTMESSAGE0'] = $response['RESULT'] . ' ' . $response['RESPMSG'];
                 }
                 if ($response['RESULT'] == 108) {
                     $response['L_SHORTMESSAGE0'] = $response['RESULT'] . ' ' . $response['RESPMSG'];
                 }
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'GetTransactionDetails':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_GETDETAILS_ERROR;
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'TransactionSearch':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_TRANSSEARCH_ERROR;
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         default:
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALWPP_TEXT_GEN_API_ERROR;
                 $errorNum .= ' (' . urldecode($response['L_SHORTMESSAGE0'] . ' <!-- ' . $response['RESPMSG']) . ' -->) ' . $response['L_ERRORCODE0'];
                 $detailedMessage = $errorText == MODULE_PAYMENT_PAYPALWPP_TEXT_GEN_API_ERROR || $errorText == MODULE_PAYMENT_PAYPALWPP_TEXT_DECLINED || $this->enableDebugging || $response['CURL_ERRORS'] != '' || $this->emailAlerts ? urldecode(' ' . $response['L_SHORTMESSAGE0'] . ' - ' . $response['L_LONGMESSAGE0'] . ' ' . $response['CURL_ERRORS']) : '';
                 $detailedEmailMessage = $detailedMessage == '' ? '' : MODULE_PAYMENT_PAYPALWPP_TEXT_EMAIL_ERROR_MESSAGE . ' ' . $response['RESPMSG'] . urldecode($response['L_ERRORCODE0'] . "\n" . $response['L_SHORTMESSAGE0'] . "\n" . $response['L_LONGMESSAGE0'] . $response['L_ERRORCODE1'] . "\n" . $response['L_SHORTMESSAGE1'] . "\n" . $response['L_LONGMESSAGE1'] . $response['L_ERRORCODE2'] . "\n" . $response['L_SHORTMESSAGE2'] . "\n" . $response['L_LONGMESSAGE2'] . ($response['CURL_ERRORS'] != '' ? "\n" . $response['CURL_ERRORS'] : '') . "\n\n" . 'Zen Cart message: ' . $detailedMessage . "\n\n" . 'Transaction Response Details: ' . print_r($response, true) . "\n\n" . 'Transaction Submission: ' . urldecode($doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList), true)));
                 if ($detailedEmailMessage != '') {
                     zen_mail(STORE_NAME, STORE_OWNER_EMAIL_ADDRESS, MODULE_PAYMENT_PAYPALWPP_TEXT_EMAIL_ERROR_SUBJECT . ' (' . zen_uncomment($errorNum) . ')', zen_uncomment($detailedMessage), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, array('EMAIL_MESSAGE_HTML' => nl2br(zen_uncomment($detailedEmailMessage))), 'paymentalert');
                 }
                 $messageStack->add_session($errorText . $errorNum . $detailedMessage, 'error');
                 return true;
             }
             break;
     }
 }
コード例 #2
0
ファイル: paypaldp.php プロジェクト: bobjacobsen/EventTools
 /**
  * Error / exception handling
  */
 function _errorHandler($response, $operation = '', $ignore_codes = '')
 {
     global $messageStack, $doPayPal;
     $gateway_mode = isset($response['PNREF']) && $response['PNREF'] != '';
     $basicError = !$response || isset($response['RESULT']) && $response['RESULT'] != 0 || isset($response['ACK']) && !strstr($response['ACK'], 'Success') || !isset($response['RESULT']) && !isset($response['ACK']);
     $ignoreList = explode(',', str_replace(' ', '', $ignore_codes));
     foreach ($ignoreList as $key => $value) {
         if ($value != '' && $response['L_ERRORCODE0'] == $value) {
             $basicError = false;
         }
     }
     /** Handle FMF Scenarios **/
     if (in_array($operation, array('DoExpressCheckoutPayment', 'DoDirectPayment')) && $response['PAYMENTSTATUS'] == 'Pending' && $response['L_ERRORCODE0'] == 11610) {
         $this->fmfResponse = urldecode($response['L_SHORTMESSAGE0']);
         $this->fmfErrors = array();
         if ($response['ACK'] == 'SuccessWithWarning' && isset($response['L_FMFPENDINGID0'])) {
             for ($i = 0; $i < 20; $i++) {
                 $this->fmfErrors[] = array('key' => $response['L_FMFPENDINGID' . $i], 'status' => $response['L_FMFPENDINGID' . $i], 'desc' => $response['L_FMFPENDINGDESCRIPTION' . $i]);
             }
         }
         return sizeof($this->fmfErrors) > 0 ? $this->fmfErrors : FALSE;
     }
     //echo '<br />basicError='.$basicError.'<br />' . urldecode(print_r($response,true)); die('halted');
     if (!isset($response['L_SHORTMESSAGE0']) && isset($response['RESPMSG']) && $response['RESPMSG'] != '') {
         $response['L_SHORTMESSAGE0'] = $response['RESPMSG'];
     }
     $errorInfo = "\n\nProblem occurred while customer " . $_SESSION['customer_id'] . ' ' . $_SESSION['customer_first_name'] . ' ' . $_SESSION['customer_last_name'] . ' was attempting checkout with PayPal Website Payments Pro.';
     switch ($operation) {
         case 'DoDirectPayment':
             if ($basicError || isset($_SESSION['paypal_ec_token']) && isset($response['TOKEN']) && $_SESSION['paypal_ec_token'] != urldecode($response['TOKEN'])) {
                 // Error, so send the store owner a complete dump of the transaction.
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - before_process() - DP', "In function: before_process() - Direct Payment \r\nDid first contact attempt return error? " . ($error_occurred ? "Yes" : "No") . " \r\n\r\nValue List:\r\n" . str_replace('&', "\r\n", urldecode($doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList)))) . "\r\n\r\nResponse:\r\n" . urldecode(print_r($response, true)));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALDP_INVALID_RESPONSE;
                 $errorNum = urldecode($response['L_ERRORCODE0'] . ' ' . $response['RESULT'] . ' <!-- ' . $response['RESPMSG'] . ' -->');
                 if ($response['RESULT'] == 25) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_NOT_WPP_ACCOUNT_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10500 || $response['L_ERRORCODE0'] == 10501) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_NOT_US_WPP_ACCOUNT_ERROR;
                 }
                 if ($response['HOSTCODE'] == 10500 || $response['HOSTCODE'] == 10501) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_NOT_UKWPP_ACCOUNT_ERROR;
                 }
                 if ($response['HOSTCODE'] == 10558) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_CANNOT_USE_THIS_CURRENCY_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10002) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_SANDBOX_VS_LIVE_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10565) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_WPP_BAD_COUNTRY_ERROR;
                     $_SESSION['payment'] = '';
                 }
                 if ($response['L_ERRORCODE0'] == 10566) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_CARD_TYPE_NOT_SUPPORTED;
                 }
                 if ($response['L_ERRORCODE0'] == 10736) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_ADDR_ERROR;
                 }
                 if ($response['L_ERRORCODE0'] == 10752) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_DECLINED;
                     $errorNum = '10752';
                 }
                 if ($response['L_ERRORCODE0'] == 15012) {
                     // Mastercard CE agreement not signed between merchant and PayPal. Thus cannot accept mastercard.
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_CARD_TYPE_NOT_SUPPORTED;
                     $errorNum = '15012';
                 }
                 if ($response['L_ERRORCODE0'] == 15005) {
                     $errorText = 'Card rejected by the bank. Your IP address has been recorded.';
                     $errorNum = '15005';
                 }
                 if ($response['RESPMSG'] != '') {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_DECLINED . ' ' . $errorText;
                 }
                 $detailedMessage = $errorText == MODULE_PAYMENT_PAYPALDP_INVALID_RESPONSE || $errorText == MODULE_PAYMENT_PAYPALDP_TEXT_DECLINED || $this->enableDebugging || $response['CURL_ERRORS'] != '' || $this->emailAlerts ? (isset($response['RESULT']) && $response['RESULT'] != 0 ? MODULE_PAYMENT_PAYPALDP_CANNOT_BE_COMPLETED . ' (' . $errorNum . ')' : $errorNum) . ' ' . urldecode(' ' . $response['L_SHORTMESSAGE0'] . ' - ' . $response['L_LONGMESSAGE0'] . ' ' . $response['CURL_ERRORS']) : '';
                 $explain = "\n\nProblem occurred while customer #" . $_SESSION['customer_id'] . ' -- ' . $_SESSION['customer_first_name'] . ' ' . $_SESSION['customer_last_name'] . ' -- was attempting checkout.' . "\n";
                 $detailedEmailMessage = MODULE_PAYMENT_PAYPALDP_TEXT_EMAIL_ERROR_MESSAGE . urldecode($response['L_ERRORCODE0'] . ' ' . $response['RESPMSG'] . "\n" . $response['L_SHORTMESSAGE0'] . "\n" . $response['L_LONGMESSAGE0'] . $response['L_ERRORCODE1'] . "\n" . $response['L_SHORTMESSAGE1'] . "\n" . $response['L_LONGMESSAGE1'] . $response['L_ERRORCODE2'] . "\n" . $response['L_SHORTMESSAGE2'] . "\n" . $response['L_LONGMESSAGE2'] . ($response['CURL_ERRORS'] != '' ? "\n" . $response['CURL_ERRORS'] : '') . "\n\n" . 'Zen Cart message: ' . $detailedMessage . "\n\n" . $errorInfo . "\n\n" . 'Transaction Response Details: ' . print_r($response, true) . "\n\n" . 'Transaction Submission: ' . urldecode($doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList), true)));
                 $detailedEmailMessage .= $explain;
                 if (!isset($response['L_ERRORCODE0']) && isset($response['RESULT'])) {
                     $detailedEmailMessage .= "\n\n" . print_r($response, TRUE);
                 }
                 zen_mail(STORE_NAME, STORE_OWNER_EMAIL_ADDRESS, MODULE_PAYMENT_PAYPALDP_TEXT_EMAIL_ERROR_SUBJECT . ' (' . zen_uncomment($errorNum) . ')', zen_uncomment($detailedEmailMessage), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, array('EMAIL_MESSAGE_HTML' => nl2br(zen_uncomment($detailedEmailMessage))), 'paymentalert');
                 if ($response['L_ERRORCODE0'] == 15012) {
                     $detailedEmailMessage = '';
                 }
                 $this->terminateEC($detailedEmailMessage == '' ? $errorText . ' (' . $errorNum . ') ' : $detailedMessage, $gateway_mode ? true : false, FILENAME_CHECKOUT_PAYMENT);
                 return true;
             }
             break;
         case 'DoRefund':
             if ($basicError || !isset($response['RESPMSG']) && !isset($response['REFUNDTRANSACTIONID'])) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_REFUND_ERROR;
                 if ($response['L_ERRORCODE0'] == 10009) {
                     $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_REFUNDFULL_ERROR;
                 }
                 if ($response['RESULT'] == 105 || isset($response['RESPMSG'])) {
                     $response['L_SHORTMESSAGE0'] = $response['RESULT'] . ' ' . $response['RESPMSG'];
                 }
                 if (urldecode($response['L_LONGMESSAGE0']) == 'This transaction has already been fully refunded') {
                     $response['L_SHORTMESSAGE0'] = urldecode($response['L_LONGMESSAGE0']);
                 }
                 if (urldecode($response['L_LONGMESSAGE0']) == 'Can not do a full refund after a partial refund') {
                     $response['L_SHORTMESSAGE0'] = urldecode($response['L_LONGMESSAGE0']);
                 }
                 if (urldecode($response['L_LONGMESSAGE0']) == 'The partial refund amount must be less than or equal to the remaining amount') {
                     $response['L_SHORTMESSAGE0'] = urldecode($response['L_LONGMESSAGE0']);
                 }
                 if (urldecode($response['L_LONGMESSAGE0']) == 'You can not refund this type of transaction') {
                     $response['L_SHORTMESSAGE0'] = urldecode($response['L_LONGMESSAGE0']);
                 }
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'DoAuthorization':
         case 'DoReauthorization':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_AUTH_ERROR;
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'DoCapture':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_CAPT_ERROR;
                 if ($response['RESULT'] == 111) {
                     $response['L_SHORTMESSAGE0'] = $response['RESULT'] . ' ' . $response['RESPMSG'];
                 }
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'DoVoid':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_VOID_ERROR;
                 if ($response['RESULT'] == 12) {
                     $response['L_SHORTMESSAGE0'] = $response['RESULT'] . ' ' . $response['RESPMSG'];
                 }
                 if ($response['RESULT'] == 108) {
                     $response['L_SHORTMESSAGE0'] = $response['RESULT'] . ' ' . $response['RESPMSG'];
                 }
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'GetTransactionDetails':
             if ($basicError) {
                 if (isset($response['RESPMSG']) && $response['RESPMSG'] == 'Field format error: ORIGID missing') {
                     return FALSE;
                 }
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_GETDETAILS_ERROR;
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         case 'TransactionSearch':
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_TRANSSEARCH_ERROR;
                 $errorText .= ' (' . urldecode($response['L_SHORTMESSAGE0']) . ') ' . $response['L_ERRORCODE0'];
                 $messageStack->add_session($errorText, 'error');
                 return true;
             }
             break;
         default:
             if ($basicError) {
                 // if error, display error message. If debug options enabled, email dump to store owner
                 if ($this->enableDebugging) {
                     $this->_doDebug('PayPal Error Log - ' . $operation, "Value List:\r\n" . str_replace('&', "\r\n", $doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList))) . "\r\n\r\nResponse:\r\n" . print_r($response, true));
                 }
                 $errorText = MODULE_PAYMENT_PAYPALDP_TEXT_GEN_API_ERROR;
                 $errorNum .= ' (' . urldecode($response['L_SHORTMESSAGE0'] . ' <!-- ' . $response['RESPMSG']) . ' -->) ' . $response['L_ERRORCODE0'];
                 $detailedMessage = $errorText == MODULE_PAYMENT_PAYPALDP_TEXT_GEN_API_ERROR || $errorText == MODULE_PAYMENT_PAYPALDP_TEXT_DECLINED || $this->enableDebugging || $response['CURL_ERRORS'] != '' || $this->emailAlerts ? urldecode(' ' . $response['L_SHORTMESSAGE0'] . ' - ' . $response['L_LONGMESSAGE0'] . ' ' . $response['CURL_ERRORS']) : '';
                 $explain = "\n\nProblem occurred while customer #" . $_SESSION['customer_id'] . ' -- ' . $_SESSION['customer_first_name'] . ' ' . $_SESSION['customer_last_name'] . ' -- was attempting checkout.' . "\n";
                 $detailedEmailMessage = $detailedMessage == '' ? '' : MODULE_PAYMENT_PAYPALDP_TEXT_EMAIL_ERROR_MESSAGE . ' ' . $response['RESPMSG'] . urldecode($response['L_ERRORCODE0'] . "\n" . $response['L_SHORTMESSAGE0'] . "\n" . $response['L_LONGMESSAGE0'] . $response['L_ERRORCODE1'] . "\n" . $response['L_SHORTMESSAGE1'] . "\n" . $response['L_LONGMESSAGE1'] . $response['L_ERRORCODE2'] . "\n" . $response['L_SHORTMESSAGE2'] . "\n" . $response['L_LONGMESSAGE2'] . ($response['CURL_ERRORS'] != '' ? "\n" . $response['CURL_ERRORS'] : '') . "\n\n" . 'Zen Cart message: ' . $detailedMessage . "\n\n" . $errorInfo . "\n\n" . 'Transaction Response Details: ' . print_r($response, true) . "\n\n" . 'Transaction Submission: ' . urldecode($doPayPal->_sanitizeLog($doPayPal->_parseNameValueList($doPayPal->lastParamList), true)));
                 if ($detailedEmailMessage != '') {
                     $detailedEmailMessage .= $explain;
                 }
                 if ($detailedEmailMessage != '') {
                     zen_mail(STORE_NAME, STORE_OWNER_EMAIL_ADDRESS, MODULE_PAYMENT_PAYPALDP_TEXT_EMAIL_ERROR_SUBJECT . ' (' . zen_uncomment($errorNum) . ')', zen_uncomment($detailedMessage . $explain), STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, array('EMAIL_MESSAGE_HTML' => nl2br(zen_uncomment($detailedEmailMessage))), 'paymentalert');
                 }
                 $messageStack->add_session($errorText . $errorNum . $detailedMessage, 'error');
                 return true;
             }
             break;
     }
 }