/** * @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'); }