/** * {@inheritDoc} * * @param ActivateReservation $request */ public function execute($request) { RequestNotSupportedException::assertSupports($this, $request); $details = ArrayObject::ensureArrayObject($request->getModel()); $klarna = $this->getKlarna(); try { $this->payment->execute(new PopulateKlarnaFromDetails($details, $klarna)); $result = $klarna->activateReservation( $details['pno'], $details['rno'], $details['gender'], $details['ocr'], $details['activate_reservation_flags'] ?: \KlarnaFlags::NO_FLAG ); $details['risk_status'] = $result[0]; $details['invoice_number'] = $result[1]; } catch (\KlarnaException $e) { $this->populateDetailsWithError($details, $e, $request); } }
/** * {@inheritDoc} */ public function execute($request) { if (!$this->supports($request)) { throw RequestNotSupportedException::createActionNotSupported($this, $request); } $model = ArrayObject::ensureArrayObject($request->getModel()); if ($model['_status']) { return; } if (false == $model->validateNotEmpty(array('card'), false)) { try { $creditCardRequest = new ObtainCreditCardRequest(); $this->payment->execute($creditCardRequest); $card = $creditCardRequest->obtain(); $firstName = $lastName = ''; list($firstName, $lastName) = explode(' ', $card->getHolder(), 1); $model['card'] = new SensitiveValue(array('number' => $card->getNumber(), 'cvv' => $card->getSecurityCode(), 'expiryMonth' => $card->getExpireAt()->format('m'), 'expiryYear' => $card->getExpireAt()->format('y'), 'firstName' => $firstName, 'lastName' => $lastName)); } catch (RequestNotSupportedException $e) { throw new LogicException('Credit card details has to be set explicitly or there has to be an action that supports ObtainCreditCardRequest request.'); } } $response = $this->gateway->purchase($model->toUnsafeArray())->send(); $model['_reference'] = $response->getTransactionReference(); $model['_status'] = $response->isSuccessful() ? 'success' : 'failed'; $model['_status_code'] = $response->getCode(); $model['_status_message'] = $response->isSuccessful() ? '' : $response->getMessage(); }
/** * {@inheritDoc} * * @param Capture $request */ public function execute($request) { if (!$this->supports($request)) { throw RequestNotSupportedException::createActionNotSupported($this, $request); } $details = ArrayObject::ensureArrayObject($request->getModel()); if ($details['_status']) { return; } if (false == $details['clientIp']) { $this->payment->execute($httpRequest = new GetHttpRequest); $details['clientIp'] = $httpRequest->clientIp; } if (isset($details['_completeCaptureRequired'])) { $response = $this->gateway->completePurchase($details->toUnsafeArray())->send(); unset($details['_completeCaptureRequired']); } else { if (false == $details->validateNotEmpty(array('card'), false) && false == $details->validateNotEmpty(array('cardReference'), false)) { try { $this->payment->execute($creditCardRequest = new ObtainCreditCard); $card = $creditCardRequest->obtain(); $details['card'] = new SensitiveValue(array( 'number' => $card->getNumber(), 'cvv' => $card->getSecurityCode(), 'expiryMonth' => $card->getExpireAt()->format('m'), 'expiryYear' => $card->getExpireAt()->format('y'), 'firstName' => $card->getHolder(), 'lastName' => '', )); } catch (RequestNotSupportedException $e) { throw new LogicException('Credit card details has to be set explicitly or there has to be an action that supports ObtainCreditCard request.'); } } $response = $this->gateway->purchase($details->toUnsafeArray())->send(); } if ($response->isRedirect()) { $details['_completeCaptureRequired'] = 1; if ($response->getRedirectMethod() == 'POST') { throw new HttpPostRedirect($response->getRedirectUrl(), $response->getRedirectData()); } else { throw new HttpRedirect($response->getRedirectUrl()); } } $details['_reference'] = $response->getTransactionReference(); $details['_status'] = $response->isSuccessful() ? 'captured' : 'failed'; $details['_status_code'] = $response->getCode(); $details['_status_message'] = $response->isSuccessful() ? '' : $response->getMessage(); }
function it_should_do_status_subrequest_with_payment_details_as_model(PayumPaymentInterface $payumPayment, GetStatusInterface $statusRequest, PaymentInterface $payment) { $details = array('foo' => 'foo', 'bar' => 'baz'); $statusRequest->getModel()->willReturn($payment); $statusRequest->setModel($details)->shouldBeCalled(); $statusRequest->setModel($payment)->shouldBeCalled(); $payment->getDetails()->willReturn($details); $payumPayment->execute($statusRequest)->shouldBeCalled(); $this->setPayment($payumPayment); $this->execute($statusRequest); }
/** * {@inheritDoc} */ public function execute($request) { if (!$this->supports($request)) { throw RequestNotSupportedException::createActionNotSupported($this, $request); } $details = ArrayObject::ensureArrayObject($request->getModel()); if ($details['_status']) { return; } if (false == $details['returnUrl'] && $request->getToken()) { $details['returnUrl'] = $request->getToken()->getTargetUrl(); } if (false == $details['cancelUrl'] && $request->getToken()) { $details['cancelUrl'] = $request->getToken()->getTargetUrl(); } if (false == $details['clientIp']) { $this->payment->execute($httpRequest = new GetHttpRequest); $details['clientIp'] = $httpRequest->clientIp; } if (isset($details['_completeCaptureRequired'])) { $response = $this->gateway->completePurchase($details->toUnsafeArray())->send(); unset($details['_completeCaptureRequired']); } else { $response = $this->gateway->purchase($details->toUnsafeArray())->send(); } if ($response->isRedirect()) { $details['_completeCaptureRequired'] = 1; if ($response->getRedirectMethod() == 'POST') { throw new HttpPostRedirect($response->getRedirectUrl(), $response->getRedirectData()); } else { throw new HttpRedirect($response->getRedirectUrl()); } } $details['_reference'] = $response->getTransactionReference(); $details['_status'] = $response->isSuccessful() ? 'captured' : 'failed'; $details['_status_code'] = $response->getCode(); $details['_status_message'] = $response->isSuccessful() ? '' : $response->getMessage(); }
/** * {@inheritDoc} * * @param CreditPart $request */ public function execute($request) { RequestNotSupportedException::assertSupports($this, $request); $details = ArrayObject::ensureArrayObject($request->getModel()); $details->validateNotEmpty(array('invoice_number')); $klarna = $this->getKlarna(); try { $this->payment->execute(new PopulateKlarnaFromDetails($details, $klarna)); $details['refund_invoice_number'] = $klarna->creditPart($details['invoice_number']); } catch (\KlarnaException $e) { $this->populateDetailsWithError($details, $e, $request); } }
function it_must_not_dispatch_pre_and_post_payment_state_changed_if_state_not_changed(Request $request, $factory, ProcessContextInterface $context, PaymentInterface $payment, EventDispatcherInterface $eventDispatcher, StateMachineInterface $sm) { $context->getRequest()->willReturn($request); $order = new Order(); $paymentModel = new Payment(); $paymentModel->setState(Payment::STATE_COMPLETED); $paymentModel->setOrder($order); $order->addPayment($paymentModel); $payment->execute(Argument::type('Sylius\\Bundle\\PayumBundle\\Payum\\Request\\GetStatus'))->will(function ($args) use($order, $paymentModel) { $args[0]->markCaptured(); $args[0]->setModel($paymentModel); }); $factory->get($paymentModel, PaymentTransitions::GRAPH)->willReturn($sm); $sm->getTransitionToState('completed')->willReturn(null); $sm->apply(PaymentTransitions::SYLIUS_COMPLETE)->shouldNotBeCalled(); $eventDispatcher->dispatch(SyliusCheckoutEvents::PURCHASE_INITIALIZE, Argument::type('Symfony\\Component\\EventDispatcher\\GenericEvent'))->shouldBeCalled(); $eventDispatcher->dispatch(SyliusCheckoutEvents::PURCHASE_PRE_COMPLETE, Argument::type('Symfony\\Component\\EventDispatcher\\GenericEvent'))->shouldBeCalled(); $eventDispatcher->dispatch(SyliusCheckoutEvents::PURCHASE_COMPLETE, Argument::type('Sylius\\Bundle\\CoreBundle\\Event\\PurchaseCompleteEvent'))->shouldBeCalled(); $this->forwardAction($context)->shouldReturnAnInstanceOf('Sylius\\Bundle\\FlowBundle\\Process\\Step\\ActionResult'); }