/**
  * @param FinancialTransactionInterface $transaction
  * @return mixed
  */
 protected function findOrCreatePlan(FinancialTransactionInterface $transaction)
 {
     $data = $transaction->getExtendedData();
     if ($data->has('plan_id')) {
         return $data->get('plan_id');
     }
     $opts = $data->has('checkout_params') ? $data->get('checkout_params') : array();
     $opts['id'] = array_key_exists('id', $opts) ? $opts['id'] : '';
     $response = $this->client->retrievePlan($opts['id']);
     if (!$response->isSuccess()) {
         $opts['amount'] = $this->client->convertAmountToStripeFormat($transaction->getRequestedAmount());
         $opts['currency'] = $transaction->getPayment()->getPaymentInstruction()->getCurrency();
         $opts['interval'] = $this->getIntervalForStripe($transaction->getPayment()->getPaymentInstruction()->getBillingInterval());
         $opts['interval_count'] = $transaction->getPayment()->getPaymentInstruction()->getBillingFrequency();
         $response = $this->client->createPlan($opts);
     }
     $this->throwUnlessSuccessResponse($response, $transaction);
     $data->set('plan_id', $response->getResponse()->id);
     return $data->get('plan_id');
 }