Lazerpay::getWalletBalance()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 3
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 10
rs 10
1
<?php
2
3
/*
4
 *
5
 * (c) Muhideen Mujeeb Adeoye <[email protected]>
6
 *
7
 */
8
9
namespace Mujhtech\Lazerpay;
10
11
use GuzzleHttp\Client;
12
use Illuminate\Support\Facades\Config;
13
use Mujhtech\Lazerpay\Exceptions\LazerpayException;
14
15
class Lazerpay
16
{
17
18
    /**
19
     * @var string
20
     */
21
22
    protected $publicKey;
23
24
    /**
25
     * @var string
26
     */
27
28
    protected $secretKey;
29
30
    /**
31
     * @var string
32
     */
33
34
    protected $client;
35
36
    /**
37
     * Response from lazerpay api
38
     * @var mixed
39
     */
40
41
    protected $response;
42
43
    /**
44
     * @var string
45
     */
46
47
    protected $baseUrl;
48
49
    /**
50
     * @var array
51
     */
52
53
    private $coins = ['USDT', 'DAI', 'BUSD', 'USDC'];
54
55
    /**
56
     * @var array
57
     */
58
59
    private $currencies = ['USD', 'AED', 'NGN', 'GBP', 'EUR'];
60
61
    public function __construct()
62
    {
63
        $this->getKey();
64
        $this->getBaseUrl();
65
        $this->setRequestOptions();
66
    }
67
68
    /**
69
     * Get base url from lazerpay config
70
     */
71
72
    public function getBaseUrl()
73
    {
74
        $this->baseUrl = Config::get('lazerpay.baseUrl');
75
    }
76
77
    /**
78
     * Get secret key from lazerpay cofig
79
     */
80
81
    public function getKey()
82
    {
83
        $this->publicKey = Config::get('lazerpay.publicKey');
84
        $this->secretKey = Config::get('lazerpay.secretKey');
85
    }
86
87
    /**
88
     * Set request options
89
     * @return client
90
     */
91
92
    private function setRequestOptions()
93
    {
94
        $authBearer = 'Bearer ' . $this->secretKey;
95
96
        $this->client = new Client(
0 ignored issues
show
Documentation Bug introduced by
It seems like new GuzzleHttp\Client(ar...> 'application/json'))) of type GuzzleHttp\Client is incompatible with the declared type string of property $client.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
97
            [
98
                'base_uri' => $this->baseUrl,
99
                'headers' => [
100
                    'Authorization' => $authBearer,
101
                    'X-api-key' => $this->publicKey,
102
                    'Content-Type' => 'application/json',
103
                    'Accept' => 'application/json',
104
                ],
105
            ]
106
        );
107
108
        return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type Mujhtech\Lazerpay\Lazerpay which is incompatible with the documented return type GuzzleHttp\Client.
Loading history...
109
    }
110
111
    /**
112
     * Set http response
113
     * @param string $url
114
     * @param string $method
115
     * @param array $data
116
     * @return Lazerpay
117
     */
118
119
    private function setHttpResponse($url, $method = null, $body = [])
120
    {
121
        if (is_null($method)) {
122
            throw new LazerpayException("Empty method not allowed");
123
        }
124
125
        $this->response = $this->client->{strtolower($method)}(
126
            $this->baseUrl . $url,
127
            ["body" => json_encode($body)]
128
        );
129
130
        return $this;
131
    }
132
133
    /**
134
     * Decode json response into an array
135
     * @return array
136
     */
137
138
    private function getResponse()
139
    {
140
        return json_decode($this->response->getBody(), true);
141
    }
142
143
    /**
144
     * Get the data response from a get operation
145
     * @return array
146
     */
147
    private function getData()
148
    {
149
        return $this->getResponse()['data'];
150
    }
151
152
    /**
153
     * Verify transaction
154
     * Verify transactions after payments
155
     * @return array
156
     */
157
158
    public function verifyTransaction(string $reference)
159
    {
160
161
        return $this->setRequestOptions()->setHttpResponse('/transaction/verify/' . $reference, 'GET', [])->getData();
0 ignored issues
show
Bug introduced by
The method getData() does not exist on Psr\Http\Message\ResponseInterface. ( Ignorable by Annotation )

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

161
        return $this->setRequestOptions()->setHttpResponse('/transaction/verify/' . $reference, 'GET', [])->/** @scrutinizer ignore-call */ getData();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
Bug introduced by
The method getData() does not exist on GuzzleHttp\Promise\PromiseInterface. ( Ignorable by Annotation )

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

161
        return $this->setRequestOptions()->setHttpResponse('/transaction/verify/' . $reference, 'GET', [])->/** @scrutinizer ignore-call */ getData();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

161
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/transaction/verify/' . $reference, 'GET', [])->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
162
163
    }
164
165
    /**
166
     * Get all coins
167
     * @return array
168
     */
169
170
    public function getAllCoins()
