RuCaptcha::getBalance()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace jumper423\decaptcha\services;
4
5
use jumper423\decaptcha\core\DeCaptchaBase;
6
7
/**
8
 * Распознавание капчи RuCaptcha.
9
 *
10
 * Class RuCaptcha
11
 *
12
 * @link http://infoblog1.ru/goto/rucaptcha
13
 */
14
class RuCaptcha extends DeCaptchaBase
15
{
16
    protected $host = 'rucaptcha.com';
17
18
    const RESPONSE_REPORTBAD_OK = 'OK_REPORT_RECORDED';
19
20
    protected $paramsNames = [
21
        self::ACTION_FIELD_METHOD       => 'method',
22
        self::ACTION_FIELD_KEY          => 'key',
23
        self::ACTION_FIELD_FILE         => 'file',
24
        self::ACTION_FIELD_PHRASE       => 'phrase',
25
        self::ACTION_FIELD_REGSENSE     => 'regsense',
26
        self::ACTION_FIELD_NUMERIC      => 'numeric',
27
        self::ACTION_FIELD_MIN_LEN      => 'min_len',
28
        self::ACTION_FIELD_MAX_LEN      => 'max_len',
29
        self::ACTION_FIELD_LANGUAGE     => 'language',
30
        self::ACTION_FIELD_SOFT_ID      => 'soft_id',
31
        self::ACTION_FIELD_CAPTCHA_ID   => 'id',
32
        self::ACTION_FIELD_ACTION       => 'action',
33
        self::ACTION_FIELD_QUESTION     => 'question',
34
        self::ACTION_FIELD_HEADER_ACAO  => 'header_acao',
35
        self::ACTION_FIELD_INSTRUCTIONS => 'textinstructions',
36
        self::ACTION_FIELD_PINGBACK     => 'pingback',
37
        self::ACTION_FIELD_CALC         => 'calc',
38
        self::ACTION_FIELD_LANG         => 'lang',
39
    ];
40
41
    public function init()
42
    {
43
        parent::init();
44
45
        $this->actions[static::ACTION_RECOGNIZE] = [
46
            static::ACTION_URI    => 'in.php',
47
            static::ACTION_METHOD => static::ACTION_METHOD_POST,
48
            static::ACTION_FIELDS => [
49
                static::ACTION_FIELD_METHOD => [
50
                    static::PARAM_SLUG_DEFAULT => 'post',
51
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
52
                    static::PARAM_SLUG_NOTWIKI => true,
53
                ],
54
                static::ACTION_FIELD_KEY => [
55
                    static::PARAM_SLUG_REQUIRE => true,
56
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
57
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
58
                ],
59
                static::ACTION_FIELD_FILE => [
60
                    static::PARAM_SLUG_REQUIRE => true,
61
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_FILE,
62
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_MIX,
63
                ],
64
                static::ACTION_FIELD_PHRASE => [
65
                    static::PARAM_SLUG_DEFAULT => 0,
66
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
67
                    static::PARAM_SLUG_ENUM    => [
68
                        0,
69
                        1,
70
                    ],
71
                ],
72
                static::ACTION_FIELD_REGSENSE => [
73
                    static::PARAM_SLUG_DEFAULT => 0,
74
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
75
                    static::PARAM_SLUG_ENUM    => [
76
                        0,
77
                        1,
78
                    ],
79
                ],
80
                static::ACTION_FIELD_NUMERIC => [
81
                    static::PARAM_SLUG_DEFAULT => 0,
82
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
83
                    static::PARAM_SLUG_ENUM    => [
84
                        0,
85
                        1,
86
                        2,
87
                        3,
88
                    ],
89
                ],
90
                static::ACTION_FIELD_MIN_LEN => [
91
                    static::PARAM_SLUG_DEFAULT => 0,
92
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
93
                ],
94
                static::ACTION_FIELD_MAX_LEN => [
95
                    static::PARAM_SLUG_DEFAULT => 0,
96
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
97
                ],
98
                static::ACTION_FIELD_LANGUAGE => [
99
                    static::PARAM_SLUG_DEFAULT => 0,
100
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
101
                    static::PARAM_SLUG_ENUM    => [
102
                        0,
103
                        1,
104
                        2,
105
                    ],
106
                ],
107
                static::ACTION_FIELD_LANG => [
108
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
109
                ],
110
                static::ACTION_FIELD_QUESTION => [
111
                    static::PARAM_SLUG_DEFAULT => 0,
112
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
113
                    static::PARAM_SLUG_ENUM    => [
114
                        0,
115
                        1,
116
                    ],
117
                ],
118
                static::ACTION_FIELD_CALC => [
119
                    static::PARAM_SLUG_DEFAULT => 0,
120
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
121
                    static::PARAM_SLUG_ENUM    => [
122
                        0,
123
                        1,
124
                    ],
125
                ],
126
                static::ACTION_FIELD_HEADER_ACAO => [
127
                    static::PARAM_SLUG_DEFAULT => 0,
128
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
129
                    static::PARAM_SLUG_ENUM    => [
130
                        0,
131
                        1,
132
                    ],
133
                ],
134
                static::ACTION_FIELD_INSTRUCTIONS => [
135
                    static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_STRING,
136
                ],
137
                static::ACTION_FIELD_PINGBACK => [
138
                    static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_STRING,
139
                ],
140
                static::ACTION_FIELD_SOFT_ID => [
141
                    static::PARAM_SLUG_VARIABLE => false,
142
                    static::PARAM_SLUG_DEFAULT  => 1709,
143
                    static::PARAM_SLUG_TYPE     => static::PARAM_FIELD_TYPE_INTEGER,
144
                    static::PARAM_SLUG_NOTWIKI  => true,
145
                ],
146
            ],
147
        ];
148
        $this->actions[static::ACTION_UNIVERSAL] = [
149
            static::ACTION_URI    => 'res.php',
150
            static::ACTION_METHOD => static::ACTION_METHOD_GET,
151
            static::ACTION_FIELDS => [
152
                static::ACTION_FIELD_KEY => [
153
                    static::PARAM_SLUG_REQUIRE => true,
154
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
155
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
156
                ],
157
                static::ACTION_FIELD_ACTION => [
158
                    static::PARAM_SLUG_REQUIRE => true,
159
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
160
                ],
161
                static::ACTION_FIELD_HEADER_ACAO => [
162
                    static::PARAM_SLUG_DEFAULT => 0,
163
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
164
                ],
165
                static::ACTION_FIELD_CAPTCHA_ID => [
166
                    static::PARAM_SLUG_SPEC => static::PARAM_SPEC_CAPTCHA,
167
                    static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_INTEGER,
168
                ],
169
            ],
170
        ];
171
        $this->actions[static::ACTION_UNIVERSAL_WITH_CAPTCHA] = [
172
            static::ACTION_URI    => 'res.php',
173
            static::ACTION_METHOD => static::ACTION_METHOD_GET,
174
            static::ACTION_FIELDS => [
175
                static::ACTION_FIELD_KEY => [
176
                    static::PARAM_SLUG_REQUIRE => true,
177
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
178
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
179
                ],
180
                static::ACTION_FIELD_CAPTCHA_ID => [
181
                    static::PARAM_SLUG_REQUIRE => true,
182
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_CAPTCHA,
183
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
184
                ],
185
                static::ACTION_FIELD_ACTION => [
186
                    static::PARAM_SLUG_REQUIRE  => true,
187
                    static::PARAM_SLUG_DEFAULT  => 'get',
188
                    static::PARAM_SLUG_TYPE     => static::PARAM_FIELD_TYPE_STRING,
189
                    static::PARAM_SLUG_VARIABLE => false,
190
                ],
191
                static::ACTION_FIELD_HEADER_ACAO => [
192
                    static::PARAM_SLUG_DEFAULT => 0,
193
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
194
                ],
195
            ],
196
        ];
197
198
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_RECOGNIZE] = [
199
            static::DECODE_SEPARATOR => '|',
200
            static::DECODE_PARAMS    => [
201
                static::DECODE_PARAM_RESPONSE => [
202
                    static::DECODE_PARAM_SETTING_MARKER => 0,
203
                ],
204
                static::DECODE_PARAM_CAPTCHA => [
205
                    static::DECODE_PARAM_SETTING_MARKER => 1,
206
                ],
207
            ],
208
        ];
209
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_GET] = [
210
            static::DECODE_SEPARATOR => '|',
211
            static::DECODE_PARAMS    => [
212
                static::DECODE_PARAM_RESPONSE => [
213
                    static::DECODE_PARAM_SETTING_MARKER => 0,
214
                ],
215
                static::DECODE_PARAM_CODE => [
216
                    static::DECODE_PARAM_SETTING_MARKER => 1,
217
                ],
218
            ],
219
        ];
