Passed
Push — main ( 19313d...a29eaf )
by Dan
01:56 queued 22s
created

BaseRequest::getRecurringExpiry()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Omnipay\WindcaveHpp\Message;
4
5
use Omnipay\Common\Message\AbstractRequest;
6
use Omnipay\Common\Exception\InvalidRequestException;
7
8
abstract class BaseRequest extends AbstractRequest
9
{
10
    const ENDPOINT_TEST = 'https://uat.windcave.com/api/v1';
11
    const ENDPOINT_LIVE = 'https://sec.windcave.com/api/v1';
12
13
    // API Credentials
14
    public function setApiUsername($value)
15
    {
16
        return $this->setParameter('apiUsername', $value);
17
    }
18
19
    public function getApiUsername()
20
    {
21
        return $this->getParameter('apiUsername');
22
    }
23
24
    public function setApiKey($value)
25
    {
26
        return $this->setParameter('apiKey', $value);
27
    }
28
29
    public function getApiKey()
30
    {
31
        return $this->getParameter('apiKey');
32
    }
33
34
    protected function getAuthorization()
35
    {
36
        return base64_encode($this->getApiUsername() . ':' . $this->getApiKey());
37
    }
38
39
    // Merchant Reference
40
    public function setMerchantReference($value)
41
    {
42
        return $this->setParameter('merchantReference', $value);
43
    }
44
45
    public function getMerchantReference()
46
    {
47
        return $this->getParameter('merchantReference');
48
    }
49
50
    public function setType($value)
51
    {
52
        return $this->setParameter('type', $value);
53
    }
54
55
    public function getType()
56
    {
57
        return $this->getParameter('type') ?? 'purchase';
58
    }
59
60
    public function setLanguage($value)
61
    {
62
        return $this->setParameter('language', $value);
63
    }
64
65
    public function getLanguage()
66
    {
67
        return $this->getParameter('language') ?? 'en';
68
    }
69
70
    /**
71
     * @param $list
72
     * Possible methods: ['card', 'account2account', 'alipay', 'applepay', 'googlepay', 'paypal', 'interac', 'unionpay', 'oxipay', 'visacheckout', 'wechat']
73
     *
74
     * @return PurchaseRequest
75
     */
76
    public function setPaymentMethods($list)
77
    {
78
        $options = [
79
            'card', 'account2account', 'alipay', 'applepay',
80
            'googlepay', 'paypal', 'interac', 'unionpay',
81
            'oxipay', 'visacheckout', 'wechat'
82
        ];
83
84
        foreach ( $list as $method ) {
85
            if ( !in_array($method, $options) ) {
86
                throw new InvalidRequestException("Unknown payment method: {$method}");
87
            }
88
        }
89
90
        return $this->setParameter('paymentMethods', $list);
91
    }
92
93
    public function getPaymentMethods()
94
    {
95
        return $this->getParameter('paymentMethods');
96
    }
97
98
    public function setCardTypes($list)
99
    {
100
        return $this->setParameter('cardTypes', $list);
101
    }
102
103
    public function getCardTypes()
104
    {
105
        return $this->getParameter('cardTypes');
106
    }
107
108
    public function setExpiresAt($value)
109
    {
110
        return $this->setParameter('expiresAt', $value);
111
    }
112
113
    public function getExpiresAt()
114
    {
115
        return $this->getParameter('expiresAt');
116
    }
117
118
    public function setDeclineUrl($url)
119
    {
120
        return $this->setParameter('declineUrl', $url);
121
    }
122
123
    public function getDeclineUrl()
124
    {
125
        return $this->getParameter('declineUrl');
126
    }
127
128
    public function setStoreCard($value)
129
    {
130
        return $this->setParameter('storeCard', $value);
131
    }
132
133
    public function getStoreCard()
134
    {
135
        return $this->getParameter('storeCard');
136
    }
137
138
    public function setStoredCardIndicator($value)
139
    {
140
        $options = [
141
            'single', 'recurringfixed', 'recurringvariable', 'installment',
142
            'recurringnoexpiry', 'recurringinitial', 'installmentinitial', 'credentialonfileinitial',
143
            'unscheduledcredentialonfileinitial', 'credentialonfile', 'unscheduledcredentialonfile', 'incremental',
144
            'resubmission', 'reauthorisation', 'delayedcharges', 'noshow'
145
        ];
146
147
        if ( ! in_array($value, $options) ) {
148
            throw new InvalidRequestException("Invalid option '{$value}' set for StoredCardIndicator.");
149
        }
150
151
        return $this->setParameter('storedCardIndicator', $value);
152
    }
153
154
    public function getStoredCardIndicator()
155
    {
156
        return $this->getParameter('storedCardIndicator');
157
    }
158
159
    public function setMetadata($data)
160
    {
161
        return $this->setParameter('metaData', $data);
162
    }
163
164
    public function getMetadata()
165
    {
166
        return $this->getParameter('metaData');
167
    }
168
169
170
    public function setRecurringFrequency($value)
171
    {
172
        $options = [
173
            'daily', 'weekly', 'every2weeks', 'every4weeks',
174
            'monthly', 'monthly28th', 'monthlylastcalendarday',
175
            'monthlysecondlastcalendarday', 'monthlythirdlastcalendarday',
176
            'twomonthly', 'threemonthly', 'fourmonthly', 'sixmonthly', 'annually'
177
        ];
178
179
        if ( ! in_array($value, $options) ) {
180
            throw new InvalidRequestException("Invalid option '{$value}' set for RecurringFrequency.");
181
        }
182
183
        return $this->setParameter('recurringFrequency', $value);
184
    }
185
186
    public function getRecurringFrequency()
187
    {
188
        return $this->getParameter('recurringFrequency');
189
    }
190
191
    public function setRecurringExpiry($value)
192
    {
193
        // For scenarios where no expiry/end date is established i.e.,
194
        // subscription payments, the merchant web application should use "9999-12-31" as the value.
195
196
        return $this->setParameter('recurringExpiry', $value);
197
    }
198
199
    public function getRecurringExpiry()
200
    {
201
        return $this->getParameter('recurringExpiry');
202
    }
203
204
    // Endpoint selection based on test mode
205
    protected function getEndpoint($path = '')
206
    {
207
        $base = $this->getTestMode() ? self::ENDPOINT_TEST : self::ENDPOINT_LIVE;
208
        return $base . '/' . $path;
209
    }
210
}