171
    {
172
173
        return $this->setRequestOptions()->setHttpResponse('/coins', 'GET', [])->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

173
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/coins', 'GET', [])->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
174
175
    }
176
177
    /**
178
     * Get coin rate
179
     * @query string $coin, string $currency
180
     * @return array
181
     */
182
183
    public function getCoinRate(string $coin, string $currency)
184
    {
185
186
        if (!in_array($coin, $this->coins)) {
187
188
            throw new LazerpayException("Invalid coin");
189
190
        }
191
192
        if (!in_array($currency, $this->currencies)) {
193
194
            throw new LazerpayException("Invalid coin");
195
196
        }
197
198
        return $this->setRequestOptions()->setHttpResponse('/rate?coin=' . $coin . '&currency=' . $currency, 'GET', [])->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

198
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/rate?coin=' . $coin . '&currency=' . $currency, 'GET', [])->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
199
200
    }
201
202
    /**
203
     * Get wallet balance
204
     * @query string $coin
205
     * @return array
206
     */
207
208
    public function getWalletBalance(string $coin)
209
    {
210
211
        if (!in_array($coin, $this->coins)) {
212
213
            throw new LazerpayException("Invalid coin");
214
215
        }
216
217
        return $this->setRequestOptions()->setHttpResponse('/wallet/balance?coin=' . $coin, 'GET', [])->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

217
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/wallet/balance?coin=' . $coin, 'GET', [])->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
218
219
    }
220
221
    /**
222
     * Crypto Transfer
223
     * @param string $reference
224
     * Unique case sensitive transaction reference. If you do not pass this parameter, Lazerpay will generate a unique reference for you.
225
     * @param string $amount
226
     * The amount you want to send out
227
     * @param string $fromCoin
228
     * Crypto you want to swap from
229
     * @param string $toCoin
230
     * Crypto you want to swap to
231
     * @param string $blockchain
232
     * The blockchain network you are sending to
233
     * @param array $metadata e.g ['type' => "Crypto swap"]
234
     * @return array
235
     */
236
237
    public function cryptoTransfer(string $reference, string $coin, string $recipient, string $amount, array $metadata, string $blockchain)
238
    {
239
240
        if (!in_array($coin, $this->coins)) {
241
242
            throw new LazerpayException("Invalid coin");
243
244
        }
245
246
        if ($blockchain != 'Binance Smart Chain') {
247
248
            throw new LazerpayException("We only support the Binance smart chain for swaps");
249
250
        }
251
252
        $data = [
253
            'reference' => $reference,
254
            'amount' => $amount,
255
            'recipient' => $recipient,
256
            'coin' => $coin,
257
            'metadata' => $metadata,
258
            'blockchain' => $blockchain,
259
        ];
260
261
        return $this->setRequestOptions()->setHttpResponse('/transfer', 'POST', $data)->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

261
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/transfer', 'POST', $data)->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
262
263
    }
264
265
    /**
266
     * Crypto Swap
267
     * @param string $reference
268
     * Unique case sensitive transaction reference. If you do not pass this parameter, Lazerpay will generate a unique reference for you.
269
     * @param string $amount
270
     * The amount you want to send out
271
     * @param string $fromCoin
272
     * Crypto you want to swap from
273
     * @param string $toCoin
274
     * Crypto you want to swap to
275
     * @param string $blockchain
276
     * The blockchain network you are sending to
277
     * @param array $metadata e.g ['type' => "Crypto swap"]
278
     * @return array
279
     */
280
281
    public function cryptoSwap(string $reference, string $fromCoin, string $toCoin, integer $amount, array $metadata, string $blockchain)
0 ignored issues
show
introduced by
The parameter amount was hinted with object(integer). Did you maybe mean int?
Loading history...
282
    {
283
284
        if (!in_array($fromCoin, $this->coins)) {
285
286
            throw new LazerpayException("Invalid from coin");
287
288
        }
289
290
        if (!in_array($toCoin, $this->coins)) {
291
292
            throw new LazerpayException("Invalid to coin");
293
294
        }
295
296
        if ($toCoin == $fromCoin) {
297
298
            throw new LazerpayException("toCoin and fromCoin cannot be the same");
299
300
        }
301
302
        if ($blockchain != 'Binance Smart Chain') {
303
304
            throw new LazerpayException("We only support the Binance smart chain for swaps");
305
306
        }
307
308
        $data = [
309
            'reference' => $reference,
310
            'amount' => $amount,
311
            'fromCoin' => $fromCoin,
312
            'toCoin' => $toCoin,
313
            'metadata' => $metadata,
314
            'blockchain' => $blockchain,
315
        ];
316
317
        return $this->setRequestOptions()->setHttpResponse('/swap/crypto', 'POST', $data)->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

317
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/swap/crypto', 'POST', $data)->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
318
319
    }
