Completed
Push — master ( 72bd34...d9c0db )
by mahdi
02:32
created

Irankish::verify()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 10
nc 2
nop 0
dl 0
loc 16
rs 9.9332
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(),
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
     * Create payment redirection form.
76
     *
77
     * @param $url
78
     * @param array $data
79
     * @return string
80
     */
81
    public function createRedirectionForm($url, array $data)
82
    {
83
        $output = '<html><head><meta charset="utf-8" />';
84
        $output .= '<script>function pay() { document.forms["pay"].submit(); }</script>';
85
        $output .= '</head><body onload="pay();"><form name="pay" method="post" action="'.$url.'">';
86
        if ( !empty($data) ) {
87
            foreach ($data as $key => $value) {
88
                $output.='<input type="hidden" name="'.$key.'" value="'.$value.'">';
89
            }
90
        }
91
        $output.='<input type="submit" value="doing the payment...">';
92
        $output.='</form></body></html>';
93
94
        return $output;
95
    }
96
97
    /**
98
     * Pay the Invoice
99
     *
100
     * @return \Illuminate\Http\RedirectResponse|mixed
101
     */
102
    public function pay()
103
    {
104
        $payUrl = $this->settings->apiPaymentUrl;
105
106
        $redirectionForm = $this->createRedirectionForm(
107
            $payUrl,
108
            [
109
                'token' => $this->invoice->getTransactionId(),
110
                'merchantId' => $this->settings->merchantId,
111
            ]
112
        );
113
114
        return $redirectionForm;
115
    }
116
117
    /**
118
     * Verify payment
119
     *
120
     * @return mixed|void
121
     * @throws InvalidPaymentException
122
     */
123
    public function verify()
124
    {
125
        $data = array(
126
            'token' => $this->invoice->getTransactionId(),
127
            'referenceNumber' => $this->invoice->getUuid(),
128
            'merchantId' => $this->settings->merchantId,
129
            'sha1Key' => $this->settings->sha1Key,
130
        );
131
132
        $soap = new \SoapClient($this->settings->apiVerificationUrl);
133
        $response = $soap->KicccPaymentsVerification($data);
134
135
        $status = intval($response->KicccPaymentsVerificationResult);
136
137
        if ($response != 100) {
138
            $this->notVerified($status);
139
        }
140
    }
141
142
    /**
143
     * Trigger an exception
144
     *
145
     * @param $status
146
     * @throws InvalidPaymentException
147
     */
148
    private function notVerified($status)
149
    {
150
        $translations = array(
151
            110 => 'دارنده کارت انصراف داده است',
152
            120 => 'موجودی حساب کافی نمی باشد',
153
            121 => 'مبلغ تراکنشهای کارت بیش از حد مجاز است',
154
            130 => 'اطلاعات کارت نادرست می باشد',
155
            131 => 'رمز کارت اشتباه است',
156
            132 => 'کارت مسدود است',
157
            133 => 'کارت منقضی شده است',
158
            140 => 'زمان مورد نظر به پایان رسیده است',
159
            150 => 'خطای داخلی بانک به وجود آمده است',
160
            160 => 'خطای انقضای کارت به وجود امده یا اطلاعات CVV2 اشتباه است',
161
            166 => 'بانک صادر کننده کارت شما مجوز انجام تراکنش را صادر نکرده است',
162
            167 => 'خطا در مبلغ تراکنش',
163
            200 => 'مبلغ تراکنش بیش از حدنصاب مجاز',
164
            201 => 'مبلغ تراکنش بیش از حدنصاب مجاز برای روز کاری',
165
            202 => 'مبلغ تراکنش بیش از حدنصاب مجاز برای ماه کاری',
166
            203 => 'تعداد تراکنشهای مجاز از حد نصاب گذشته است',
167
            499 => 'خطای سیستمی ، لطفا مجددا تالش فرمایید',
168
            500 => 'خطا در تایید تراکنش های خرد شده',
169
            501 => 'خطا در تایید تراکتش ، ویزگی تایید خودکار',
170
            502 => 'آدرس آی پی نا معتبر',
171
            503 => 'پذیرنده در حالت تستی می باشد ، مبلغ نمی تواند بیش از حد مجاز تایین شده برای پذیرنده تستی باشد',
172
            504 => 'خطا در بررسی الگوریتم شناسه پرداخت',
173
            505 => 'مدت زمان الزم برای انجام تراکنش تاییدیه به پایان رسیده است',
174
            506 => 'ذیرنده یافت نشد',
175
            507 => 'توکن نامعتبر/طول عمر توکن منقضی شده است',
176
            508 => 'توکن مورد نظر یافت نشد و یا منقضی شده است',
177
            509 => 'خطا در پارامترهای اجباری خرید تسهیم شده',
178
            510 => 'خطا در تعداد تسهیم | مبالغ کل تسهیم مغایر با مبلغ کل ارائه شده | خطای شماره ردیف تکراری',
179
            511 => 'حساب مسدود است',
180
            512 => 'حساب تعریف نشده است',
181
            513 => 'شماره تراکنش تکراری است',
182
            -20 => 'در درخواست کارکتر های غیر مجاز وجو دارد',
183
            -30 => 'تراکنش قبلا برگشت خورده است',
184
            -50 => 'طول رشته درخواست غیر مجاز است',
185
            -51 => 'در در خواست خطا وجود دارد',
186
            -80 => 'تراکنش مورد نظر یافت نشد',
187
            -81 => ' خطای داخلی بانک',
188
            -90 => 'تراکنش قبلا تایید شده است'
189
        );
190
        if (array_key_exists($status, $translations)) {
191
            throw new InvalidPaymentException($translations[$status]);
192
        } else {
193
            throw new InvalidPaymentException('خطای ناشناخته ای رخ داده است.');
194
        }
195
    }
196
}
197