/** * @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())); }
/** * 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; }
/** * 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; }