У меня есть сценарий, который я использовал в течение многих лет, и теперь вдруг он не будет работать так, как предполагалось.
Вот сценарий.
define('php-steamlogin', true);
require('main.php');
$SteamLogin = new SteamLogin(array(
'username' => 'XXXXX',
'password' => 'XXX.XXX',
'datapath' => dirname(__FILE__) //path to saving cache files
));
if($SteamLogin->success){
include_once("api/AuthFunctions.php");
$SteamAuth = new SteamAuth;
// $selsec = mysql_query("SELECT * FROM bots WHERE id='1' LIMIT 1");
// $selsecnow = mysql_fetch_assoc($selsec);
$authcode = $SteamAuth->GenerateSteamGuardCode('XXXXMr8jXXXXXXc5scljA='); // shared_secret
$blank = '';
$logindata = $SteamLogin->login($blank,$authcode);
$login = array_values($logindata);
$db = mysqli_connect('localhost', 'root', '', 'mydb');
var_dump($logindata);
echo $logindata['sessionId'];
echo $logindata['cookies'];
Этодолжен показывать sessionid и cookie , и он всегда делал это правильно, но не больше.SessionID кажется NULL, и я не знаю, сделал ли Steam какое-то обновление или что могло вызвать это.
Это то, что var_dump($logindata);
показывает мне.
array (3) {["steamid"] => string (17) "76561XXX1XX17XX8" ["sessionId"] => NULL ["cookies"] => string (286) "steamCountry = XX% 7C4cbd97aaffac4XXXXX92a3318ef; steamLoginS= 76561198113017978% 7C% 7CEF264F2DAA8BEDD0C76C5AD7F6C03B2440C0BC53; steamMachineAuth7656XXXXX3017978 = XXXXXXXEFF251E143FD8A3; steamRememberLogin = 76561XXXXX017978% 7C% 7C95c377d0ce2497XXXX8a2a0e14528896; "}
так почему-то sessionID = NULL
, одна теория состоит в том, что это может быть потому, что это первый разЯ вхожу через это "устройство".Но это все равно должно работать, потому что steam не имеет никакого перезарядки при входе в аккаунт с нового устройства, только когда дело доходит до сделок, к которым этот скрипт не имеет никакого отношения.
Я что-то пропустил?Это мой код?Это пара?
Вы также можете посмотреть корыто main.php
, если это будет интересно.
<?php
defined('php-steamlogin') or die('null');
require_once("lib/Math/BigInteger.php");
require_once("lib/Crypt/RSA.php");
class SteamLogin {
public $error = false;
public $success = false;
private $config = array(
'username' => '',
'password' => '',
'datapath' => ''
);
private $accountdata = array();
public function __construct($config) {
$this->config = $config;
if ($this->config['username'] != '' && $this->config['password'] != '' && $this->config['datapath'] != '') {
if (file_exists($this->config['datapath'] . '/logindata.json')) {
$account = json_decode(file_get_contents($this->config['datapath'] . '/logindata.json'));
$this->accountdata['steamid'] = ((isset($account->steamid)) ? $account->steamid : '');
}
$this->success = true;
} else
$this->error('Bad config!');
}
public function login($authcode = '', $twofactorcode = '') {
$dologin = $this->getRSAkey();
if ($dologin->publickey_mod && $dologin->publickey_exp && $dologin->timestamp) {
$password = $this->config['password'];
$rsa = new Crypt_RSA();
$key = array('modulus' => new Math_BigInteger($dologin->publickey_mod, 16), 'publicExponent' => new Math_BigInteger($dologin->publickey_exp, 16));
$rsa->loadKey($key, CRYPT_RSA_PUBLIC_FORMAT_RAW);
$rsa->setPublicKey($key);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$enc_password = base64_encode($rsa->encrypt($password));
$login = $this->request('POST', 'https://steamcommunity.com/login/dologin/', array(
'password' => $enc_password,
'username' => $this->config['username'],
'twofactorcode' => $twofactorcode,
'emailauth' => $authcode,
'loginfriendlyname' => '',
'capatcha_text' => '',
'emailsteamid' => ((isset($this->accountdata['steamid'])) ? $this->accountdata['steamid'] : ''),
'rsatimestamp' => $dologin->timestamp,
'remember_login' => 'true',
'donotcache' => time()
));
$login = json_decode($login);
if ($login->success == false) {
if (isset($login->emailsteamid) && $login->emailauth_needed == true) {
if ($authcode == '') {
file_put_contents($this->config['datapath'] . '/logindata.json', json_encode(array('steamid' => $login->emailsteamid)));
$this->error('Please enter AUTHCODE available in your e-mail inbox (domain: ' . $login->emaildomain . ').');
} else
$this->error('You enter bad authcode!');
}else if ($login->requires_twofactor == true) {
if ($twofactorcode == '') {
$this->error('Please enter twofactorcode (mobile auth).');
} else
$this->error('You enter bad twofactorcode!');
}
}else {
preg_match_all('#g_sessionID\\s\=\\s\"(.*?)\"\;#si', $this->view('http://steamcommunity.com/id'), $matches);
return array(
'steamid' => $login->transfer_parameters->steamid,
'sessionId' => $matches[1][0],
'cookies' => $this->cookiejarToString(file_get_contents($this->config['datapath'] . '/h2px74b0c98dn2m11.txt'))
);
}
return $login;
} else
$this->error('Bad RSA!');
return $dologin;
}
public function view($url) {
return $this->request('POST', $url);
}
private function request($type, $url, $data = array()) {
$c = curl_init();
curl_setopt($c, CURLOPT_HEADER, false);
curl_setopt($c, CURLOPT_NOBODY, false);
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($c, CURLOPT_COOKIESESSION, false);
curl_setopt($c, CURLOPT_COOKIEJAR, $this->config['datapath'] . '/h2px74b0c98dn2m11.txt');
curl_setopt($c, CURLOPT_COOKIEFILE, $this->config['datapath'] . '/h2px74b0c98dn2m11.txt');
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($c, CURLOPT_CUSTOMREQUEST, strtoupper($type));
$return = curl_exec($c);
curl_close($c);
return $return;
}
private function getRSAkey() {
return json_decode($this->request('POST', 'https://steamcommunity.com/login/getrsakey/', array(
'username' => $this->config['username'],
'donotcache' => time()
)));
}
private function cookiejarToString($string) {
$cookieString = '';
$lines = explode("\n", $string);
foreach ($lines as $line) {
if (isset($line[0]) && substr_count($line, "\t") == 6) {
$tokens = explode("\t", $line);
$tokens = array_map('trim', $tokens);
$cookieString .= $tokens[5] . '=' . $tokens[6] . '; ';
}
}
return $cookieString;
}
}
?>
Что я заметил, так это то, что в функции getRSAKey()
используется ссылкаhttps://steamcommunity.com/login/getrsakey/, и когда я направляюсь к этой ссылке, она отображает "success: false"
.
Я не знаю, связано ли это с этим, но я подумал, что на это можно было бы указать.