/**
  * @covers oePayPalOrderRefundAction::process
  * @covers oePayPalOrderRefundActionHandler::getPayPalResponse
  * @covers oePayPalOrderRefundActionHandler::getPayPalRequest
  * @covers oePayPalOrderRefundActionData::getAmount
  * @covers oePayPalOrderRefundActionData::getType
  */
 public function testActionRefund()
 {
     $aRequestParams = array('refund_amount' => '10', 'refund_type' => 'Complete', 'transaction_id' => 'capturedTransaction');
     $aResponseParams = array('REFUNDTRANSACTIONID' => 'TransactionId', 'REFUNDSTATUS' => 'Pending', 'GROSSREFUNDAMT' => '9.01', 'CURRENCYCODE' => 'EUR');
     $oCapturedPayment = new oePayPalOrderPayment();
     $oCapturedPayment->setOrderId('testOrderId');
     $oCapturedPayment->setTransactionId('capturedTransaction');
     $oCapturedPayment->save();
     $oAction = $this->_createAction('refund', 'testOrderId', $aRequestParams, $aResponseParams);
     $oAction->process();
     $oOrder = $this->_getOrder('testOrderId');
     $this->assertEquals('9.01', $oOrder->getRefundedAmount());
     $aPaymentList = $oOrder->getPaymentList()->getArray();
     $this->assertEquals(2, count($aPaymentList));
     $oPayment = array_shift($aPaymentList);
     $this->assertEquals('refund', $oPayment->getAction());
     $this->assertEquals('testOrderId', $oPayment->getOrderId());
     $this->assertEquals('9.01', $oPayment->getAmount());
     $this->assertEquals('Pending', $oPayment->getStatus());
     $this->assertEquals('EUR', $oPayment->getCurrency());
     $oCapturedPayment = array_shift($aPaymentList);
     $this->assertEquals('9.01', $oCapturedPayment->getRefundedAmount());
     $oPayment->delete();
     $oCapturedPayment->delete();
     $oOrder->delete();
 }
 /**
  * Test loading of payment by transaction id
  */
 public function testGetPaymentBeingRefunded_LoadedByTransactionId_TransactionIdSet()
 {
     $sTransactionId = 'test_transId';
     $oPayment = new oePayPalOrderPayment();
     $oPayment->setTransactionId($sTransactionId);
     $oPayment->setOrderId('_testOrderId');
     $oPayment->save();
     $aParams = array('transaction_id' => $sTransactionId);
     $oRequest = $this->_createStub('oePayPalRequest', array('getPost' => $aParams));
     $oOrder = $this->_getOrder();
     $oActionData = new oePayPalOrderRefundActionData($oRequest, $oOrder);
     $oPayment = $oActionData->getPaymentBeingRefunded();
     $this->assertEquals($sTransactionId, $oPayment->getTransactionId());
 }
 /**
  * Handling of IPN data that has not yet a paypal order payment
  * entry in shop database.
  * Checks if information from IPN is relevant for Shop. That is the case
  * if the related PayPal parent transaction can be found in table oepaypal_orderpayments.
  *
  * If data is relevant, we need to
  * - create paypal order payment, store it in database and return it.
  * - if it is a refund, update the parent transaction's refunded amount
  * - update authorization status (can be Pending, In Progress, Completed)
  *
  * @param oePayPalOrderPayment $requestOrderPayment
  *
  * @return oePayPalOrderPayment|null
  */
 public function handleOrderPayment($requestOrderPayment)
 {
     $return = null;
     $authId = $this->getRequest()->getRequestParameter(self::PAYPAL_IPN_AUTH_ID);
     $transactionEntity = $this->getRequest()->getRequestParameter(self::PAYPAL_IPN_TRANSACTION_ENTITY);
     $parentTransactionId = $this->getRequest()->getRequestParameter(self::PAYPAL_IPN_PARENT_TRANSACTION_ID);
     $orderPaymentAuthorization = $this->_loadOrderPayment($authId);
     $orderPaymentParent = $this->_loadOrderPayment($parentTransactionId);
     $orderId = $orderPaymentParent->getOrderId();
     if (self::HANDLE_TRANSACTION_ENTITY == $transactionEntity && $orderId) {
         $requestOrderPayment->setOrderId($orderId);
         $requestOrderPayment->save();
         $requestOrderPayment = $this->addRequestPaymentComment($requestOrderPayment);
         if (oePayPalIPNRequestPaymentSetter::REFUND_ACTION == $requestOrderPayment->getAction()) {
             $this->updateParentTransactionRefundAmount($orderPaymentParent, $requestOrderPayment->getAmount());
         }
         if (oePayPalIPNRequestPaymentSetter::AUTHORIZATION_ACTION == $orderPaymentAuthorization->getAction() && $orderId == $orderPaymentAuthorization->getOrderId()) {
             $this->updateOrderPaymentAuthorizationStatus($orderPaymentAuthorization);
         }
         $return = $requestOrderPayment;
     }
     return $return;
 }
 /**
  * Test case add comment to payment
  */
 public function testAddComment_NoDateGiven()
 {
     $oOrderPayment = new oePayPalOrderPayment();
     $oOrderPayment->setOrderId('123');
     $oOrderPayment->save();
     $this->assertEquals(0, count($oOrderPayment->getCommentList()), 'No comments - default value empty array.');
     $oComment = new oePayPalOrderPaymentComment();
     $oComment->setComment('comment');
     $oOrderPayment->addComment($oComment);
     $this->assertEquals(1, count($oOrderPayment->getCommentList()));
 }
