/**
  * @param FinancialTransactionInterface $transaction
  * @return mixed
  */
 protected function findOrCreateCardId(FinancialTransactionInterface $transaction)
 {
     $data = $transaction->getExtendedData();
     if ($data->has('charge_id')) {
         return $data->get('charge_id');
     }
     $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->createChargeToken($cardDetails);
     $this->throwUnlessSuccessResponse($response, $transaction);
     $data->set('charge_id', $response->getResponse()->id);
     return $data->get('charge_id');
 }