220
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_UNIVERSAL] = [
221
            static::DECODE_SEPARATOR => '|',
222
            static::DECODE_PARAMS    => [
223
                static::DECODE_PARAM_RESPONSE => [
224
                    static::DECODE_PARAM_SETTING_MARKER => 0,
225
                ],
226
            ],
227
        ];
228
229
        $this->wiki->setText(['service', 'name'], 'RuCaptcha');
230
        $this->wiki->setText(['service', 'href'], 'http://infoblog1.ru/goto/rucaptcha');
231
        $this->wiki->setText(['service', 'desc'], [
232
            'ru' => 'RuCaptcha.com — антикапча-сервис ручного распознавания изображений, здесь встречаются те, кому нужно в режиме реального времени распознать текст с отсканированных документов, бланков, капч и те, кто хочет заработать на вводе текста с экрана. 
233
234
В системе работают русскоязычные и англоязычные работники.
235
236
Cервис антикапчи RuCaptcha.com не только поддерживает стандартное API на равне с сервисами pixodrom, antigate, anti-captcha и других, но и предоставляет расширенный фукнционал пополняющийся под каждый виток борьбы с автоматизацией. API RuCaptcha поддерживает решение ReCaptcha v2 (где нужно кликнуть по картинкам), ClickCaptcha (где нужно кликнуть в определённые точки) и Rotatecaptcha (FunCaptcha и другие капчи, которые нужно крутить).',
237
            'en' => 'RuCaptcha.com - antikapchu service manual image recognition, there are those who need real-time to recognize text from scanned documents, forms, and captures those who want to earn on entering text from the screen.
238
239
The system works the Russian-speaking and English-speaking staff.
240
241
Tuning anticaptcha RuCaptcha.com not only supports API standard on par with pixodrom services, antigate, anti-captcha and others, but also provides advanced functional replenishing at each round of combat automation. API RuCaptcha supports the decision ReCaptcha v2 (where you need to click on the pictures), ClickCaptcha (where you need to click on certain points) and Rotatecaptcha (FunCaptcha other CAPTCHA, you need to twist).',
242
        ]);
