I'm surprised this hasn't been resolved yet. It's a widespread issue with a module that comes with Zen Cart.
Anyways, I've debugged further and found that in paypaldp.php if the error code is 15005, then the function terminateEC will have a blank value for the $error_msg parameter on line 1758.
This is coming from line 1853:
$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']) : '';
Likely while the Zen Cart developers were testing this, they had enableDebugging true so this worked every time. But with it disabled, all the other conditions are failing. The reason they are failing is because $errorText is getting reassigned above and so it will never match the MODULE_PAYMENT_PAYPALDP_INVALID_RESPONSE or MODULE_PAYMENT_PAYPALDP_TEXT_DECLINED definitions.
So, bandaid solution is to enable debugging or email alerts. But ultimately this needs to be fixed for those who do not want to receive an email every time a customer's credit card declines.


Reply With Quote

