Pasargad   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
wmc 10
eloc 38
c 2
b 0
f 1
dl 0
loc 60
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A verify() 0 29 5
A init() 0 27 5
1
<?php
2
3
namespace Dizatech\Transaction\Drivers;
4
5
use Dizatech\PasargadIpg\PasargadIpg;
6
use Dizatech\Transaction\Abstracts\Driver;
7
use stdClass;
8
9
class Pasargad extends Driver
10
{
11
    public function init($amount, $orderId, $callbackUrl, $detail = [])
12
    {
13
        // Create new transaction
14
        $transaction = $this->createNewTransaction($orderId, $amount);
15
16
        // Create object from Pasargad Driver
17
        $class = new PasargadIpg($this->getInformation());
18
        $class->verifySSL(config('dizatech_transaction.information')['pasargad']['options']['verifySSL']);
19
20
        $result = $class->purchase(
21
            amount: $amount,
22
            invoice_number: $transaction->id,
23
            invoice_date: $transaction->created_at->format('Y/m/d H:i:s'),
24
            redirect_address: $callbackUrl
25
        );
26
27
        if (isset($detail['auto_redirect']) && $detail['auto_redirect'] == false && $result->status == 'success') {
28
            $result->token  = $result->url_id;
29
            $result->url    = $result->payment_url;
30
            return $result;
31
        } elseif ($result->status == 'success') {
32
            $this->updateTransactionData($transaction->id, ['token' => $result->url_id]);
33
            header('Location: ' . $result->payment_url);
34
            die();
35
        }
36
37
        return $result;
38
    }
39
40
    public function verify($request)
41
    {
42
        $class = new PasargadIpg($this->getInformation());
43
        $class->verifySSL(config('dizatech_transaction.information')['pasargad']['options']['verifySSL']);
44
45
        if ($request['status'] == 'success') {
46
            $inquiry = $class->inquiry(invoice_number: $request['invoiceId']);
47
            if ($inquiry->status == 'success' && $inquiry->payment_status == 'success') {
48
                $verification_result = $class->verify(invoice_number: $request['invoiceId'], url_id: $inquiry->url_id);
49
50
                $result = new stdClass();
51
                if ($verification_result->status == 'success') {
52
                    $result->status = 'success';
53
                    $result->shaparak_ref = $verification_result->reference_number;
54
                    $this->updateTransactionData($request['invoiceId'], ['status' => 'successful', 'ref_no' => $verification_result->reference_number]);
55
                } else {
56
                    $result->status = 'error';
57
                    $result->message = 'پرداخت با خطا مواجه شد.';
58
                    $this->updateTransactionData($request['invoiceId'], ['status' => 'failed', 'ref_no' => $verification_result->reference_number]);
59
                }
60
61
                return $result;
62
            }
63
        }
64
65
        $this->updateTransactionData($request['invoiceId'], ['status' => 'failed']);
66
        return (object)[
67
            'status'        => 'error',
68
            'message'       => 'پرداخت با خطا مواجه شد.',
69
        ];
70
    }
71
}
72