/** * {@inheritDoc} * * @param $request Authorize */ public function execute($request) { RequestNotSupportedException::assertSupports($this, $request); /** @var $payment Payment */ $payment = $request->getModel(); $this->gateway->execute($status = new GetHumanStatus($payment)); if ($status->isNew()) { $this->gateway->execute(new ObtainMissingDetailsRequest($payment, $request->getToken())); try { $this->gateway->execute($convert = new Convert($payment, 'array', $request->getToken())); $payment->setDetails($convert->getResult()); } catch (RequestNotSupportedException $e) { $payumPayment = new PayumPayment(); $payumPayment->setNumber($payment->getNumber()); $payumPayment->setTotalAmount($payment->getTotalAmount()); $payumPayment->setCurrencyCode($payment->getCurrencyCode()); $payumPayment->setClientEmail($payment->getPayer()->getEmail()); $payumPayment->setClientId($payment->getPayer()->getId() ?: $payment->getPayer()->getEmail()); $payumPayment->setDescription($payment->getDescription() ?: sprintf('Payment %s', $payment->getNumber())); $payumPayment->setCreditCard($payment->getCreditCard()); $payumPayment->setDetails($payment->getDetails()); $this->gateway->execute($convert = new Convert($payumPayment, 'array', $request->getToken())); $payment->setDetails($convert->getResult()); } } $details = ArrayObject::ensureArrayObject($payment->getDetails()); try { $request->setModel($details); $this->gateway->execute($request); } finally { $payment->setDetails((array) $details); } }
/** * @test */ public function shouldCorrectlyConvertCreditCard() { $creditCard = new CreditCard(); $creditCard->setNumber('4111111111111111'); $creditCard->setExpireAt(new \DateTime('2018-05-12')); $creditCard->setSecurityCode(123); $creditCard->setHolder('John Doe'); $order = new Payment(); $order->setCreditCard($creditCard); $action = new ConvertPaymentAction(); $action->execute($convert = new Convert($order, 'array')); $details = $convert->getResult(); $this->assertNotEmpty($details); $this->assertArrayHasKey('card', $details); $this->assertInstanceOf('Payum\\Core\\Security\\SensitiveValue', $details['card']); $card = $details['card']->peek(); $this->assertInternalType('array', $card); $this->assertArrayHasKey('number', $card); $this->assertEquals('4111111111111111', $card['number']); $this->assertArrayHasKey('exp_month', $card); $this->assertEquals('05', $card['exp_month']); $this->assertArrayHasKey('exp_year', $card); $this->assertEquals('2018', $card['exp_year']); $this->assertArrayHasKey('cvc', $card); $this->assertEquals('123', $card['cvc']); }
/** * @test */ public function shouldAllowGetCreditCardPreviouslySet() { $order = new Payment(); $creditCardMock = $this->getMock(CreditCardInterface::class); $order->setCreditCard($creditCardMock); $this->assertSame($creditCardMock, $order->getCreditCard()); }
/** * @test */ public function shouldCorrectlyConvertPaymentWithCreditCardToDetailsArray() { $gatewayMock = $this->getMock('Payum\\Core\\GatewayInterface'); $gatewayMock->expects($this->once())->method('execute')->with($this->isInstanceOf('Payum\\Core\\Request\\GetCurrency'))->willReturnCallback(function (GetCurrency $request) { $request->name = 'US Dollar'; $request->alpha3 = 'USD'; $request->numeric = 123; $request->exp = 2; $request->country = 'US'; }); $creditCard = new CreditCard(); $creditCard->setNumber('4444333322221111'); $creditCard->setHolder('John Doe'); $creditCard->setSecurityCode('322'); $creditCard->setExpireAt(new \DateTime('2015-11-12')); $payment = new Payment(); $payment->setNumber('theNumber'); $payment->setCurrencyCode('USD'); $payment->setTotalAmount(123); $payment->setDescription('the description'); $payment->setClientId('theClientId'); $payment->setClientEmail('theClientEmail'); $payment->setCreditCard($creditCard); $action = new ConvertPaymentAction(); $action->setGateway($gatewayMock); $action->execute($convert = new Convert($payment, 'array')); $details = $convert->getResult(); $this->assertNotEmpty($details); $this->assertArrayHasKey('card', $details); $this->assertInstanceOf(SensitiveValue::class, $details['card']); $this->assertEquals(array('number' => '4444333322221111', 'cvv' => '322', 'expiryMonth' => '11', 'expiryYear' => '15', 'firstName' => 'John Doe', 'lastName' => ''), $details['card']->peek()); }
/** * @test */ public function shouldAllowGetCreditCardPreviouslySet() { $order = new Payment(); $creditCardMock = $this->getMock('Payum\\Core\\Model\\CreditCardInterface'); $order->setCreditCard($creditCardMock); $this->assertSame($creditCardMock, $order->getCreditCard()); }
/** * @test */ public function shouldCorrectlyConvertCreditCardToken() { $creditCard = new CreditCard(); $creditCard->setToken('theCustomerId'); $order = new Payment(); $order->setCreditCard($creditCard); $action = new ConvertPaymentAction(); $action->execute($convert = new Convert($order, 'array')); $details = $convert->getResult(); $this->assertNotEmpty($details); $this->assertArrayHasKey('customer', $details); $this->assertEquals('theCustomerId', $details['customer']); }