/** * {@inheritDoc} */ public function execute($request) { /** @var $request Capture */ if (false == $this->supports($request)) { throw RequestNotSupportedException::createActionNotSupported($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 { $this->payment->execute($obtainCreditCard = new ObtainCreditCard()); $card = $obtainCreditCard->obtain(); $model['EXPDATE'] = new SensitiveValue($card->getExpireAt()->format('my')); $model['ACCT'] = $card->getNumber(); $model['CVV2'] = $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.'); } } $buzzRequest = new Request(); $buzzRequest->setFields($model->toUnsafeArray()); $response = $this->api->doPayment($buzzRequest); $model->replace($response); }
/** * @param Request $request */ protected function addOptions(Request $request) { $request->setField('USER', $this->options['username']); $request->setField('PWD', $this->options['password']); $request->setField('PARTNER', $this->options['partner']); $request->setField('VENDOR', $this->options['vendor']); $request->setField('TENDER', $this->options['tender']); $request->setField('TRXTYPE', $this->options['trxtype']); }