Passed
Push — master ( 1266bf...5a0d0e )
by Dmitry
02:03
created

Provider31::get_request()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 13
nc 5
nop 0
dl 0
loc 22
rs 8.6737
c 0
b 0
f 0
1
<?php
2
3
/**
4
 *      Main class for EasyPay-Provider 3.1
5
 *
6
 *      @package php_EasyPay
7
 *      @version 1.1
8
 *      @author Dmitry Shovchko <[email protected]>
9
 *
10
 */
11
12
namespace EasyPay;
13
14
class Provider31
15
{
16
    /**
17
     *      @var array
18
     */
19
    protected static $options = array(
20
        'ServiceId' => 0,
21
        'UseSign' => false,
22
        'EasySoftPKey' => '',
23
        'ProviderPKey' => '',
24
    );
25
26
    /**
27
     *      @var \EasyPay\Callback
28
     */
29
    protected static $cb;
30
31
    /**
32
     *      @var mixed
33
     */
34
    private $request;
35
36
    /**
37
     *      @var Provider31\Response
38
     */
39
    private $response;
40
41
    /**
42
     *      Provider31 constructor
43
     *
44
     *      @param array $options
45
     *      @param Callback $cb
46
     *      @param \Debulog\LoggerInterface $log
47
     */
48
    public function __construct(array $options, \EasyPay\Callback $cb, \Debulog\LoggerInterface $log)
49
    {
50
        self::$options = array_merge(self::$options, $options);
51
        self::$cb = $cb;
52
53
        Log::set($log);
54
    }
55
56
    /**
57
     *      Get and process request, echo response
58
     *
59
     */
60
    public function process()
61
    {
62
        try
63
        {
64
            //      get request
65
            $this->request = $this->get_request();
66
67
            //      validate request
68
            $this->request->validate_request(self::$options);
69
            Log::instance()->debug('request is valid');
70
71
            //      verify sign
72
            $this->request->verify_sign(self::$options);
73
            Log::instance()->debug('signature of request is correct');
74
75
            //      get response
76
            $this->response = $this->get_response();
77
78
            Log::instance()->add('the request was processed successfully');
79
        }
80
        catch (Exception\Structure $e)
81
        {
82
            $this->response = $this->get_error_response($e->getCode(), 'Error in request');
83
        }
84
        catch (Exception\Sign $e)
85
        {
86
            $this->response = $this->get_error_response($e->getCode(), 'Signature error!');
87
        }
88
        catch (Exception\Runtime $e)
89
        {
90
            $this->response = $this->get_error_response($e->getCode(), 'Error while processing request');
91
        }
92
        catch (\Exception $e)
93
        {
94
            $this->response = $this->get_error_response($e->getCode(), $e->getMessage());
95
        }
96
97
        //      output response
98
        $this->response->sign_and_out(self::$options);
99
    }
100
101
    /**
102
     *      method to create a specific class of request
103
     *
104
     *      @return Request\General Request class of the appropriate type
0 ignored issues
show
Bug introduced by
The type EasyPay\Request\General was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
105
     *      @throws \EasyPay\Exception\Structure
106
     */
107
    protected function get_request()
108
    {
109
        $raw = new Provider31\Request\RAW();
110
111
        $r = new Provider31\Request\General($raw);
112
113
        switch ($r->Operation())
114
        {
115
            case 'Check':
116
                return new Provider31\Request\Check($raw);
0 ignored issues
show
Bug Best Practice introduced by
The expression return new EasyPay\Provider31\Request\Check($raw) returns the type EasyPay\Provider31\Request\Check which is incompatible with the documented return type EasyPay\Request\General.
Loading history...
Bug introduced by
$raw of type EasyPay\Provider31\Request\RAW is incompatible with the type string expected by parameter $raw of EasyPay\Provider31\Request\Check::__construct(). ( Ignorable by Annotation )

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

116
                return new Provider31\Request\Check(/** @scrutinizer ignore-type */ $raw);
Loading history...
117
118
            case 'Payment':
119
                return new Provider31\Request\Payment($raw);
0 ignored issues
show
Bug introduced by
$raw of type EasyPay\Provider31\Request\RAW is incompatible with the type string expected by parameter $raw of EasyPay\Provider31\Request\Payment::__construct(). ( Ignorable by Annotation )

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

119
                return new Provider31\Request\Payment(/** @scrutinizer ignore-type */ $raw);
Loading history...
Bug Best Practice introduced by
The expression return new EasyPay\Provi...1\Request\Payment($raw) returns the type EasyPay\Provider31\Request\Payment which is incompatible with the documented return type EasyPay\Request\General.
Loading history...
120
121
            case 'Confirm':
122
                return new Provider31\Request\Confirm($raw);
0 ignored issues
show
Bug Best Practice introduced by
The expression return new EasyPay\Provi...1\Request\Confirm($raw) returns the type EasyPay\Provider31\Request\Confirm which is incompatible with the documented return type EasyPay\Request\General.
Loading history...
Bug introduced by
$raw of type EasyPay\Provider31\Request\RAW is incompatible with the type string expected by parameter $raw of EasyPay\Provider31\Request\Confirm::__construct(). ( Ignorable by Annotation )

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

122
                return new Provider31\Request\Confirm(/** @scrutinizer ignore-type */ $raw);
Loading history...
123
124
            case 'Cancel';
125
                return new Provider31\Request\Cancel($raw);
0 ignored issues
show
Bug Best Practice introduced by
The expression return new EasyPay\Provider31\Request\Cancel($raw) returns the type EasyPay\Provider31\Request\Cancel which is incompatible with the documented return type EasyPay\Request\General.
Loading history...
Bug introduced by
$raw of type EasyPay\Provider31\Request\RAW is incompatible with the type string expected by parameter $raw of EasyPay\Provider31\Request\Cancel::__construct(). ( Ignorable by Annotation )

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

125
                return new Provider31\Request\Cancel(/** @scrutinizer ignore-type */ $raw);
Loading history...
126
127
            default:
128
                throw new \EasyPay\Exception\Structure('There is not supported value of Operation in xml-request!', -99);
129
        }
130
    }
131
132
    /**
133
     *      Process request and generate response
134
     *
135
     *      @throws Exception\Structure
136
     */
137
    protected function get_response()
138
    {
139
        switch ($this->request->Operation())
140
        {
141
            case 'Check':
142
                $response = $this->response_check();
143
                break;
144
145
            case 'Payment':
146
                $response = $this->response_payment();
147
                break;
148
149
            case 'Confirm':
150
                $response = $this->response_confirm();
151
                break;
152
153
            case 'Cancel';
154
                $response = $this->response_cancel();
155
                break;
156
157
            default:
158
                throw new Exception\Structure('There is not supported value of Operation in xml-request!', -99);
159
        }
160
161
        return $response;
162
    }
163
164
    /**
165
     *      run check callback and generate a response
166
     *
167
     *      @return Provider31\Response\Check
168
     */
169
    private function response_check()
170
    {
171
        Log::instance()->add(sprintf('Check("%s")', $this->request->Account()));
172
173
        $accountinfo = self::$cb->check(
174
            $this->request->Account()
175
        );
176
177
        // Sending a response
178
        return new Provider31\Response\Check($accountinfo);
179
    }
180
181
    /**
182
     *      run payment callback and generate a response
183
     *
184
     *      @return Provider31\Response\Payment
185
     */
186
    private function response_payment()
187
    {
188
        Log::instance()->add(sprintf('Payment("%s", "%s", "%s")', $this->request->Account(), $this->request->OrderId(), $this->request->Amount()));
189
190
        $paymentid = self::$cb->payment(
191
            $this->request->Account(),
192
            $this->request->OrderId(),
193
            $this->request->Amount()
194
        );
195
196
        // Sending a response
197
        return new Provider31\Response\Payment($paymentid);
198
    }
199
200
    /**
201
     *      run confirm callback and generate a response
202
     *
203
     *      @return Provider31\Response\Confirm
204
     */
205 View Code Duplication
    private function response_confirm()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
206
    {
207
        Log::instance()->add(sprintf('Confirm("%s")', $this->request->PaymentId()));
208
209
        $orderdate = self::$cb->confirm(
210
            $this->request->PaymentId()
211
        );
212
213
        // Sending a response
214
        return new Provider31\Response\Confirm($orderdate);
215
    }
216
217
    /**
218
     *      run cancel callback and generate a response
219
     *
220
     *      @return Provider31\Response\Cancel
221
     */
222 View Code Duplication
    private function response_cancel()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
223
    {
224
        Log::instance()->add(sprintf('Cancel("%s")', $this->request->PaymentId()));
225
226
        $canceldate = self::$cb->cancel(
227
            $this->request->PaymentId()
228
        );
229
230
        // Sending a response
231
        return new Provider31\Response\Cancel($canceldate);
232
    }
233
234
    /**
235
     *      Generates an xml with an error message
236
     *
237
     *      @param integer $code
238
     *      @param string $message
239
     *
240
     *      @return Provider31\Response\ErrorInfo
241
     */
242
    private function get_error_response($code, $message)
243
    {
244
        Log::instance()->add('the request was processed with an error');
245
246
        // Sending a response
247
        return new Provider31\Response\ErrorInfo($code, $message);
248
    }
249
}
250