Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Veikkauksen sivuille kirjautuminen PHP:llä

Sivun loppuun

Jarkki-99 [17.10.2018 21:00:17]

#

Moi,

Olen yrittänyt PHP:llä kirjoitella ohjelmaa jolla pääsisi kirjautumaan veikkauksen sivuille ja sen jälkeen esim. lähettämään saldokyselyn omalle tilille. Nyt ilmeisesti tulee jotain ongelmaa siinä että en osaa ottaa talteen kirjautumisen yhteydessä tulevaa cookieta. Veikkauksen GitHub sivuilla on kyllä jotain ohjeita (sport-games-robot), mutta en ilmeisesti osaa soveltaa nittä PHP:lle.

Jos jollain olisi heittää valmis koodinpätkä jolla hoidetaan kirjautuminen ja sen jälkeen vaikkapa tuo saldokysely, niin olisin kovasti kiitollinen. Ja tarkoitus tosiaan olisi hoitaa koodaus PHP:llä, koska sillä on aiemmin tullut hieman koodailtua (mutta ei näköjään tarpeeksi).

vehkis91 [18.10.2018 04:06:29]

#

Moro,

Voisitko laittaa tänne jo aikaansaamasi koodin, niin siittä voidaan sitten lähteä rakentaan toimivaa kokonaisuutta.

Jarkki-99 [19.10.2018 19:10:18]

#

Moi,

Tällaista koodia kokeilin loginin osalta.

function veikkaus_login( $user, $pass ){
	$host = "https://www.veikkaus.fi";
	$header = array(
		"Accept: application/json",
		"Content-Type: application/json",
		"X-ESA-API-Key: ROBOT"
	);

	$url = $host ."/api/bff/v1/sessions";
	$postdata = "type:STANDARD_LOGIN, login:" . $user . ", password:" . $pass;
	$ch = curl_init();

	curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
	curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
	curl_setopt( $ch, CURLOPT_ENCODING, "" );
	curl_setopt( $ch, CURLOPT_COOKIESESSION, true );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
	curl_setopt( $ch, CURLOPT_URL, $url );
	curl_setopt( $ch, CURLOPT_POST, 1 );
	curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
	curl_setopt( $ch, CURLOPT_POSTFIELDS, $postdata );
	curl_setopt( $ch, CURLINFO_HEADER_OUT , 1 );

	$data = curl_exec( $ch );

	curl_close( $ch );

	return $data;
}

Metabolix [19.10.2018 21:48:40]

#

Tiedon pitää olla JSON-muodossa, kas näin:

$postdata = json_encode(["type" => "STANDARD_LOGIN", "login" => $user, "password" => $pass]);
// Tulos: $postdata = '{"type": "STANDARD_LOGIN", "login": "käyttäjänimi", "password": "salasana"}'

Jarkki-99 [20.10.2018 10:23:55]

#

Kiitos, nyt tuo login näyttäisi menevän läpi. Tulee vastauksessa datan mukana mm. nämä tiedot.

HTTP/1.1 200 OK
Set-Cookie: isessionid=A86...
Set-Cookie: TS0150b1a4=0173...

Mitenhän näitä loginin tietoja sitten käytetään kun haetaan seuraavaksi esim. oman tilin tietoja. Pitääkö nuo cookiet lähettää seuraavilla kyselyillä curl headerissä, vai tallentaa johonkin session asetuksiin?

Veikkauksen sivuilla on ohje saldon kyselylle:

lainaus:

Tällä pyynnöllä voidaan pyytää pelitilin saldo ja tieto mahdollisista kate- varauksista.
Pyyntö:
GET /api/v1/players/self/account

Metabolix [20.10.2018 10:58:02]

#

Kun asetat myös arvon CULRLOPT_COOKIEJAR, evästeet käsitellään ja lähetetään automaattisesti. Sen sijaan CURLINFO_HEADER_OUT on yleensä tarpeeton ja vain vaikeuttaa datan käsittelyä. Katso koodivinkki kirjautumisesta.

Jarkki-99 [20.10.2018 14:46:09]

#

Kiitos jälleen, nyt menee login läpi sekä saan luettua tilin tiedot. Tästäpä on hyvä jatkaa eteenpäin pelaamisen automatiosointia.

Tässä vielä lopullinen koodi joka tuntuis toimivan OK.

function veikkaus_balance( $user,$pass ){

	// Veikkaus url
	$host = "https://www.veikkaus.fi";

	// Vaaditut otsikkotietueet
	$header = array(
		"Accept: application/json",
		"Content-Type: application/json",
		"X-ESA-API-Key: ROBOT"
	);

	// login url
	$url = $host ."/api/bff/v1/sessions";

	// curl postdata loginille
	$postdata = json_encode( ["type" => "STANDARD_LOGIN", "login" => $user, "password" => $pass] );

	// curl init
	$ch = curl_init();

	// Asetetaan curl optioita
	curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
	curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );
	curl_setopt( $ch, CURLOPT_ENCODING, "" );
	curl_setopt( $ch, CURLOPT_FAILONERROR, 1 );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
	curl_setopt( $ch, CURLOPT_URL, $url );
	curl_setopt( $ch, CURLOPT_POST, 1 );
	curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
	curl_setopt( $ch, CURLOPT_POSTFIELDS, $postdata );
	curl_setopt( $ch, CURLOPT_COOKIESESSION, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "/dev/null" );

	// Suoritetaan curl pyyntö
	$data = curl_exec( $ch );
	$info = curl_getinfo( $ch );

	// Kysellään tilin saldo jos login meni läpi
	if($info['http_code'] == 200) {
		$url = $host ."/api/v1/players/self/account";
		curl_setopt( $ch, CURLOPT_POST, 0 );;
		curl_setopt( $ch, CURLOPT_URL, $url );
		$data = curl_exec( $ch );
	} else {
		$data = "Login failed, http_code: " . $info['http_code'];
	}

	// Suljetaan curl ja palautetaan data
	curl_close( $ch );
	return $data;
}

$balance = veikkaus_balance( $login, $password );

groovyb [22.10.2018 12:07:53]

#

Sivusta tuli vaan mieleen, että miksi valitsit curlin etkä käyttänyt jotain perus REST -clienttiä joita varmaan on php:llekin pilvin pimein? Tosin PHP koodaus ei kuulu omaan portfolioon, joten saattahan tämä olla standardikin tapa tehdä tämä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta