Nedávno jsem si řekl, že by bylo pěkné mít možnost automaticky zjišťovat zůstatek na Paypalu (mám tam nějaké prostředky v USD, takže se mi celkové množství prostředků na účtu mění podle kurzu CZK/USD). Doufal jsem, že bude existovat nějaká jednoduchá možnost přes paypalí api, ale tam se mi nic nalézt nepodařilo.
Musela nastoupit hrubá síla a použití cURL s parsováním HTML. Oproti použití stabilního API je tu samozřejmě problém, že mé řešení přestane fungovat se změnou formátu stránky, nicméně pořád je to lepší než drátem do oka.
Jak to celé funguje? Paypal používá protokol HTTPS, cookies a zasílání přihlašovacích údajů metodou POST. Nic, co by cURL nezvládlo. Jak tedy postupovat?
Nejdříve si vytvoříme cURL element a nastavíme mu příslušné parametry.
$ch = curl_init("https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-submit&dispatch=5885d80a13c0db1f38432c9462fe731381a7a80e09148cd4c582693e11bdcccd");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "login_email=vas@email.cz&login_password=heslo");
Důležitý je hlavně poslední řádek, kde je potřeba správně nastavit váš přihlašovací e-mail a heslo na paypal. Jakmile máme vše nastaveno, můžeme provést požadavek. Ten zašle paypalu vaše přihlašovací údaje a zpět vrátí stránku, která zobrazuje „průběh přihlašování“.
$data = curl_exec($ch);
V proměnné $data tak máme obsah této stránky. Z té vykousneme adresu úvodní stránky, na kterou nás tato stránka přesměruje. Použijeme k tomu regulární výraz (potřebujeme získat obsah proměnné login_access).
if (preg_match("/login_access=(\d+)\"/", $data, $regs)) {
Jakmile tuto hodnotu získáme, vypneme zasílání POST dat, změníme URL na novou hodnotu a provedeme další cURL požadavek. Ten nám již vrátí úvodní stránku se zůstatky účtu.
$url = "https://www.paypal.com/cz/cgi-bin/webscr?cmd=_login-done&login_access=".$regs[1];
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
Ze získané stránky pomocí regulárních výrazů vykousneme zůstatek v korunách, dolarech a celkový zůstatek převedený na koruny. (V případě, že máte zůstatky v jiných měnách, je potřeba regulární výrazy upravit.
if (preg_match("/
(\d+\.\d+) CZK<\/td>/", $data, $regs)) $czk = $regs[1];
if (preg_match("/
\$(\d+\.\d+) USD<\/td>/", $data, $regs)) $usd = $regs[1];
if (preg_match("/
(\d+\.\d+) CZK<\/td>/", $data, $regs)) $total = $regs[1];
V proměnných $czk, $usd a $total pak máme uloženo množství prostředků v jednotlivých měnách a můžeme si je uložit např. do databáze.
V komentářích uvítám připomínky a doplnění.
Aktuální verzi skriptu si můžete stáhnout.
Poslední aktualizace: 2008-09-10
Historie aktualizací
2008-09-10
- první veřejná verze