243
        $this->wiki->setText(['recognize', 'price'], [
244
            'ru' => 'От 18 до 44 руб. за 1000 капч в зависимости от нагрузки',
245
            'en' => 'Starting from 0.5 USD for 1000 solved CAPTCHAs',
246
        ]);
247
        $this->wiki->setText(['recognize', 'desc'], [
248
            'ru' => 'Расшифровка капч с картики. Необходимо указать файл с картинкой или ссылку на него.',
249
            'en' => 'Decrypt the captcha with image. You must specify a file with a picture or a link to it.',
250
        ]);
251
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_PHRASE], [
252
            'ru' => [
253
                '0 - одно слово',
254
                '1 - каптча имеет два слова',
255
            ],
256
            'en' => [
257
                '0 - one word',
258
                '1 - captcha has two words',
259
            ],
260
        ]);
261
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_REGSENSE], [
262
            'ru' => [
263
                '0 - регистр ответа не имеет значения',
264
                '1 - регистр ответа имеет значение',
265
            ],
266
            'en' => [
267
                '0 - the case of the answer is irrelevant',
268
                '1 - the register response value',
269
            ],
270
        ]);
271
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_NUMERIC], [
272
            'ru' => [
273
                '0 - параметр не задействован',
274
                '1 - капча состоит только из цифр',
275
                '2 - капча состоит только из букв',
276
                '3 - капча состоит либо только из цифр, либо только из букв',
277
            ],
278
            'en' => [
279
                '0 - parameter not used',
280
                '1 - captcha consists only of digits',
281
                '2 - captcha consists only of letters',
282
                '3 - captcha consists of either only numbers or only letters',
283
            ],
284
        ]);
