Passed
Push — dev ( bdb0f9...ebb00e )
by Abu Salam
02:10
created

SmsGateway::setResponse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
3
namespace AbuSalam;
4
5
use AbuSalam\Contracts\SmsGatewayContract;
6
7
/**
8
 * SMS Gateway Implementation
9
 */
10
class SmsGateway implements SmsGatewayContract
11
{
12
    protected $recipients;
13
14
    protected $contents;
15
16
    protected $gateway;
17
18
    protected $apiEndpoint;
19
20
    protected $username;
21
22
    protected $senderid;
23
24
    protected $templateid;
25
26
    protected $securekey;
27
28
    protected $tag;
29
30
    protected $payload;
31
32
    protected $response;
33
34
    public function __construct()
35
    {
36
        return $this->setGateway()
37
            ->setApiEndpoint()
38
            ->setUsername()
39
            ->setSenderid()
40
            ->setSecurekey();
41
    }
42
43
    public function sendSms()
44
    {
45
        $post = curl_init();
46
        //curl_setopt($post, CURLOPT_SSLVERSION, 5); // uncomment for systems supporting TLSv1.1 only
47
        //curl_setopt($post, CURLOPT_SSLVERSION, 6); // use for systems supporting TLSv1.2 or comment the line
48
        curl_setopt($post, CURLOPT_SSL_VERIFYHOST, 0);
49
        curl_setopt($post, CURLOPT_SSL_VERIFYPEER, false);
50
        curl_setopt($post, CURLOPT_URL, $this->getApiEndpoint());
51
        curl_setopt($post, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $this->getSecurekey()));
52
        curl_setopt($post, CURLOPT_POSTFIELDS, http_build_query($this->getPayload()));
53
        curl_setopt($post, CURLOPT_RETURNTRANSFER, 1);
54
        $resp['data'] = curl_exec($post);
0 ignored issues
show
Comprehensibility Best Practice introduced by
$resp was never initialized. Although not strictly required by PHP, it is generally a good practice to add $resp = array(); before regardless.
Loading history...
55
        if($resp['data'] === false) {
56
            $resp['error'] =  curl_error($post);
57
        }
58
        curl_close($post);
59
        $this->setResponse($resp);
60
        return $this->getResponse();
61
    }
62
63
    protected function hashPayload()
64
    {
65
        $payload = $this->buildConfigParams();
66
        if (array_key_exists('key', $payload)) {
67
            $payload['key'] = hash('sha512', $this->getUsername().$this->getSenderid().$this->getContents().$this->getSecurekey());
68
        }
69
        //dump("data to hash => ".$this->getUsername().$this->getSenderid().$this->getContents().$this->getSecurekey());
70
        $this->setPayload($payload);
71
        return $this;
72
    }
73
74
75
    protected function buildConfigParams()
76
    {
77
        $configParams = array_combine(
78
            config('smsgateway.' . config('smsgateway.default') . '.apiParams'),
0 ignored issues
show
Bug introduced by
The function config was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

78
            /** @scrutinizer ignore-call */ 
79
            config('smsgateway.' . config('smsgateway.default') . '.apiParams'),
Loading history...
79
            config('smsgateway.' . config('smsgateway.default') . '.apiValues')
80
        );
81
82
        $form_params = [
83
            config('smsgateway.' . config('smsgateway.default') . '.apiMobileNoParam') => $this->getRecipients(),
84
            config('smsgateway.' . config('smsgateway.default') . '.apiSmsParam') => $this->getContents(),
85
            config('smsgateway.' . config('smsgateway.default') . '.apiTemplateIdParam') => $this->getTemplateId(),
86
            config('smsgateway.' . config('smsgateway.default') . '.apiTagParam') => $this->getTag(),
87
            "smsservicetype" =>"singlemsg",
88
        ];
89
        $data = array_merge($form_params, $configParams);
90
91
        //dump($data);
92
        return $data;
93
    }
94
95
    /**
96
     * Gets the Message for the SMS
97
     * @param  string
98
     * @return self
99
     */
100
    public function withSms($contents = '')
101
    {
102
        $this->setContents($contents);
103
        $this->hashPayload();
104
        return $this;
105
    }
