1<?php
2
3// File generated from our OpenAPI spec
4
5namespace Stripe\Service;
6
7class SubscriptionScheduleService extends \Stripe\Service\AbstractService
8{
9    /**
10     * Retrieves the list of your subscription schedules.
11     *
12     * @param null|array $params
13     * @param null|array|\Stripe\Util\RequestOptions $opts
14     *
15     * @throws \Stripe\Exception\ApiErrorException if the request fails
16     *
17     * @return \Stripe\Collection
18     */
19    public function all($params = null, $opts = null)
20    {
21        return $this->requestCollection('get', '/v1/subscription_schedules', $params, $opts);
22    }
23
24    /**
25     * Cancels a subscription schedule and its associated subscription immediately (if
26     * the subscription schedule has an active subscription). A subscription schedule
27     * can only be canceled if its status is <code>not_started</code> or
28     * <code>active</code>.
29     *
30     * @param string $id
31     * @param null|array $params
32     * @param null|array|\Stripe\Util\RequestOptions $opts
33     *
34     * @throws \Stripe\Exception\ApiErrorException if the request fails
35     *
36     * @return \Stripe\SubscriptionSchedule
37     */
38    public function cancel($id, $params = null, $opts = null)
39    {
40        return $this->request('post', $this->buildPath('/v1/subscription_schedules/%s/cancel', $id), $params, $opts);
41    }
42
43    /**
44     * Creates a new subscription schedule object. Each customer can have up to 500
45     * active or scheduled subscriptions.
46     *
47     * @param null|array $params
48     * @param null|array|\Stripe\Util\RequestOptions $opts
49     *
50     * @throws \Stripe\Exception\ApiErrorException if the request fails
51     *
52     * @return \Stripe\SubscriptionSchedule
53     */
54    public function create($params = null, $opts = null)
55    {
56        return $this->request('post', '/v1/subscription_schedules', $params, $opts);
57    }
58
59    /**
60     * Releases the subscription schedule immediately, which will stop scheduling of
61     * its phases, but leave any existing subscription in place. A schedule can only be
62     * released if its status is <code>not_started</code> or <code>active</code>. If
63     * the subscription schedule is currently associated with a subscription, releasing
64     * it will remove its <code>subscription</code> property and set the subscription’s
65     * ID to the <code>released_subscription</code> property.
66     *
67     * @param string $id
68     * @param null|array $params
69     * @param null|array|\Stripe\Util\RequestOptions $opts
70     *
71     * @throws \Stripe\Exception\ApiErrorException if the request fails
72     *
73     * @return \Stripe\SubscriptionSchedule
74     */
75    public function release($id, $params = null, $opts = null)
76    {
77        return $this->request('post', $this->buildPath('/v1/subscription_schedules/%s/release', $id), $params, $opts);
78    }
79
80    /**
81     * Retrieves the details of an existing subscription schedule. You only need to
82     * supply the unique subscription schedule identifier that was returned upon
83     * subscription schedule creation.
84     *
85     * @param string $id
86     * @param null|array $params
87     * @param null|array|\Stripe\Util\RequestOptions $opts
88     *
89     * @throws \Stripe\Exception\ApiErrorException if the request fails
90     *
91     * @return \Stripe\SubscriptionSchedule
92     */
93    public function retrieve($id, $params = null, $opts = null)
94    {
95        return $this->request('get', $this->buildPath('/v1/subscription_schedules/%s', $id), $params, $opts);
96    }
97
98    /**
99     * Updates an existing subscription schedule.
100     *
101     * @param string $id
102     * @param null|array $params
103     * @param null|array|\Stripe\Util\RequestOptions $opts
104     *
105     * @throws \Stripe\Exception\ApiErrorException if the request fails
106     *
107     * @return \Stripe\SubscriptionSchedule
108     */
109    public function update($id, $params = null, $opts = null)
110    {
111        return $this->request('post', $this->buildPath('/v1/subscription_schedules/%s', $id), $params, $opts);
112    }
113}
114