Utisci korisnika

"Želim da kazem da iako sam tek na pola, da sam oduševljena ovim načinom na koji stvari funkcionisu!" Stanislava Kraguljac, Beograd

Pre nepunih mesec dana kupila sam paket kurseva: PRIPREME ZA POLAGANJE CAMBRIDGE INTERNATIONAL DIPLOMA IN BUSINESS. Obično neki opšti utisak formiramo na kraju, ali ja u ovom trenutku želim sa…


Kompletna lista utisaka

Testiranje online

Arhitektura računara

Za one koji žele da znaju više.

Windows OS

Ovo bi svakako trebalo da probate.

Odnosi s javnošću

Koliko znate PR?

Pogledajte još neke od testova

Newsletter

Ukoliko želite da Vas redovno obaveštavamo o novostima sa Link eLearning sajta prijavite se na našu newsletter listu.

Ime:

Prezime:

Email:


Anketa

Arhiva anketa

BAZA ZNANJA


Kurs: PHP programiranje

Modul: PHP u produkciji

Autor:

Naziv jedinice: Rad sa servisima


Materijali vezani uz ovu lekciju:

- Rad sa servisima (PDF dokument)



Jedan od najefikasnijih sistema plaćanja na internetu je plaćanje putem PayPal sistema. Kroz ovu lekciju, naučićemo osnove implementacije PayPal sistema u web aplikaciju i korišćenje PayPal servisa za plaćanje.

Obzirom da se radi o novcu, bankovnim računima i kreditnim karticama, potrebno je dobro se pripremiti pre nego što se aplikacija koja rukuje PayPalom pusti u produkciju. Imajući ovo u vidu, PayPal nudi „lažni" servis (sandbox), koji ima funkcionalnost pravog, ali ne rukuje sa pravim računima i novcem. Ovaj servis, čija adresa je: https://www.developer.paypal.com/ služi baš za testiranje funkcionalnosti aplikacije.

Da bi radili sa PayPalom, potrebno je posedovati PayPal nalog. Najbolje je početi sa sandbox nalogom. U okviru sandbox naloga, možete napraviti više naloga jednog od dva tipa (prodavac, kupac). Za potrebe nastavka lekcije, napravite naloge za kupca i prodavca.

Nakon kreiranja naloga, potrebno je pristupiti sendbox test sajtu (gde se nalaze podaci o nalogu) i odabrati opciju merchant services.

Isprva napravićemo sistem za kupovinu samo jednog proizvoda.

Recimo da se na našoj strani nalazi neki proizvod koji je opisan kroz sledeći HTML kod:

<b>Naziv proizvoda</b><br>
Ovo je šampon za kosu...<br>
<img src="mojaSlika.jpg" mce_src="mojaSlika.jpg" /><br>
cena: 35$

Da bi se pokrenuo proces izgradnje PayPal skripte (forme) potrebno je odabrati neku od ponuđenih opcija. Na primer Buy now button.

 

U narednom meniju, treba uneti ime proizvoda, ID proizvoda (ID iz naše lokalne baze), cenu, da li želimo da pritisak na taster odmah prosledi proizvod na plaćanje ili samo u korpu...

 

 

 

Sledeća strana generisaće skriptu, koju jednostavno treba kopirati i pozicionirati na web stranu:

 

Sada će kompletan kod izgledati ovako i naplata prodaje će biti prosleđena PayPal-u:

<b>Naziv proizvoda</b><br>
Ovo je šampon za kosu...<br>
<img src="mojaSlika.jpg" mce_src="mojaSlika.jpg" /><br>
cena: 35$
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="TG849BEAFEREG">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="moj proizvod">
<input type="hidden" name="item_number" value="15">
<input type="hidden" name="amount" value="50.00">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest">
<input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" mce_src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" mce_src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

Očigledno je da je Buy now taster, koji smo implementirali u stvari obična web forma, sa dosta skrivenih kontrola i čija je ciljna aplikacija paypal servis (u našem slučaju sendbox). Kontrole prikazane u primeru nisu sve koje je moguće staviti u jednu PayPal formu. Na primer, mogli smo dodati kontrole: return (adresa strane na koju će koristnik doći nakon uspešne transakcije), cancel_return (adresa na koju korisnik dolazi nakon prekinute transakcije)...

Ono što možemo uraditi to je da tu formu stavimo u neki dinamički proces. Na primer, while petlju, koja će čitati podatke o našim proizvodima iz baze, smeštati ih na stranu i generisati PayPal forme za svaki od njih. Za naš primer poslužićemo se opet nizovima za izvor podataka.

<?php
$proizvodi = array("sampon"=>10.10,"sapun"=>5.20,"dezodorans"=>15.99);
foreach($proizvodi as $naziv => $cena)
{
?>
<b><?php echo $naziv; ?></b><br>
cena: <?php echo $cena . "$"; ?>

//PONOVLJENI PAY PAL FORM
//SA IZMENJENE DVE LINIJE
<input type="hidden" name="item_name" value="<?php echo $naziv; ?>">
<input type="hidden" name="amount" value="<?php echo $cena; ?>">

<?php
}
?>

