Completed
Push — master ( 569918...3493f9 )
by Владислав
02:10
created

Anticaptcha::requestCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace jumper423\decaptcha\services;
4
5
use jumper423\decaptcha\core\DeCaptchaBase;
6
use jumper423\decaptcha\core\DeCaptchaErrors;
7
8
/**
9
 * Class Anticaptcha.
10
 */
11
class Anticaptcha extends DeCaptchaBase
12
{
13
    protected $host = 'api.anti-captcha.com';
14
    protected $scheme = 'https';
15
16
    const RESPONSE_RECOGNIZE_OK = 0;
17
    const RESPONSE_RECOGNIZE_REPEAT = 2;
18
    const RESPONSE_GET_OK = 'ready';
19
    const RESPONSE_GET_REPEAT = 'processing';
20
21
    const DECODE_PARAM_ERROR = 4;
22
    const DECODE_PARAM_BALANCE = 5;
23
24
    const ACTION_FIELD_TASK = 18;
25
    const PARAM_FIELD_TYPE_BOOLEAN = 5;
26
27
    const ACTION_BALANCE = 4;
28
    const DECODE_ACTION_BALANCE = 4;
29
30
    protected $paramsNames = [
31
        self::ACTION_FIELD_KEY        => 'clientKey',
32
        self::ACTION_FIELD_SOFT_ID    => 'softId',
33
        self::ACTION_FIELD_LANGUAGE   => 'languagePool',
34
        self::ACTION_FIELD_TASK       => 'task',
35
        self::ACTION_FIELD_METHOD     => 'type',
36
        self::ACTION_FIELD_FILE       => 'body',
37
        self::ACTION_FIELD_PHRASE     => 'phrase',
38
        self::ACTION_FIELD_REGSENSE   => 'case',
39
        self::ACTION_FIELD_NUMERIC    => 'numeric',
40
        self::ACTION_FIELD_CALC       => 'math',
41
        self::ACTION_FIELD_MIN_LEN    => 'minLength',
42
        self::ACTION_FIELD_MAX_LEN    => 'maxLength',
43
        self::ACTION_FIELD_CAPTCHA_ID => 'taskId',
44
    ];
45
46
    public function init()
47
    {
48
        parent::init();
49
50
        $this->actions[static::ACTION_RECOGNIZE] = [
51
            static::ACTION_URI    => 'createTask',
52
            static::ACTION_METHOD => static::ACTION_METHOD_POST,
53
            static::ACTION_JSON   => true,
54
            static::ACTION_FIELDS => [
55
                static::ACTION_FIELD_KEY => [
56
                    static::PARAM_SLUG_REQUIRE => true,
57
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
58
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
59
                ],
60
                static::ACTION_FIELD_SOFT_ID => [
61
                    static::PARAM_SLUG_VARIABLE => false,
62
                    static::PARAM_SLUG_DEFAULT  => 882,
63
                    static::PARAM_SLUG_TYPE     => static::PARAM_FIELD_TYPE_INTEGER,
64
                ],
65
                static::ACTION_FIELD_LANGUAGE => [
66
                    static::PARAM_SLUG_DEFAULT => 'en',
67
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
68
                ],
69
                static::ACTION_FIELD_TASK => [
70
                    static::PARAM_SLUG_REQUIRE => true,
71
                    static::PARAM_SLUG_DEFAULT => [],
72
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_OBJECT,
73
                    static::ACTION_FIELDS      => [
74
                        static::ACTION_FIELD_METHOD => [
75
                            static::PARAM_SLUG_DEFAULT => 'ImageToTextTask',
76
                            static::PARAM_SLUG_REQUIRE => true,
77
                            static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
78
                        ],
79
                        static::ACTION_FIELD_FILE => [
80
                            static::PARAM_SLUG_REQUIRE   => true,
81
                            static::PARAM_SLUG_SPEC      => static::PARAM_SPEC_FILE,
82
                            static::PARAM_SLUG_CODING    => static::PARAM_SLUG_CODING_BASE64,
83
                            static::PARAM_SLUG_TYPE      => static::PARAM_FIELD_TYPE_STRING,
84
                        ],
85
                        static::ACTION_FIELD_PHRASE => [
86
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_BOOLEAN,
87
                        ],
88
                        static::ACTION_FIELD_REGSENSE => [
89
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_BOOLEAN,
90
                        ],
91
                        static::ACTION_FIELD_NUMERIC => [
92
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_INTEGER,
93
                        ],
94
                        static::ACTION_FIELD_CALC => [
95
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_BOOLEAN,
96
                        ],
97
                        static::ACTION_FIELD_MIN_LEN => [
98
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_INTEGER,
99
                        ],
100
                        static::ACTION_FIELD_MAX_LEN => [
101
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_INTEGER,
102
                        ],
103
                    ],
104
                ],
105
            ],
106
        ];
107
        $this->actions[static::ACTION_UNIVERSAL_WITH_CAPTCHA] = [
108
            static::ACTION_URI    => 'getTaskResult',
109
            static::ACTION_METHOD => static::ACTION_METHOD_POST,
110
            static::ACTION_JSON   => true,
111
            static::ACTION_FIELDS => [
112
                static::ACTION_FIELD_KEY => [
113
                    static::PARAM_SLUG_REQUIRE => true,
114
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
115
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
116
                ],
117
                static::ACTION_FIELD_CAPTCHA_ID => [
118
                    static::PARAM_SLUG_REQUIRE => true,
119
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_CAPTCHA,
120
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
121
                ],
122
            ],
123
        ];
124
        $this->actions[static::ACTION_BALANCE] = [
125
            static::ACTION_URI    => 'getBalance',
126
            static::ACTION_METHOD => static::ACTION_METHOD_POST,
127
            static::ACTION_JSON   => true,
128
            static::ACTION_FIELDS => [
129
                static::ACTION_FIELD_KEY => [
130
                    static::PARAM_SLUG_REQUIRE => true,
131
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
132
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
133
                ],
134
            ],
135
        ];
136
137
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_RECOGNIZE] = [
138
            static::DECODE_FORMAT    => static::RESPONSE_TYPE_JSON,
139
            static::DECODE_PARAMS    => [
140
                static::DECODE_PARAM_RESPONSE => [
141
                    static::DECODE_PARAM_SETTING_MARKER => 'errorId',
142
                ],
143
                static::DECODE_PARAM_CAPTCHA => [
144
                    static::DECODE_PARAM_SETTING_MARKER => 'taskId',
145
                ],
146
                static::DECODE_PARAM_ERROR => [
147
                    static::DECODE_PARAM_SETTING_MARKER => 'errorCode',
148
                ],
149
            ],
150
        ];
151
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_GET] = [
152
            static::DECODE_FORMAT    => static::RESPONSE_TYPE_JSON,
153
            static::DECODE_PARAMS    => [
154
                static::DECODE_PARAM_RESPONSE => [
155
                    static::DECODE_PARAM_SETTING_MARKER => 'status',
156
                ],
157
                static::DECODE_PARAM_CODE => [
158
                    static::DECODE_PARAM_SETTING_MARKER => 'solution.text',
159
                ],
160
                static::DECODE_PARAM_ERROR => [
161
                    static::DECODE_PARAM_SETTING_MARKER => 'errorCode',
162
                ],
163
            ],
164
        ];
