/** * Map payment information from IPN to payment object * Returns true if there were changes in information * * @param Mage_Payment_Model_Info $payment * @return bool */ protected function _importPaymentInformation() { $payment = $this->_order->getPayment(); $was = $payment->getAdditionalInformation(); // collect basic information $from = array(); foreach (array(Ebcomm_PaypalMx_Model_Info::PAYER_ID, 'payer_email' => Ebcomm_PaypalMx_Model_Info::PAYER_EMAIL, Ebcomm_PaypalMx_Model_Info::PAYER_STATUS, Ebcomm_PaypalMx_Model_Info::ADDRESS_STATUS, Ebcomm_PaypalMx_Model_Info::PROTECTION_EL, Ebcomm_PaypalMx_Model_Info::PAYMENT_STATUS, Ebcomm_PaypalMx_Model_Info::PENDING_REASON) as $privateKey => $publicKey) { if (is_int($privateKey)) { $privateKey = $publicKey; } $value = $this->getRequestData($privateKey); if ($value) { $from[$publicKey] = $value; } } if (isset($from['payment_status'])) { $from['payment_status'] = $this->_filterPaymentStatus($this->getRequestData('payment_status')); } // collect fraud filters $fraudFilters = array(); for ($i = 1; $value = $this->getRequestData("fraud_management_pending_filters_{$i}"); $i++) { $fraudFilters[] = $value; } if ($fraudFilters) { $from[Ebcomm_PaypalMx_Model_Info::FRAUD_FILTERS] = $fraudFilters; } $this->_info->importToPayment($from, $payment); /** * Detect pending payment, frauds * TODO: implement logic in one place * @see Ebcomm_PaypalMx_Model_Pro::importPaymentInfo() */ if ($this->_info->isPaymentReviewRequired($payment)) { $payment->setIsTransactionPending(true); if ($fraudFilters) { $payment->setIsFraudDetected(true); } } if ($this->_info->isPaymentSuccessful($payment)) { $payment->setIsTransactionApproved(true); } elseif ($this->_info->isPaymentFailed($payment)) { $payment->setIsTransactionDenied(true); } return $was != $payment->getAdditionalInformation(); }
/** * * @param Mage_Sales_Model_Order_Payment $payment * @return bool */ public function canReviewPayment(Mage_Payment_Model_Info $payment) { return Ebcomm_PaypalMx_Model_Info::isPaymentReviewRequired($payment); }