U petlju postavite komletan malopređašnji kod za PayPal formu, izuzev dve linije koje treba izmeniti.

Pošto su u pitanju klasične form kontrole. Iako su podrazumevano sakrivene, to nije i njihov obavezni tip i možemo ih preinačiti u neke druge vrste kontrola. Na primer, umesto:

<input type="hidden" name="amount" value="<?php echo $cena; ?>">

možemo staviti:

<input type="text" name="amount" value="<?php echo $cena; ?>">

... čime će korisniku biti omogućeno da sam unese vrednost.

 

Shopping cart (korpa)

Na sličan način, možete napraviti i shopping cart, tačnije, povezati, shopping card vašeg paypal naloga, sa vašim sajtom.

Odaberite umesto buy now, add to cart button i u podešavanjima (koja su slična kao i za buy now button) čekirajte polje Yes. create an "add to cart" button.

Nakon pritiska create button tastera, paypal će generisati skriptu.

 

Ova skripta je dovoljna za dodavanje Add to cart tastera na stranu. Ali, ukoliko želite da dodate i nezavisan taster za pregled korpe (view cart), potrebno je selektovati hiperlink create a view cart button. Nakon odabira tipa tastera, paypal će generisati još jednu skriptu. Ovaj put, za pregled korpe. Sve što treba uraditi jeste da se ove dve skripte postave na stranu. Add to cart, u neki dinamički proces, vezan za izlistavanje proizvoda na strani, a view cart, na zaseban deo strane, u statičkom obliku.

 

Ova lekcija prezentuje najosnovniji način rukovanja sa jednim od mnogobrojnih PayPal servisa i uvod je u poslovanje putem interneta.

Jedan od načina za obradu porudžbine je i preko međustrane. U ovom slučaju, korisniku se uopšte ne daje na uvid nikakva veza sa PayPalom (do momenta plaćanja), već njegova porudžbina biva obrađena u okviru sistema.

Po završenoj obradi, svi podaci se prosleđuju međustrani-broker strani, koja od prosleđenih podataka sastavlja formu. Strana automatski startuje formu pomoću JavaScripta i kupac sa podacima biva preusmeren na PayPal sajt.

<html>
<body onload="document.paypalForma.submit();">
Zahtev se procesira, molimo sacekajte
<form method="post" name="paypalForma" action="https://www.paypal.com/cgi-bin/webscr">
    <input type="hidden" name="business" value="korisnik@php.com" />
    <input type="hidden" name="cmd" value="_xclick" />
    <input type="hidden" name="amount" value="100" />
    </body>
</html>

 

IPN (Instant Payment Notification)

Ukoliko sajt na kome se vrši neka on-line prodaja, opslužuje neki materijalni sistem trgovine, dosadašnji primeri su dovoljni za kreaciju korektnog sistema za naplatu prodatih proizvoda. Naplatu je moguće proveriti putem paypal sistema i ostaje samo da se izvrši isporuka.

Ovakav sistem je, međutim, nedovoljno efikasan za postizanje automatske prodaje digitalnih sadržaja. Jer ne postoji brz, automatski sistem koji će da odradi međukorak od uspešne uplate, do notifikacije prodavca o izvršenoj uplati. U ovom procesu ispaštaće, ili kupac, koji poručuje artikal za čiju isporuku mora da čeka na proveru uplate od strane prodavca ili prodavac, koji ukoliko da materijal bez prethodne provere rizikuje krađu tog materijala.

Instant Payment Notification je upravo servis koji obrađuje ovu problematiku, za šta mu je potrebna i interakcija sa našom aplikacijom, što prodaju ovog tipa čini malo komplikovanijom za realizaciju od prethodne.

Ono što treba uraditi, da bi mogao da se koristi IPN sistem, jeste da se on omogući u korisničkom profiliu PayPal naloga.

U opciji Payment Notification Preferences treba aktivirati IPN i podesiti adresu na kojoj će se vršiti verifikacija. Ova adresa mora da bude na brzom i pouzadnom hostu.

Za verifikaciju je zadužena naša aplikacija koja treba da pošalje odgovor PayPal-u. U tu svrhu, moramo koristiti strim preko sigurnog porta. Srećom, rešenje za ovo ne moramo pisati od početka, već postoji mnoštvo gotovih klasa koje ovo omogućavaju. A pored toga, i sam PayPal, u odeljku za developere, za većinu web jezika prilaže blokove koda koji ovo rade. Iz ove aplikacije konačno možemo poslati izveštaj korisniku ili aplikaciji, da je sve u redu, i proslediti proizvod.

<?php
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . \r\n\r\n;
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
}
}
fclose ($fp);
}
?>


Smatrate da je ova lekcija korisna?  Preporučite je. Broj preporuka:0