Completed
Push — master ( 8c5590...0f9b49 )
by mahdi
03:47
created

Irankish::createRedirectionForm()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 9
nc 2
nop 2
dl 0
loc 14
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
namespace Shetabit\Payment\Drivers;
4
5
use Shetabit\Payment\Abstracts\Driver;
6
use Shetabit\Payment\Exceptions\InvalidPaymentException;
7
use Shetabit\Payment\Invoice;
8
9
class Irankish extends Driver
10
{
11
    /**
12
     * Invoice
13
     *
14
     * @var Invoice
15
     */
16
    protected $invoice;
17
18
    /**
19
     * Driver settings
20
     *
21
     * @var object
22
     */
23
    protected $settings;
24
25
    /**
26
     * Irankish constructor.
27
     * Construct the class with the relevant settings.
28
     *
29
     * @param Invoice $invoice
30
     * @param $settings
31
     */
32
    public function __construct(Invoice $invoice, $settings)
33
    {
34
        $this->invoice($invoice);
35
        $this->settings = (object) $settings;
36
    }
37
38
    /**
39
     * Purchase Invoice.
40
     *
41
     * @return string
42
     */
43
    public function purchase()
44
    {
45
        if (!empty($this->invoice->getDetails()['description'])) {
46
            $description = $this->invoice->getDetails()['description'];
47
        } else {
48
            $description = $this->settings->description;
49
        }
50
51
        $data = array(
52
            'amount' => $this->invoice->getAmount() * 10, // convert to rial
53
            'merchantId' => $this->settings->merchantId,
54
            'description' => $description,
55
            'revertURL' => $this->settings->callbackUrl,
56
            'invoiceNo' => $this->invoice->getUuid(),
57
            'paymentId' => $this->invoice->getUuid(),
58
            'specialPaymentId' => $this->invoice->getUuid(),
59
        );
60
61
        $soap = new \SoapClient(
62
            $this->settings->apiPurchaseUrl
63
        );
64
        $response = $soap->MakeToken($data);
65
66
        if ($response->MakeTokenResult->result != false) {
67
            $this->invoice->transactionId($response->MakeTokenResult->token);
68
        }
69
70
        // return the transaction's id
71
        return $this->invoice->getTransactionId();
72
    }
73
74
    /**
75
     * Pay the Invoice
76
     *
77
     * @return \Illuminate\Http\RedirectResponse|mixed
78
     */
79
    public function pay()
80
    {
81
        $payUrl = $this->settings->apiPaymentUrl;
82
83
        return $this->redirectWithForm(
84
            $payUrl,
85
            [
86
                'token' => $this->invoice->getTransactionId(),
87
                'merchantId' => $this->settings->merchantId,
88
            ],
89
            'POST'
90
        );
91
    }
92
93
    /**
94
     * Verify payment
95
     *
96
     * @return mixed|void
97
     * @throws InvalidPaymentException
98
     */
99
    public function verify()
100
    {
101
        $data = array(
102
            'merchantId' => $this->settings->merchantId,
103
            'sha1Key' => $this->settings->sha1Key,
104
            'token' => $this->invoice->getTransactionId(),
105
            'amount' => $this->invoice->getAmount() * 10, // convert to rial
106
            'referenceNumber' => request()->get('referenceId'),
107
        );
108
109
        $soap = new \SoapClient($this->settings->apiVerificationUrl);
110
        $response = $soap->KicccPaymentsVerification($data);
111
112
        $status = (int) ($response->KicccPaymentsVerificationResult);
113
114
        if ($status != $data['amount']) {
115
            $this->notVerified($status);
116
        }
117
    }
118
119
    /**
120
     * Trigger an exception
121
     *
122
     * @param $status
123
     * @throws InvalidPaymentException
124
     */
125
    private function notVerified($status)
126
    {
127
        $translations = array(
128
            110 => 'دارنده کارت انصراف داده است',
129
            120 => 'موجودی حساب کافی نمی باشد',
130
            121 => 'مبلغ تراکنشهای کارت بیش از حد مجاز است',
131
            130 => 'اطلاعات کارت نادرست می باشد',
132
            131 => 'رمز کارت اشتباه است',
133
            132 => 'کارت مسدود است',
134
            133 => 'کارت منقضی شده است',
135
            140 => 'زمان مورد نظر به پایان رسیده است',
136
            150 => 'خطای داخلی بانک به وجود آمده است',
137
            160 => 'خطای انقضای کارت به وجود امده یا اطلاعات CVV2 اشتباه است',
138
            166 => 'بانک صادر کننده کارت شما مجوز انجام تراکنش را صادر نکرده است',
139
            167 => 'خطا در مبلغ تراکنش',
140
            200 => 'مبلغ تراکنش بیش از حدنصاب مجاز',
141
            201 => 'مبلغ تراکنش بیش از حدنصاب مجاز برای روز کاری',
142
            202 => 'مبلغ تراکنش بیش از حدنصاب مجاز برای ماه کاری',
143
            203 => 'تعداد تراکنشهای مجاز از حد نصاب گذشته است',
144
            499 => 'خطای سیستمی ، لطفا مجددا تالش فرمایید',
145
            500 => 'خطا در تایید تراکنش های خرد شده',
146
            501 => 'خطا در تایید تراکتش ، ویزگی تایید خودکار',
147
            502 => 'آدرس آی پی نا معتبر',
148
            503 => 'پذیرنده در حالت تستی می باشد ، مبلغ نمی تواند بیش از حد مجاز تایین شده برای پذیرنده تستی باشد',
149
            504 => 'خطا در بررسی الگوریتم شناسه پرداخت',
150
            505 => 'مدت زمان الزم برای انجام تراکنش تاییدیه به پایان رسیده است',
151
            506 => 'ذیرنده یافت نشد',
152
            507 => 'توکن نامعتبر/طول عمر توکن منقضی شده است',
153
            508 => 'توکن مورد نظر یافت نشد و یا منقضی شده است',
154
            509 => 'خطا در پارامترهای اجباری خرید تسهیم شده',
155
            510 => 'خطا در تعداد تسهیم | مبالغ کل تسهیم مغایر با مبلغ کل ارائه شده | خطای شماره ردیف تکراری',
156
            511 => 'حساب مسدود است',
157
            512 => 'حساب تعریف نشده است',
158
            513 => 'شماره تراکنش تکراری است',
159
            -20 => 'در درخواست کارکتر های غیر مجاز وجو دارد',
160
            -30 => 'تراکنش قبلا برگشت خورده است',
161
            -50 => 'طول رشته درخواست غیر مجاز است',
162
            -51 => 'در در خواست خطا وجود دارد',
163
            -80 => 'تراکنش مورد نظر یافت نشد',
164
            -81 => ' خطای داخلی بانک',
165
            -90 => 'تراکنش قبلا تایید شده است'
166
        );
167
        if (array_key_exists($status, $translations)) {
168
            throw new InvalidPaymentException($translations[$status]);
169
        } else {
170
            throw new InvalidPaymentException('خطای ناشناخته ای رخ داده است.');
171
        }
172
    }
173
}
174