165
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_BALANCE] = [
166
            static::DECODE_FORMAT    => static::RESPONSE_TYPE_JSON,
167
            static::DECODE_PARAMS    => [
168
                static::DECODE_PARAM_RESPONSE => [
169
                    static::DECODE_PARAM_SETTING_MARKER => 'errorId',
170
                ],
171
                static::DECODE_PARAM_BALANCE => [
172
                    static::DECODE_PARAM_SETTING_MARKER => 'balance',
173
                ],
174
                static::DECODE_PARAM_ERROR => [
175
                    static::DECODE_PARAM_SETTING_MARKER => 'errorCode',
176
                ],
177
            ],
178
        ];
179
    }
180
181
    /**
182
     * @throws DeCaptchaErrors
183
     *
184
     * @return bool
185
     */
186
    protected function requestRecognize()
187
    {
188
        return $this->requestRepeat(static::ACTION_RECOGNIZE, static::DECODE_ACTION_RECOGNIZE, static::PARAM_SPEC_CAPTCHA, static::DECODE_PARAM_CAPTCHA, static::RESPONSE_RECOGNIZE_OK, static::SLEEP_RECOGNIZE, static::RESPONSE_RECOGNIZE_REPEAT, static::DECODE_PARAM_ERROR);
189
    }
190
191
    /**
192
     * @throws DeCaptchaErrors
193
     *
194
     * @return bool
195
     */
196
    protected function requestCode()
197
    {
198
        return $this->requestRepeat(static::ACTION_UNIVERSAL_WITH_CAPTCHA, static::DECODE_ACTION_GET, static::PARAM_SPEC_CODE, static::DECODE_PARAM_CODE, static::RESPONSE_GET_OK, static::SLEEP_GET, static::RESPONSE_GET_REPEAT, static::DECODE_PARAM_ERROR);
199
    }
200
201
    /**
202
     * Баланс
203
     *
204
     * @return float
205
     */
206
    public function getBalance()
207
    {
208
        $result = $this->requestUniversal('getbalance');
209
        if ($result[static::DECODE_PARAM_RESPONSE] != 0) {
210
            return 0;
211
        }
212
213
        return (float) $result[static::DECODE_PARAM_BALANCE];
214
    }
215
}
216