Ejemplo n.º 5
0
 /**
  * Returns not yet captured (remaining) order sum.
  *
  * @param oePayPalOrderPayment $oPayment order payment
  *
  * @return oePayPalOrderPayment
  */
 public function addPayment(oePayPalOrderPayment $oPayment)
 {
     //order payment info
     if ($this->getOrderId()) {
         $oPayment->setOrderId($this->getOrderId());
         $oPayment->save();
     }
     $this->load($this->getOrderId());
     return $oPayment;
 }
 /**
  * Wrapper to create order payment.
  *
  * @param string $sTransactionId     transaction id.
  * @param bool   $blValid            if payment should be marked as not valid.
  * @param string $sValidationMessage validation message
  *
  * @return oePayPalOrderPayment
  */
 protected function _prepareOrderPayment($sTransactionId, $blValid = true, $sValidationMessage = '')
 {
     $oOrderPayment = new oePayPalOrderPayment();
     $oOrderPayment->setPaymentId('__a24das5das45');
     $oOrderPayment->setOrderId('_sOrderId');
     $oOrderPayment->setTransactionId($sTransactionId);
     if (!$blValid) {
         $oOrderPayment->setIsValid(false);
     }
     if ($sValidationMessage) {
         $sDate = date('Y-m-d H:i:s', oxRegistry::get("oxUtilsDate")->getTime());
         $oOrderPayment->addComment($sDate, $sValidationMessage);
     }
     return $oOrderPayment;
 }
 /**
  * Prepare OrderPayment object.
  *
  * @return oePayPalOrderPayment
  */
 protected function getOrderPayment()
 {
     oePayPalEvents::addOrderPaymentsTable();
     oePayPalEvents::addOrderTable();
     $oOrderPayment = new oePayPalOrderPayment();
     $oOrderPayment->setTransactionId('asdadsd45a4sd5a4sd54a5');
     $oOrderPayment->setOrderId('order');
     return $oOrderPayment;
 }
 /**
  * Test case for oePayPalOrderPayment::hasPendingPayment()
  * Checks if list has pending payments
  *
  * @return null
  */
 public function testAddPayment()
 {
     $oOrderPaymentList = new oePayPalOrderPaymentList();
     $oOrderPaymentList->load("order");
     $this->assertEquals(0, count($oOrderPaymentList));
     $oOrderPayment = new oePayPalOrderPayment();
     $oOrderPayment->setOrderId("order");
     $oOrderPayment->save();
     $oOrderPaymentList = new oePayPalOrderPaymentList();
     $oOrderPaymentList->load("order");
     $this->assertEquals(1, count($oOrderPaymentList));
     $oOrderPayment = new oePayPalOrderPayment();
     $oOrderPayment->setDate('2013-01-12');
     $oOrderPayment->setAction('Pending');
     $oOrderPaymentList->addPayment($oOrderPayment);
     $oOrderPaymentList = new oePayPalOrderPaymentList();
     $oOrderPaymentList->load("order");
     $this->assertEquals(2, count($oOrderPaymentList));
 }
 /**
  * Create order payment with some transaction id and same order id as order in _prepareOrder().
  *
  * @param string $sOrderId order id.
  *
  * @return oePayPalOrderPayment
  */
 protected function _prepareOrderPayment($sOrderId)
 {
     $oOrderPayment = new oePayPalOrderPayment();
     $oOrderPayment->setTransactionId('_asdadsd45a4sd5a4sd54a5');
     $oOrderPayment->setOrderId($sOrderId);
     return $oOrderPayment;
 }
Ejemplo n.º 10
0
 /**
  * IPN request might be for a transaction that does not yet exist in the shop database.
  * In this case we have to
  * - create payment
  * - update parent transaction in case of refund
  * - update authorization status (can be Pending, In Progress, Completed)
  *
  * In some cases we need to create an PayPal order payment from IPN request.
  *
  * @param oePayPalOrderPayment $requestOrderPayment
  *
  * @return oePayPalOrderPayment|null
  */
 protected function handleOrderPayment($requestOrderPayment)
 {
     $return = null;
     $request = $this->getRequest();
     $authId = $request->getRequestParameter(self::PAYPAL_IPN_AUTH_ID);
     $authStatus = $request->getRequestParameter(self::PAYPAL_IPN_AUTH_STATUS);
     $parentTransactionId = $request->getRequestParameter(self::PAYPAL_IPN_PARENT_TRANSACTION_ID);
     $transactionEntity = $request->getRequestParameter(self::PAYPAL_IPN_TRANSACTION_ENTITY);
     if (self::HANDLE_TRANSACTION_ENTITY != $transactionEntity) {
         return $return;
     }
     //search for the parent transaction
     $orderPaymentParent = $this->_loadOrderPayment($parentTransactionId);
     if ($orderPaymentParent->getOrderId()) {
         $requestOrderPayment->setOrderId($orderPaymentParent->getOrderId());
         $requestOrderPayment->save();
         //need an
         $requestPaymentSetter = $this->getOrderPaymentSetter();
         $requestPaymentSetter->setRequest($this->getRequest());
         $requestOrderPayment = $requestPaymentSetter->addRequestPaymentComment($requestOrderPayment);
         $this->updateOrderPaymentAuthorizationStatus($authId, $authStatus, $orderPaymentParent->getOrderId());
         $this->updateParentTransaction($orderPaymentParent, $requestOrderPayment);
         $return = $requestOrderPayment;
     }
     return $return;
 }