320
321
    /**
322
     * Crypto Swap Amount
323
     * This endpoint helps you get the amount you will receive on swap even before initiating the swap
324
     * @param string $amount
325
     * The amount you want to send out
326
     * @param string $fromCoin
327
     * Crypto you want to swap from
328
     * @param string $toCoin
329
     * Crypto you want to swap to
330
     * @param string $blockchain
331
     * The blockchain network you are sending to
332
     * @return array
333
     */
334
335
    public function cryptoSwapAmount(string $fromCoin, string $toCoin, string $amount, string $blockchain)
336
    {
337
338
        if (!in_array($fromCoin, $this->coins)) {
339
340
            throw new LazerpayException("Invalid from coin");
341
342
        }
343
344
        if (!in_array($toCoin, $this->coins)) {
345
346
            throw new LazerpayException("Invalid to coin");
347
348
        }
349
350
        if ($toCoin == $fromCoin) {
351
352
            throw new LazerpayException("toCoin and fromCoin cannot be the same");
353
354
        }
355
356
        if ($blockchain != 'Binance Smart Chain') {
357
358
            throw new LazerpayException("We only support the Binance smart chain for swaps");
359
360
        }
361
362
        $data = [
363
            'amount' => $amount,
364
            'fromCoin' => $fromCoin,
365
            'toCoin' => $toCoin,
366
            'metadata' => $metadata,
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $metadata seems to be never defined.
Loading history...
367
        ];
368
369
        return $this->setRequestOptions()->setHttpResponse('/swap/crypto/amount-out', 'POST', $data)->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

369
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/swap/crypto/amount-out', 'POST', $data)->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
370
371
    }
372
373
    /**
374
     * Get all payment links
375
     * @return array
376
     */
377
378
    public function getPaymentLinks()
379
    {
380
381
        return $this->setRequestOptions()->setHttpResponse('/payment-links', 'GET', [])->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

381
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/payment-links', 'GET', [])->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
382
383
    }
384
385
    /**
386
     * Fetch payment link
387
     * @return array
388
     */
389
390
    public function fetchPaymentLink(string $reference)
391
    {
392
393
        return $this->setRequestOptions()->setHttpResponse('/payment-links/' . $reference, 'GET', [])->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

393
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/payment-links/' . $reference, 'GET', [])->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
394
395
    }
396
397
    /**
398
     * Create Payment link
399
     * With payment links, you can share your unique payment link to anyone in the world.
400
     * @param string $amount
401
     * Amount the user will pay
402
     * @param string $currency
403
     * Payment page currency
404
     * @param string $title
405
     * The title of the link
406
     * @param string $description
407
     * Description of the payment page
408
     * @param string $logo
409
     * Your logo url
410
     * @param string $type
411
     * Payment links type default is "standard"
412
     * @return array
413
     */
414
415
    public function createPaymentLink(string $title, string $description, string $type = 'standard', string $logo, string $amount, string $currency, string $redirect_url)
416
    {
417
418
        $data = [
419
            'amount' => $amount,
420
            'title' => $title,
421
            'description' => $description,
422
            'type' => $type,
423
            'logo' => $logo,
424
            'currency' => $currency,
425
            'redirect_url' => $redirect_url,
426
        ];
427
428
        return $this->setRequestOptions()->setHttpResponse('/payment-links', 'POST', $data)->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

428
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/payment-links', 'POST', $data)->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
429
430
    }
431
432
    /**
433
     * Update Payment link
434
     * Update a particular payment link with the following endpoint.
435
     * @param string $reference
436
     * Id or reference
437
     * @param string $amount
438
     * Amount the user will pay
439
     * @param string $currency
440
     * Payment page currency
441
     * @param string $title
442
     * The title of the link
443
     * @param string $description
444
     * Description of the payment page
445
     * @param string $logo
446
     * Your logo url
447
     * @param string $type
448
     * Payment links type default is "standard"
449
     * @return array
450
     */
451
452
    public function updatePaymentLink(string $reference, string $title, string $description, string $type = 'standard', string $logo, string $amount, string $currency, string $redirect_url)
453
    {
454
455
        $data = [
456
            'amount' => $amount,
457
            'title' => $title,
458
            'description' => $description,
459
            'type' => $type,
460
            'logo' => $logo,
461
            'currency' => $currency,
462
            'redirect_url' => $redirect_url,
463
        ];
464
465
        return $this->setRequestOptions()->setHttpResponse('/payment-links/' . $reference, 'PUT', $data)->getData();
0 ignored issues
show
Deprecated Code introduced by
The function GuzzleHttp\Client::__call() has been deprecated: Client::__call will be removed in guzzlehttp/guzzle:8.0. ( Ignorable by Annotation )

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

465
        return /** @scrutinizer ignore-deprecated */ $this->setRequestOptions()->setHttpResponse('/payment-links/' . $reference, 'PUT', $data)->getData();

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
466
467
    }
468
469
}
470