Skip to content

Commit 55e6aca

Browse files
Purge data on cc fail
1 parent 9696697 commit 55e6aca

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

CRM/Core/Payment/OmnipayMultiProcessor.php

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -908,18 +908,24 @@ public function doPreApproval(&$params) {
908908
}
909909
}
910910
}
911+
$this->gateway = NULL;
911912
unset($params['credit_card_number']);
912913
unset($params['cvv2']);
913914
return array(
914915
'pre_approval_parameters' => array('token' => $response->getTransactionReference())
915916
);
916917
}
917918
else {
919+
$this->purgeSensitiveDataFromSession();
920+
unset($params['credit_card_number']);
921+
unset($params['cvv2']);
918922
return $this->handleError('alert', 'failed processor transaction ' . $this->_paymentProcessor['payment_processor_type'], (array) $response, 9001, $response->getMessage());
919923
}
920-
} catch (\Exception $e) {
924+
}
925+
catch (\Exception $e) {
926+
$this->purgeSensitiveDataFromSession();
921927
// internal error, log exception and display a generic message to the customer
922-
return $this->handleError('error', 'unknown processor error ' . $this->_paymentProcessor['payment_processor_type'], array($e->getCode() => $e->getMessage()), $e->getCode(), 'Sorry, there was an error processing your payment. Please try again later.');
928+
$this->handleError('error', 'unknown processor error ' . $this->_paymentProcessor['payment_processor_type'], array($e->getCode() => $e->getMessage()), $e->getCode(), 'Sorry, there was an error processing your payment. Please try again later.');
923929
}
924930
}
925931

@@ -981,5 +987,32 @@ private function createGateway($id) {
981987
$this->setProcessorFields();
982988
}
983989

990+
/**
991+
* Remove sensitive data from the session before it is stored.
992+
*
993+
* @return array
994+
*/
995+
protected function purgeSensitiveDataFromSession() {
996+
foreach ($_SESSION as &$key) {
997+
if (isset($key['values']) && is_array($key['values'])) {
998+
foreach ($key['values'] as &$values) {
999+
foreach (array(
1000+
'credit_card_number',
1001+
'cvv2',
1002+
'credit_cate_type'
1003+
) as $fieldName) {
1004+
if (!empty($values[$fieldName])) {
1005+
$values[$fieldName] = '';
1006+
}
1007+
}
1008+
if (isset($values['credit_card_exp_date'])) {
1009+
$values['credit_card_exp_date'] = array('M' => '', 'Y' => '');
1010+
}
1011+
}
1012+
}
1013+
}
1014+
return array($key, $values);
1015+
}
1016+
9841017
}
9851018

CRM/Core/Payment/PaymentExtended.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,6 @@ protected function handleError($level, $message, $context, $errorCode = 9001, $u
277277
$this->gateway = NULL;
278278
$log = new CRM_Utils_SystemLogger();
279279
$log->log($level, $message, (array) $context);
280-
281-
$userMessage = $userMessage ? $userMessage : $message;
282-
CRM_Core_Session::setStatus($userMessage);
283280
throw new \Civi\Payment\Exception\PaymentProcessorException($userMessage);
284281
}
285282

0 commit comments

Comments
 (0)