106
107
    /**
108
     * @return mixed
109
     */
110
    public function getTemplateId()
111
    {
112
        return $this->templateid;
113
    }
114
115
    /**
116
     * @param mixed $templateId
117
     *
118
     * @return self
119
     */
120
    public function withTemplateId($templateId = '')
121
    {
122
        $this->templateid = $templateId == ''
123
            ? config('smsgateway.' . $this->getGateway() . '.apiValues.apiTemplateId')
0 ignored issues
show
Bug introduced by
The function config was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

123
            ? /** @scrutinizer ignore-call */ config('smsgateway.' . $this->getGateway() . '.apiValues.apiTemplateId')
Loading history...
124
            : trim($templateId);
125
        //dump(config('smsgateway.' . $this->getGateway() . '.apiValues.apiTemplateId'));
126
        return $this;
127
    }
128
129
    /**
130
     * Gets the Tag for the SMS
131
     * @param  mixed
132
     * @return self
133
     */
134
    public function withTag($tag)
135
    {
136
        $this->setTag($tag);
137
        return $this;
138
    }
139
140
    public function toRecipient($mobile = '')
141
    {
142
        return $this->setRecipients($mobile);
143
    }
144
145
    public function fromGateway($gateway = '')
146
    {
147
        return $this->setGateway($gateway);
148
    }
149
150
    /**
151
     * @return mixed
152
     */
153
    protected function getRecipients()
154
    {
155
        return $this->recipients;
156
    }
157
158
    /**
159
     * @param mixed $recipients
160
     *
161
     * @return self
162
     */
163
    protected function setRecipients($recipients)
164
    {
165
        $this->recipients = $recipients;
166
167
        return $this;
168
    }
169
170
    /**
171
     * @return mixed
172
     */
173
    protected function getContents()
174
    {
175
        return $this->contents;
176
    }
177
178
    /**
179
     * @param mixed $contents
180
     *
181
     * @return self
182
     */
183
    protected function setContents($contents)
184
    {
185
        $this->contents = trim($contents);
186
187
        return $this;
188
    }
189
190
    /**
191
     * @return mixed
192
     */
193
    protected function getGateway()
194
    {
195
        return $this->gateway;
196
    }
197
198
    /**
199
     * @param mixed $gateway
200
     *
201
     * @return self
202
     */
203
    protected function setGateway($gateway = '')
204
    {
205
        $this->gateway = $gateway == ''
206
                ? config('smsgateway.default')
0 ignored issues
show
Bug introduced by
The function config was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

206
                ? /** @scrutinizer ignore-call */ config('smsgateway.default')
Loading history...
207
                : trim($gateway);
208
        return $this;
209
    }
210
211
    /**
212
     * @return mixed
213
     */
214
    protected function getUsername()
215
    {
216
        return $this->username;
217
    }
218
219
    /**
220
     * @param mixed $username
221
     *
222
     * @return self
223
     */
224
    protected function setUsername($username = '')
225
    {
226
        $this->username = $username == ''
227
            ? config('smsgateway.' . $this->getGateway() . '.apiValues.apiUser')
0 ignored issues
show
Bug introduced by
The function config was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

227
            ? /** @scrutinizer ignore-call */ config('smsgateway.' . $this->getGateway() . '.apiValues.apiUser')
Loading history...
228
            : trim($username);
229
        //dump(config('smsgateway.' . $this->getGateway() . '.apiValues.apiUser'));
230
        return $this;
231
    }
232
233
    /**
234
     * @return mixed
235
     */
236
    protected function getSenderid()
237
    {
238
        return $this->senderid;
239
    }
240
241
    /**
242
     * @param mixed $senderid
243
     *
244
     * @return self
245
     */
246
    protected function setSenderid($senderid = '')
247
    {
248
        $this->senderid = $senderid == ''
249
            ? config('smsgateway.' . $this->getGateway() . '.apiValues.apiSenderId')
0 ignored issues
show
Bug introduced by
The function config was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

249
            ? /** @scrutinizer ignore-call */ config('smsgateway.' . $this->getGateway() . '.apiValues.apiSenderId')
Loading history...
250
            : trim($senderid);
251
        //dump(config('smsgateway.' . $this->getGateway() . '.apiValues.apiSenderId'));
252
        return $this;
253
    }
