Payum\Paypal\ProCheckout\Nvp\Action\CaptureAction::execute PHP Method

execute() public method

{@inheritDoc}
public execute ( $request )
    public function execute($request)
    {
        /** @var $request Capture */
        RequestNotSupportedException::assertSupports($this, $request);
        $model = new ArrayObject($request->getModel());
        if (is_numeric($model['RESULT'])) {
            return;
        }
        $cardFields = array('ACCT', 'CVV2', 'EXPDATE');
        if (false == $model->validateNotEmpty($cardFields, false)) {
            try {
                $obtainCreditCard = new ObtainCreditCard($request->getToken());
                $obtainCreditCard->setModel($request->getFirstModel());
                $obtainCreditCard->setModel($request->getModel());
                $this->gateway->execute($obtainCreditCard);
                $card = $obtainCreditCard->obtain();
                $model['EXPDATE'] = SensitiveValue::ensureSensitive($card->getExpireAt()->format('my'));
                $model['ACCT'] = SensitiveValue::ensureSensitive($card->getNumber());
                $model['CVV2'] = SensitiveValue::ensureSensitive($card->getSecurityCode());
            } 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.');
            }
        }
        $model->replace($this->api->doSale($model->toUnsafeArray()));
    }

Usage Example

Beispiel #1
0
 /**
  * @test
  */
 public function shouldCaptureWithObtainedCreditCard()
 {
     $gatewayMock = $this->createGatewayMock();
     $gatewayMock->expects($this->once())->method('execute')->with($this->isInstanceOf('Payum\\Core\\Request\\ObtainCreditCard'))->will($this->returnCallback(function (ObtainCreditCard $request) {
         $card = new CreditCard();
         $card->setNumber('1234567812345678');
         $card->setExpireAt(new \DateTime('2014-10-01'));
         $card->setHolder('John Doe');
         $card->setSecurityCode('123');
         $request->set($card);
     }));
     $result = array('FOO' => 'FOOVAL', 'BAR' => 'BARVAL');
     $apiMock = $this->createApiMock();
     $apiMock->expects($this->once())->method('doSale')->will($this->returnValue($result));
     $action = new CaptureAction();
     $action->setApi($apiMock);
     $action->setGateway($gatewayMock);
     $request = new Capture(array('AMOUNT' => 10));
     //guard
     $this->assertTrue($action->supports($request));
     $action->execute($request);
     $model = iterator_to_array($request->getModel());
     $this->assertArrayHasKey('AMOUNT', $model);
     $this->assertEquals(10, $model['AMOUNT']);
     $this->assertArrayHasKey('FOO', $model);
     $this->assertEquals('FOOVAL', $model['FOO']);
 }
All Usage Examples Of Payum\Paypal\ProCheckout\Nvp\Action\CaptureAction::execute