/** * @param $token * @param $amount * @param $subscriptionName * @param $clientId * @param string $currency * @param string $interval * @param null $paymentId * * @return bool|SubscriptionPaymentResult */ public function createSubscription($token, $amount, $subscriptionName, $clientId, $currency = 'EUR', $paymentId = null, $interval = '1 month', $trial = '1 week') { if (!$paymentId) { $payment = new \Paymill\Models\Request\Payment(); $payment->setToken($token)->setClient($clientId); try { $response = $this->request->create($payment); } catch (\Paymill\Services\PaymillException $e) { s($e->getResponseCode()); s($e->getStatusCode()); s($e->getErrorMessage()); return false; } $paymentId = $response->getId(); } $subscription = new \Paymill\Models\Request\Subscription(); $subscription->setClient($clientId); $subscription->setAmount($amount * 100); $subscription->setCurrency($currency); $subscription->setInterval($interval); $subscription->setPayment($paymentId); $subscription->setName($subscriptionName); $subscription->setPeriodOfValidity('10 YEAR'); // $subscription->setStartAt(strtotime(gmdate('Y-m-d 00:00:00', strtotime('+1 day')))); $subscription->setStartAt(time() + 3600); // $subscription->setStartAt(time() + strtotime($trial)); // trial mode try { /** @var Subscription $response */ $response = $this->request->create($subscription); } catch (\Paymill\Services\PaymillException $e) { s($e->getResponseCode()); s($e->getStatusCode()); s($e->getErrorMessage()); return false; } return new SubscriptionPaymentResult(['subscription_id' => $response->getId(), 'payment_id' => $response->getPayment()->getId()]); }