/** * 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; } }
/** * 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; } }