1<?php
2
3// File generated from our OpenAPI spec
4
5namespace Stripe\Service;
6
7class CouponService extends \Stripe\Service\AbstractService
8{
9    /**
10     * Returns a list of your coupons.
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/coupons', $params, $opts);
22    }
23
24    /**
25     * You can create coupons easily via the <a
26     * href="https://dashboard.stripe.com/coupons">coupon management</a> page of the
27     * Stripe dashboard. Coupon creation is also accessible via the API if you need to
28     * create coupons on the fly.
29     *
30     * A coupon has either a <code>percent_off</code> or an <code>amount_off</code> and
31     * <code>currency</code>. If you set an <code>amount_off</code>, that amount will
32     * be subtracted from any invoice’s subtotal. For example, an invoice with a
33     * subtotal of <currency>100</currency> will have a final total of
34     * <currency>0</currency> if a coupon with an <code>amount_off</code> of
35     * <amount>200</amount> is applied to it and an invoice with a subtotal of
36     * <currency>300</currency> will have a final total of <currency>100</currency> if
37     * a coupon with an <code>amount_off</code> of <amount>200</amount> is applied to
38     * it.
39     *
40     * @param null|array $params
41     * @param null|array|\Stripe\Util\RequestOptions $opts
42     *
43     * @throws \Stripe\Exception\ApiErrorException if the request fails
44     *
45     * @return \Stripe\Coupon
46     */
47    public function create($params = null, $opts = null)
48    {
49        return $this->request('post', '/v1/coupons', $params, $opts);
50    }
51
52    /**
53     * You can delete coupons via the <a
54     * href="https://dashboard.stripe.com/coupons">coupon management</a> page of the
55     * Stripe dashboard. However, deleting a coupon does not affect any customers who
56     * have already applied the coupon; it means that new customers can’t redeem the
57     * coupon. You can also delete coupons via the API.
58     *
59     * @param string $id
60     * @param null|array $params
61     * @param null|array|\Stripe\Util\RequestOptions $opts
62     *
63     * @throws \Stripe\Exception\ApiErrorException if the request fails
64     *
65     * @return \Stripe\Coupon
66     */
67    public function delete($id, $params = null, $opts = null)
68    {
69        return $this->request('delete', $this->buildPath('/v1/coupons/%s', $id), $params, $opts);
70    }
71
72    /**
73     * Retrieves the coupon with the given ID.
74     *
75     * @param string $id
76     * @param null|array $params
77     * @param null|array|\Stripe\Util\RequestOptions $opts
78     *
79     * @throws \Stripe\Exception\ApiErrorException if the request fails
80     *
81     * @return \Stripe\Coupon
82     */
83    public function retrieve($id, $params = null, $opts = null)
84    {
85        return $this->request('get', $this->buildPath('/v1/coupons/%s', $id), $params, $opts);
86    }
87
88    /**
89     * Updates the metadata of a coupon. Other coupon details (currency, duration,
90     * amount_off) are, by design, not editable.
91     *
92     * @param string $id
93     * @param null|array $params
94     * @param null|array|\Stripe\Util\RequestOptions $opts
95     *
96     * @throws \Stripe\Exception\ApiErrorException if the request fails
97     *
98     * @return \Stripe\Coupon
99     */
100    public function update($id, $params = null, $opts = null)
101    {
102        return $this->request('post', $this->buildPath('/v1/coupons/%s', $id), $params, $opts);
103    }
104}
105