Passed
Pull Request — master (#85)
by
unknown
02:48
created

Jibit   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 2
Metric Value
eloc 30
c 2
b 0
f 2
dl 0
loc 82
rs 10
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A verify() 0 19 3
A pay() 0 9 1
A purchase() 0 27 3
1
<?php
2
namespace Shetabit\Multipay\Drivers\Jibit;
3
4
use Shetabit\Multipay\Abstracts\Driver;
5
use Shetabit\Multipay\Exceptions\InvalidPaymentException;
6
use Shetabit\Multipay\{Contracts\ReceiptInterface,
7
    Exceptions\PurchaseFailedException,
8
    Invoice,
9
    RedirectionForm,
10
    Receipt};
11
12
class Jibit extends Driver
13
{
14
    protected $invoice; // Invoice.
15
16
    protected $settings; // Driver settings.
17
18
    protected $payment_url;
19
    /**
20
     * @var JibitBase
21
     */
22
    protected $jibit; // Driver settings.
23
24
    public function __construct(Invoice $invoice, $settings)
25
    {
26
        $this->invoice($invoice); // Set the invoice.
27
        $this->settings = (object) $settings; // Set settings.
28
        /** @var JibitBase $jibit */
29
        $this->jibit = new JibitBase($this->settings->merchantId, $this->settings->apiSecret, $this->settings->apiPaymentUrl);
30
    }
31
32
    // Purchase the invoice, save its transactionId and finaly return it.
33
    public function purchase()
34
    {
35
        // Request for a payment transaction id.
36
37
        // Making payment request
38
        // you should save the order details in DB, you need if for verify
39
        $requestResult = $this->jibit->paymentRequest($this->invoice->getAmount(), $this->invoice->getDetail('order_id'), $this->invoice->getDetail('mobile'), $this->settings->callbackUrl);
40
41
42
        if (!empty($requestResult['pspSwitchingUrl'])) {
43
            //successful result and redirect to PG
44
            $this->payment_url = $requestResult['pspSwitchingUrl'];
45
        }
46
        if (!empty($requestResult['errors'])) {
47
            //fail result and show the error
48
            $errMsgs = array_map(function ($err) {
49
                return $err['message'];
50
            }, $requestResult['errors']);
51
            throw new PurchaseFailedException(implode('\n', $errMsgs));
52
        }
53
54
        $transId = $requestResult['orderIdentifier'];
55
        $referenceNumber = $requestResult['referenceNumber'];
0 ignored issues
show
Unused Code introduced by
The assignment to $referenceNumber is dead and can be removed.
Loading history...
56
57
        $this->invoice->transactionId($transId);
58
59
        return $transId;
60
    }
61
62
    // Redirect into bank using transactionId, to complete the payment.
63
    public function pay() : RedirectionForm
64
    {
65
66
        // Redirect to the bank.
67
        $url = $this->payment_url;
68
        $inputs = [];
69
        $method = 'GET';
70
71
        return $this->redirectWithForm($url, $inputs, $method);
72
    }
73
74
    // Verify the payment (we must verify to ensure that user has paid the invoice).
75
    public function verify(): ReceiptInterface
76
    {
77
78
        // $verifyUrl = $this->settings->verifyApiUrl;
79
80
        $refNum = $this->invoice->getTransactionId();
81
        // Making payment verify
82
        $requestResult = $this->jibit->paymentVerify($refNum);
83
84
        if (!empty($requestResult['status']) && $requestResult['status'] === 'Successful') {
85
            //successful result
86
87
            //show session detail
88
            $order = $this->jibit->getOrderById($refNum);
89
90
            return (new Receipt('jibit', $refNum))->detail('payerCard', $order['payerCard'] ?? '');
91
        }
92
93
        throw new InvalidPaymentException('Payment failed.');
94
95
96
    }
97
}
98