254
255
    /**
256
     * @return mixed
257
     */
258
    protected function getSecurekey()
259
    {
260
        return $this->securekey;
261
    }
262
263
    /**
264
     * @param mixed $securekey
265
     *
266
     * @return self
267
     */
268
    protected function setSecurekey($securekey = '')
269
    {
270
        $this->securekey = $securekey == ''
271
            ? config('smsgateway.' . $this->getGateway() . '.apiValues.apiSecureKey')
0 ignored issues
show
Bug introduced by
The function config was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

271
            ? /** @scrutinizer ignore-call */ config('smsgateway.' . $this->getGateway() . '.apiValues.apiSecureKey')
Loading history...
272
            : trim($securekey);
273
274
        return $this;
275
    }
276
277
    /**
278
     * @return mixed
279
     */
280
    public function getTag()
281
    {
282
        return $this->tag;
283
    }
284
285
    /**
286
     * @param mixed $tag
287
     *
288
     * @return self
289
     */
290
    protected function setTag($tag)
291
    {
292
        $this->tag = $tag;
293
294
        return $this;
295
    }
296
297
    /**
298
     * @return mixed
299
     */
300
    public function getResponse()
301
    {
302
        return json_encode($this->response, JSON_PRETTY_PRINT);
303
    }
304
305
    /**
306
     * @param mixed $response
307
     *
308
     * @return self
309
     */
310
    protected function setResponse($response)
311
    {
312
        $this->response = $response;
313
314
        return $this;
315
    }
316
317
    /**
318
     * @return mixed
319
     */
320
    protected function getPayload()
321
    {
322
        return $this->payload;
323
    }
324
325
    /**
326
     * @param mixed $payload
327
     *
328
     * @return self
329
     */
330
    protected function setPayload($payload)
331
    {
332
        $this->payload = $payload;
333
334
        return $this;
335
    }
336
337
    /**
338
     * @return mixed
339
     */
340
    protected function getApiEndpoint()
341
    {
342
        return $this->apiEndpoint;
343
    }
344
345
    /**
346
     * @param mixed $apiEndpoint
347
     *
348
     * @return self
349
     */
350
    protected function setApiEndpoint()
351
    {
352
        $this->apiEndpoint = config('smsgateway.' . $this->getGateway() . '.apiEndpoint');
0 ignored issues
show
Bug introduced by
The function config was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

352
        $this->apiEndpoint = /** @scrutinizer ignore-call */ config('smsgateway.' . $this->getGateway() . '.apiEndpoint');
Loading history...
353
        return $this;
354
    }
355
356
    public function asOtpSms()
357
    {
358
        $payload = $this->getPayload();
359
        if (array_key_exists('smsservicetype', $payload)) {
360
            $payload['smsservicetype'] = 'otpmsg';
361
            $this->setPayload($payload);
362
        }
363
        return $this;
364
    }
365
366
    public function asUnicodeOtpSms()
367
    {
368
        $payload = $this->getPayload();
369
        if (array_key_exists('smsservicetype', $payload)) {
370
            $payload['smsservicetype'] = 'unicodeotpmsg';
371
            $this->setPayload($payload);
372
        }
373
        return $this;
374
    }
375
376
    public function asUnicodeSms()
377
    {
378
        $payload = $this->getPayload();
379
        if (array_key_exists('smsservicetype', $payload)) {
380
            $payload['smsservicetype'] = 'unicodemsg';
381
            $this->setPayload($payload);
382
        }
383
        return $this;
384
    }
385
386
    public function asBulkUnicodeSms()
387
    {
388
        return $this->asUnicodeSms();
389
    }
390
    
391
    public function asBulkSms()
392
    {
393
        $payload = $this->getPayload();
394
        if (array_key_exists('smsservicetype', $payload)) {
395
            $payload['smsservicetype'] = 'bulkmsg';
396
            $this->setPayload($payload);
397
        }
398
        return $this;
399
    }
400
}
401