/**
  * {@inheritDoc}
  * @see \Omnipay\Common\Message\MessageInterface::getData()
  * @throws \Omnipay\Common\Exception\InvalidRequestException - when the credit card information is missing
  * @throws \Omnipay\Common\Exception\InvalidCreditCardException - when the credit card information is invalid
  */
 public function getData()
 {
     //Checks if a card parameter is provided.
     //May throw \Omnipay\Common\Exception\InvalidRequestException
     $this->validate('card');
     // @codeCoverageIgnoreStart
     //Omnipay already makes sure that the card is either NULL or a valid \Omnipay\Common\CreditCard object.
     //This is just an extra defensive check.
     if (!$this->getCard() instanceof \Omnipay\Common\CreditCard) {
         throw new \Omnipay\Common\Exception\InvalidRequestException('Invalid credit card object.');
     }
     // @codeCoverageIgnoreEnd
     if (!$this->getTestMode()) {
         //May throw \Omnipay\Common\Exception\InvalidCreditCardException
         $this->getCard()->validate();
     }
     $data = array();
     $data['paymtCode'] = 'C20';
     $data['fncCode'] = '01';
     $data['cduserID'] = $this->generatedCardReference;
     $data = array_merge($data, \Omnipay\Econtext\Util\Helper::cardToApiParameters($this->getCard()));
     return $data;
 }
 /**
  * {@inheritDoc}
  * @see \Omnipay\Common\Message\MessageInterface::getData()
  * @throws \Omnipay\Common\Exception\InvalidRequestException - when either the cardReference or card parameter is missing
  */
 public function getData()
 {
     $this->validate('amount');
     $this->validate('transactionReference');
     $data = array();
     $data['paymtCode'] = 'C20';
     $data['orderID'] = $this->getTransactionReference();
     $data['ordAmount'] = $this->getParameter('amount');
     $data['ordAmountTax'] = $this->getParameter('amountTax') ?: 0;
     $data['itemName'] = $this->getDescription();
     if ($this->getCardReference()) {
         //Purchase using an already server-persisted card
         $data['fncCode'] = '10';
         $data['cduserID'] = $this->getCardReference();
         return $data;
     }
     if ($this->getCard() instanceof \Omnipay\Common\CreditCard) {
         //Purchase using an as-of-yet non-server-persisted card
         //Effectively, behind the scenes, the server will persist the card (whose `cardReference` we have prepared)
         //and would also execute the purchase.
         $data['fncCode'] = '22';
         //This is equivalent to code 01 (CreateCardMerchantRequest) + 10 (charge existing card, like above)
         $data['cduserID'] = $this->getGeneratedCardReference();
         $data = array_merge($data, \Omnipay\Econtext\Util\Helper::cardToApiParameters($this->getCard()));
         //No idea why this is a required argument in this case and not for fncCode=10 (CreateCardMerchantRequest).
         $data['cd3secFlg'] = 0;
         return $data;
     }
     throw new \Omnipay\Common\Exception\InvalidRequestException('A `cardReference` or a `card` key needs to be provided.');
 }