/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse * * @return void */ public function execute(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse) { $resultCheck = new ZeroPaymentResultCheckTransfer(); $resultCheck->setFkSalesOrder($checkoutResponse->getSaveOrder()->getIdSalesOrder()); $resultCheckResponse = $this->getFacade()->checkPaymentResult($resultCheck); if ($resultCheckResponse->getIsSuccess() === false) { $checkoutResponse->addError($this->createCheckoutErrorTransfer($resultCheckResponse)); } }
/** * @param \Generated\Shared\Transfer\PayolutionTransactionResponseTransfer $payolutionTransactionResponseTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @return void */ protected function checkForErrors(PayolutionTransactionResponseTransfer $payolutionTransactionResponseTransfer, CheckoutResponseTransfer $checkoutResponseTransfer) { if (PayolutionConstants::REASON_CODE_SUCCESS !== $payolutionTransactionResponseTransfer->getProcessingReasonCode() || PayolutionConstants::STATUS_CODE_SUCCESS !== $payolutionTransactionResponseTransfer->getProcessingStatusCode() || PayolutionConstants::PAYMENT_CODE_PRE_CHECK !== $payolutionTransactionResponseTransfer->getPaymentCode()) { $errorCode = (int) preg_replace('/[^\\d]+/', '', $payolutionTransactionResponseTransfer->getProcessingCode()); $error = new CheckoutErrorTransfer(); $error->setErrorCode($errorCode)->setMessage($payolutionTransactionResponseTransfer->getProcessingReturn()); $checkoutResponseTransfer->addError($error); } }
/** * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException * * @return \Orm\Zed\Payolution\Persistence\SpyPaymentPayolutionTransactionStatusLog */ protected function getTransactionStatusLog(CheckoutResponseTransfer $checkoutResponseTransfer) { $transactionStatusLogQuery = $this->getQueryContainer()->queryTransactionStatusLogBySalesOrderId($checkoutResponseTransfer->getSaveOrder()->getIdSalesOrder()); $transactionStatusLogEntity = $transactionStatusLogQuery->findOne(); if ($transactionStatusLogEntity === null) { throw new NotFoundHttpException('TransactionStatusLog entity could not be found'); } return $transactionStatusLogEntity; }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @return void */ public function validateCheckoutGrandTotal(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponseTransfer) { $totalsBefore = $quoteTransfer->getTotals()->getGrandTotal(); $this->stackExecutor->recalculate($quoteTransfer); $totalsAfter = $quoteTransfer->getTotals()->getGrandTotal(); if ($totalsBefore !== $totalsAfter) { $error = $this->createCheckoutErrorTransfer(); $error->setErrorCode(CheckoutConstants::ERROR_CODE_CART_AMOUNT_DIFFERENT)->setMessage('Checkout grand total changed.'); $checkoutResponseTransfer->addError($error); } }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse * * @return void */ public function checkCondition(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse) { $groupedItemQuantities = $this->groupItemsBySku($quoteTransfer->getItems()); foreach ($groupedItemQuantities as $sku => $quantity) { if (!$this->isProductSellable($sku, $quantity)) { $checkoutErrorTransfer = $this->createCheckoutErrorTransfer(); $checkoutErrorTransfer->setErrorCode(CheckoutConstants::ERROR_CODE_PRODUCT_UNAVAILABLE)->setMessage('product.unavailable'); $checkoutResponse->addError($checkoutErrorTransfer)->setIsSuccess(false); } } }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse * * @return void */ public function save(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse) { $saveOrderTransfer = $checkoutResponse->getSaveOrder(); foreach ($saveOrderTransfer->getOrderItems() as $itemTransfer) { foreach ($itemTransfer->getProductOptions() as $productOptionTransfer) { $salesOrderItemOptionEntity = $this->createSalesOrderItemOptionEntity(); $salesOrderItemOptionEntity->fromArray($productOptionTransfer->toArray()); $salesOrderItemOptionEntity->setFkSalesOrderItem($itemTransfer->getIdSalesOrderItem()); $salesOrderItemOptionEntity->save(); $productOptionTransfer->setIdSalesOrderItemOption($salesOrderItemOptionEntity->getIdSalesOrderItemOption()); } } }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @return void */ public function checkPreConditions(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponseTransfer) { if ($quoteTransfer->getCustomer() !== null && $quoteTransfer->getCustomer()->getIdCustomer() !== null) { return; } if ($quoteTransfer->getCustomer()->getIsGuest() === true) { return; } if ($this->customer->hasEmail($quoteTransfer->getCustomer()->getEmail())) { $checkoutErrorTransfer = $this->createCheckoutErrorTransfer(); $checkoutErrorTransfer->setErrorCode(CheckoutConstants::ERROR_CODE_CUSTOMER_ALREADY_REGISTERED)->setMessage('Email already taken'); $checkoutResponseTransfer->setIsSuccess(false)->addError($checkoutErrorTransfer); } }
/** * Test the saveOrderPayment() method of PayolutionFacade * * @return void */ public function testSaveOrderPayment() { $this->markTestSkipped('Payolution request is too slow'); $this->setBaseTestData(); $addressTransfer = (new AddressTransfer())->setCity('Berlin')->setZipCode('10623')->setAddress1('Straße des 17. Juni 135')->setFirstName('Jane')->setLastName('Doe')->setEmail('*****@*****.**')->setIso2Code('DE')->setSalutation(SpyCustomerTableMap::COL_SALUTATION_MR); $payolutionPaymentTransfer = new PayolutionPaymentTransfer(); $payolutionPaymentTransfer->setAccountBrand(ApiConstants::BRAND_INVOICE)->setClientIp('127.0.0.1')->setDateOfBirth('1970-01-02')->setGender(SpyCustomerTableMap::COL_GENDER_MALE)->setAddress($addressTransfer)->setAccountBrand(ApiConstants::BRAND_INVOICE)->setLanguageIso2Code('DE')->setCurrencyIso3Code('EUR')->setEmail($addressTransfer->getEmail()); // PayolutionCheckoutConnector-HydrateOrderPlugin emulation $quoteTransfer = new QuoteTransfer(); $paymentTransfer = new PaymentTransfer(); $paymentTransfer->setPayolution($payolutionPaymentTransfer); $quoteTransfer->setPayment($paymentTransfer); $checkoutResponseTransfer = new CheckoutResponseTransfer(); $saveOrderTransfer = new SaveOrderTransfer(); $saveOrderTransfer->setIdSalesOrder($this->orderEntity->getIdSalesOrder()); $checkoutResponseTransfer->setSaveOrder($saveOrderTransfer); $facade = $this->payolutionFacade; $facade->saveOrderPayment($quoteTransfer, $checkoutResponseTransfer); $paymentEntity = $this->orderEntity->getSpyPaymentPayolutions()->getFirst(); $this->assertInstanceOf(SpyPaymentPayolution::class, $paymentEntity); $this->assertEquals(ApiConstants::BRAND_INVOICE, $paymentEntity->getAccountBrand()); $this->assertEquals('127.0.0.1', $paymentEntity->getClientIp()); }
/** * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * @param \Generated\Shared\Transfer\ExpenseTransfer $expenseTransfer * @param \Orm\Zed\Sales\Persistence\SpySalesExpense $salesOrderExpenseEntity * * @return void */ protected function setCheckoutResponseExpenses(CheckoutResponseTransfer $checkoutResponseTransfer, ExpenseTransfer $expenseTransfer, SpySalesExpense $salesOrderExpenseEntity) { $orderExpense = clone $expenseTransfer; $orderExpense->setIdSalesExpense($salesOrderExpenseEntity->getIdSalesExpense()); $checkoutResponseTransfer->getSaveOrder()->addOrderExpense($orderExpense); }
/** * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @return void */ protected function setPostConditionErrorRoute(CheckoutResponseTransfer $checkoutResponseTransfer) { foreach ($checkoutResponseTransfer->getErrors() as $error) { if (isset($this->errorCodeToRouteMatching[$error->getErrorCode()])) { $this->postConditionErrorRoute = $this->errorCodeToRouteMatching[$error->getErrorCode()]; } } }
/** * @return \Generated\Shared\Transfer\CheckoutResponseTransfer */ protected function createBaseCheckoutResponse() { $checkoutResponseTransfer = new CheckoutResponseTransfer(); $checkoutResponseTransfer->setSaveOrder(new SaveOrderTransfer()); return $checkoutResponseTransfer; }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse * * @return \Generated\Shared\Transfer\CheckoutResponseTransfer */ public function postSaveHook(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse) { $apiLogsQuery = $this->queryContainer->getLastApiLogsByOrderId($quoteTransfer->getIdSalesOrder()); $apiLog = $apiLogsQuery->findOne(); if ($apiLog) { $redirectUrl = $apiLog->getRedirectUrl(); if ($redirectUrl !== null) { $checkoutResponse->setIsExternalRedirect(true); $checkoutResponse->setRedirectUrl($redirectUrl); } } return $checkoutResponse; }
/** * @return void */ public function testPostConditionChangeErrorRouteIfResponseFalseAndErrorCodeMatches() { $checkoutResponseTransfer = new CheckoutResponseTransfer(); $checkoutResponseTransfer->setIsSuccess(false); $checkoutErrorTransfer = new CheckoutErrorTransfer(); $checkoutErrorTransfer->setErrorCode(static::ERROR_CODE_123); $checkoutResponseTransfer->addError($checkoutErrorTransfer); $checkoutClientMock = $this->getCheckoutClientMock(); $checkoutClientMock->method('placeOrder')->willReturn($checkoutResponseTransfer); $abstractPlaceOrderStepMock = $this->getAbstractPlaceOrderStep($checkoutClientMock); $quoteTransfer = new QuoteTransfer(); $quoteTransfer->setOrderReference(self::ORDER_REFERENCE); $abstractPlaceOrderStepMock->execute($this->getRequest(), $quoteTransfer); $this->assertFalse($abstractPlaceOrderStepMock->postCondition($quoteTransfer)); $this->assertSame(self::ESCAPE_ROUTE_123, $abstractPlaceOrderStepMock->getPostConditionErrorRoute()); }
/** * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @return void */ protected function saveOrderExpenseDiscounts(CheckoutResponseTransfer $checkoutResponseTransfer) { $idSalesOrder = $checkoutResponseTransfer->getSaveOrder()->getIdSalesOrder(); $orderExpenses = $checkoutResponseTransfer->getSaveOrder()->getOrderExpenses(); foreach ($orderExpenses as $expenseTransfer) { foreach ($expenseTransfer->getCalculatedDiscounts() as $calculatedDiscountTransfer) { $salesDiscountEntity = $this->createSalesDiscountEntity($calculatedDiscountTransfer); $salesDiscountEntity->setFkSalesOrder($idSalesOrder); $salesDiscountEntity->setFkSalesExpense($expenseTransfer->getIdSalesExpense()); $this->saveDiscount($salesDiscountEntity, $calculatedDiscountTransfer); } } }
/** * @return \Generated\Shared\Transfer\CheckoutResponseTransfer */ private function getCheckoutResponseTransfer() { $checkoutResponseTransfer = new CheckoutResponseTransfer(); $checkoutResponseTransfer->setIsSuccess(true); $saveOrderTransfer = new SaveOrderTransfer(); $saveOrderTransfer->setIdSalesOrder(23); $checkoutResponseTransfer->setSaveOrder($saveOrderTransfer); return $checkoutResponseTransfer; }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @return void */ public function saveOrderPayment(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponseTransfer) { $paymentEntity = $this->savePaymentForOrder($quoteTransfer->getPayment()->getPayolution(), $checkoutResponseTransfer->getSaveOrder()->getIdSalesOrder()); $this->savePaymentForOrderItems($checkoutResponseTransfer->getSaveOrder()->getOrderItems(), $paymentEntity->getIdPaymentPayolution()); }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @return void */ public function checkCondition(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponseTransfer) { $checkoutResponseTransfer->fromArray($this->checkoutResponse->toArray(true), true); }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse * * @return void */ public function saveOrder(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse) { $checkoutResponse->fromArray($this->checkoutResponse->toArray(true), true); }
/** * @return void */ public function testSaveDiscountMustNotSaveSalesDiscountCodesIfUsedCodeCanNotBeFound() { $discountSaver = $this->getDiscountOrderSaverMock(['persistSalesDiscount', 'persistSalesDiscountCode', 'getDiscountVoucherEntityByCode']); $discountSaver->expects($this->once())->method('persistSalesDiscount'); $discountSaver->expects($this->never())->method('persistSalesDiscountCode'); $discountSaver->expects($this->once())->method('getDiscountVoucherEntityByCode')->will($this->returnValue(false)); $calculatedDiscountTransfer = new CalculatedDiscountTransfer(); $calculatedDiscountTransfer->setVoucherCode(self::USED_CODE_1); $quoteTransfer = new QuoteTransfer(); $orderItemTransfer = new ItemTransfer(); $orderItemTransfer->addCalculatedDiscount($calculatedDiscountTransfer); $quoteTransfer->addItem($orderItemTransfer); $checkoutResponseTransfer = new CheckoutResponseTransfer(); $saverOrderTransfer = new SaveOrderTransfer(); $saverOrderTransfer->setIdSalesOrder(self::ID_SALES_ORDER); $saverOrderTransfer->setOrderItems($quoteTransfer->getItems()); $checkoutResponseTransfer->setSaveOrder($saverOrderTransfer); $discountSaver->saveDiscounts($quoteTransfer, $checkoutResponseTransfer); }
/** * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponse * * @return void */ public function executeHook(QuoteTransfer $quoteTransfer, CheckoutResponseTransfer $checkoutResponse) { $checkoutResponse->fromArray($this->checkoutResponse->toArray(true), true); }
/** * @param \Generated\Shared\Transfer\CheckoutResponseTransfer $checkoutResponseTransfer * * @return \Generated\Shared\Transfer\SaveOrderTransfer */ protected function getSaveOrderTransfer(CheckoutResponseTransfer $checkoutResponseTransfer) { $saveOrderTransfer = $checkoutResponseTransfer->getSaveOrder(); if ($saveOrderTransfer === null) { $saveOrderTransfer = $this->createSaveOrderTransfer(); } return $saveOrderTransfer; }