コード例 #1
0
 /**
  * {@inheritDoc}
  */
 public function getType()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getType', array());
     return parent::getType();
 }
コード例 #2
0
ファイル: PaypalIPN.php プロジェクト: kewaunited/xcart
 /**
  * Process callback
  *
  * @param \XLite\Model\Payment\Transaction    $transaction Callback-owner transaction
  * @param \XLite\Model\Payment\Base\Processor $processor   Payment processor object
  *
  * @return void
  */
 public function processCallbackIPN($transaction, $processor)
 {
     $request = \XLite\Core\Request::getInstance();
     \XLite\Module\CDev\Paypal\Main::addLog('processCallbackIPN()', $request->getData());
     $status = $transaction::STATUS_FAILED;
     switch ($this->getIPNVerification()) {
         case self::IPN_DECLINED:
             $status = $transaction::STATUS_FAILED;
             $processor->markCallbackRequestAsInvalid(static::t('IPN verification failed'));
             break;
         case self::IPN_REQUEST_ERROR:
             $status = $transaction::STATUS_PENDING;
             $processor->markCallbackRequestAsInvalid(static::t('IPN HTTP error'));
             break;
         case self::IPN_VERIFIED:
             $backendTransaction = null;
             if (!empty($request->parent_txn_id)) {
                 // Received IPN is related to the backend transaction
                 $ppref = \XLite\Core\Database::getRepo('XLite\\Model\\Payment\\BackendTransactionData')->findOneBy(array('name' => 'PPREF', 'value' => $request->txn_id));
                 if ($ppref) {
                     $backendTransaction = $ppref->getTransaction();
                 }
             }
             switch ($request->payment_status) {
                 case 'Completed':
                 case 'Canceled_Reversal':
                 case 'Processed':
                     $status = $transaction::STATUS_SUCCESS;
                     if (\XLite\Model\Payment\BackendTransaction::TRAN_TYPE_AUTH == $transaction->getType()) {
                         if (!isset($backendTransaction)) {
                             $backendTransaction = $this->registerBackendTransaction($transaction, \XLite\Model\Payment\BackendTransaction::TRAN_TYPE_CAPTURE);
                         }
                         $backendTransactionStatus = $transaction::STATUS_SUCCESS;
                     }
                     break;
                 case 'Pending':
                     if ('authorization' == $request->pending_reason && \XLite\Model\Payment\BackendTransaction::TRAN_TYPE_AUTH == $transaction->getType()) {
                         $status = $transaction::STATUS_SUCCESS;
                         if (isset($backendTransaction)) {
                             $backendTransactionStatus = $transaction::STATUS_SUCCESS;
                         }
                     } else {
                         $status = $transaction::STATUS_PENDING;
                     }
                     break;
                 case 'Expired':
                     if (\XLite\Model\Payment\BackendTransaction::TRAN_TYPE_AUTH == $transaction->getType()) {
                         $status = $transaction::STATUS_FAILED;
                         if (isset($backendTransaction)) {
                             $backendTransactionStatus = $transaction::STATUS_FAILED;
                         }
                     }
                     break;
                 case 'Voided':
                     if (\XLite\Model\Payment\BackendTransaction::TRAN_TYPE_AUTH == $transaction->getType()) {
                         $status = $transaction::STATUS_VOID;
                     }
                     if (!isset($backendTransaction)) {
                         $backendTransaction = $this->registerBackendTransaction($transaction, \XLite\Model\Payment\BackendTransaction::TRAN_TYPE_VOID);
                     }
                     $backendTransactionStatus = $transaction::STATUS_SUCCESS;
                     break;
                 case 'Denied':
                 case 'Reversed':
                     $status = $transaction::STATUS_FAILED;
                     break;
                 case 'Failed':
                     if (isset($backendTransaction)) {
                         $backendTransactionStatus = $transaction::STATUS_FAILED;
                     }
                     break;
                 case 'Refunded':
                     if (!isset($backendTransaction)) {
                         $backendTransaction = $this->registerBackendTransaction($transaction, \XLite\Model\Payment\BackendTransaction::TRAN_TYPE_REFUND);
                     }
                     $backendTransactionStatus = $transaction::STATUS_SUCCESS;
                     $status = $transaction::STATUS_FAILED;
                     break;
                 default:
                     // No default actions
             }
         default:
             // No default actions
     }
     if ($transaction->getStatus() != $status) {
         $transaction->setStatus($status);
     }
     if (isset($backendTransactionStatus)) {
         if ($backendTransaction->getStatus() != $backendTransactionStatus) {
             $backendTransaction->setStatus($backendTransactionStatus);
         }
         $processor->updateInitialBackendTransaction($transaction, $status);
     } elseif (!empty($request->parent_txn_id)) {
         \XLite\Core\OrderHistory::getInstance()->registerTransaction($transaction->getOrder()->getOrderNumber(), sprintf('IPN received [method: %s, amount: %s, payment status: %s]', $transaction->getPaymentMethod()->getName(), $request->transaction_entity, $request->mc_gross, $request->payment_status), $this->getRequestData(), 'Note: received IPN does not relate to any backend transaction registered with the order. It is possible if you update payment directly on PayPal site or if your customer or PayPal updated the payment.');
     }
 }