285
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_LANGUAGE], [
286
            'ru' => [
287
                '0 - параметр не задействован',
288
                '1 - на капче только кириллические буквы',
289
                '2 - на капче только латинские буквы',
290
            ],
291
            'en' => [
292
                '0 - parameter not used',
293
                '1 - the captcha only Cyrillic letters',
294
                '2 - displayed in a CAPTCHA latin characters only',
295
            ],
296
        ]);
297
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_QUESTION], [
298
            'ru' => [
299
                '0 - параметр не задействован',
300
                '1 - работник должен написать ответ',
301
            ],
302
            'en' => [
303
                '0 - parameter not used',
304
                '1 - the employee must write the answer',
305
            ],
306
        ]);
307
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_CALC], [
308
            'ru' => [
309
                '0 - параметр не задействован',
310
                '1 - работнику нужно совершить математическое действие с капчи',
311
            ],
312
            'en' => [
313
                '0 - parameter not used',
314
                '1 - the worker needs to perform a mathematical operation with captcha',
315
            ],
316
        ]);
317
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_HEADER_ACAO], [
318
            'ru' => [
319
                '0 - значение по умолчанию',
320
                '1 - in.php передаст Access-Control-Allow-Origin: * параметр в заголовке ответа',
321
            ],
322
            'en' => [
323
                '0 - the default value',
324
                '1 - in.php will transfer Access-Control-Allow-Origin: * parameter in response header',
325
            ],
326
        ]);
327
        $this->wiki->setText(['menu', 'from_service'], [
328
            RuCaptchaInstruction::class,
329
            RuCaptchaClick::class,
330
            RuCaptchaGrid::class,
331
            RuCaptchaReCaptcha::class,
332
            RuCaptchaKeyCaptcha::class,
333
            RuCaptchaFunCaptcha::class,
334
            RuCaptchaReCaptchaV3::class,
335
            RuCaptchaGeeTest::class,
336
        ]);
337
    }
338
339
    /**
340
     * Баланс
341
     *
342
     * @return float
343
     */
344
    public function getBalance()
345
    {
346
        return (float) $this->requestUniversal('getbalance')[static::DECODE_PARAM_RESPONSE];
347
    }
348
349
    /**
350
     * Не верно распознана.
351
     *
352
     * @return bool
353
     */
354
    public function notTrue()
355
    {
356
        return $this->requestUniversal('reportbad')[static::DECODE_PARAM_RESPONSE] === static::RESPONSE_REPORTBAD_OK;
357
    }
358
359
    /**
360
     * Верно распознана.
361
     *
362
     * @return bool
363
     */
364
    public function true()
365
    {
366
        return $this->requestUniversal('reportgood')[static::DECODE_PARAM_RESPONSE] === static::RESPONSE_REPORTBAD_OK;
367
    }
368
}
369