/**
  * Charge a card
  *
  * @param \JMS\Payment\CoreBundle\Model\FinancialTransactionInterface $transaction
  * @param boolean $capture
  * @throws \JMS\Payment\CoreBundle\Plugin\Exception\FinancialException
  */
 protected function chargeCard(FinancialTransactionInterface $transaction, $capture = true)
 {
     $data = $transaction->getExtendedData();
     $opts = $data->has('checkout_params') ? $data->get('checkout_params') : array();
     $cardDetails = array('name' => $data->get('name'), 'number' => $data->get('number'), 'exp_month' => $data->get('exp_month'), 'exp_year' => $data->get('exp_year'), 'cvc' => $data->get('cvc'), 'address_line1' => $data->get('address_line1'), 'address_line2' => $data->get('address_line2'), 'address_city' => $data->get('address_city'), 'address_state' => $data->get('address_state'), 'address_country' => $data->get('address_country'), 'address_zip' => $data->get('address_zip'));
     $response = $this->client->chargeCard($transaction->getRequestedAmount(), $transaction->getPayment()->getPaymentInstruction()->getCurrency(), $opts['description'], $cardDetails, $capture);
     $this->throwUnlessSuccessResponse($response, $transaction);
     // complete the transaction
     $transaction->getExtendedData()->set('charge_id', $response->getResponse()->id);
     $transaction->setReferenceNumber($response->getResponse()->id);
     $transaction->setProcessedAmount($this->client->convertAmountFromStripeFormat($response->getResponse()->amount));
     $transaction->setResponseCode(PluginInterface::RESPONSE_CODE_SUCCESS);
     $transaction->setReasonCode(PluginInterface::REASON_CODE_SUCCESS);
 }