Fizetési rendszerek

PayPal - az internetes fizetésekhez használt egyik leghíresebb fizetési rendszer a világon
A fizetések a PayPalon keresztül biztonságosak, ha a megadott funkciókat helyesen használja

A fizetési módok

Az utolsó két módszert figyelembe kell venni a cikkben. Továbbá nem gondolom, hogy a kosár alakul-e a webhelyünkön, majd a kosár tartalmát átkerül a PayPal-ba.

Fizetési folyamat

Vásárlás "egy kattintással"

A legegyszerűbb forma:

A fő paraméterek leírása

Valuta kód. Lehetséges értékek: "USD", "EUR", "GBP", "YEN", "CAD". Az alapértelmezett érték az "USD"

Most ellenőriznie kell a fizetés összegét és pénznemét. Ez az ellenőrzés azért szükséges, mert a potenciális támadó nem nehéz megváltoztatni az összeg formájában, abban az esetben az előfizetés, akkor ellenőrizze az összes paramétert az előfizetés (a rendelkezésre álló, időtartama és költsége a próbaidő időtartama és a költségek az alap előfizetési ciklus, stb.)

Az ugyanazon tranzakcióhoz IPN többször is elküldhető. Ha például bármilyen okból kifolyólag kifizetést késik, akkor az első IPN-t közvetlenül a fizetés után továbbítják. A fizetés befejezése vagy törlése után egy második IPN kerül elküldésre. Ha az Ön IPN-szkriptje nem adja vissza a HTTP 200-as állapotot, a PayPal újra próbálkozik az IPN küldésével egy idő után. Az első ismétlés 10 másodperc után, majd szükség esetén 20, majd 40, 80 stb. Után (legfeljebb 24 óra). Ha 4 napon belül nem érkezik meg a szkriptről kapott válasz, a kísérletek megszűnnek. Ezt használhatja arra, hogy ne veszítse el az ügylet adatait az IPN-parancsfájl hibája esetén. Például ha egy szkript nem tud kapcsolódni egy olyan adatbázishoz, amelyben tárolja a tranzakciós adatokat, akkor visszaadhatja az 500-as HTTP állapotot, és az IPN később újra megpróbálkozik. Másodlagos IPN is elküldésre kerül, ha az IPN-parancsfájl nem lép kapcsolatba a PayPal kiszolgálóval a tranzakció ellenőrzéséhez.

Amint a paraméterek leírása a return, rm és notify_url. Az IPN-t két visszatérési és notify_url paraméterben megadott parancsfájl előzheti meg. Két különbség van közöttük:
  1. Az IPN a visszaküldésre csak egyszer, közvetlenül a fizetés után kerül elküldésre. A notify_url többször is hívható (lásd az előző bekezdést).
  2. A visszatérési parancsfájl kimenete megjelenik a felhasználó számára. Vegye figyelembe, hogy ha a kimenet referenciákat tartalmaz, akkor abszolútnak kell lenniük. A notify_url parancsfájl kimenete nem jelenik meg a felhasználó böngészőjében.

A kapott POST változók információt tartalmaznak a tranzakcióról. A leggyakrabban használt változók a következők:

Tranzakció típusa. A lehetséges értékek a következők:
"web_accept" - a kifizetés a "Vásárlás most" gomb használatával történt
"cart" - a fizetés a beépített PayPal bevásárlókosár használatával történik
"send_money" - a fizetés a "Küldés" funkcióval történt
"fordított" - a pénzt visszaadták a vevőnek kezdeményezésére

A fizetési állapot. A lehetséges értékek a következők:
"Befejezett" - az ügylet sikeresen befejeződött, a pénzt az eladó számlájára vitték át. A txn_type = "megfordítás" esetén a pénz visszajuttatása a vevő számlájára
"Függőben lévő" - a kifizetés késik. A késleltetés oka a pending_reason változó. A fizetés befejezése vagy törlése után a PayPal újabb értesítést küld.
"Sikertelen" - a fizetés sikertelen. Ez a feltétel csak akkor lehetséges, ha a fizetés bankszámláról történt
"Denied" - a fizetést az eladó törölte. Ez a feltétel akkor fordul elő, ha az eladó visszavonta a kifizetést, amelynek állapota Függőben volt
"Visszatérített" - a pénzt visszaadták a vevőnek. Ez a feltétel akkor fordul elő, ha az eladó megszakította a kifizetést, amelynek státusza befejeződött

Minta szkriptek

Fizetés áruk "a kosár"

Nem fogom leírni a "kosár" tényleges megvalósítását. Csak azt veszem észre, hogy esetünkben a kosár tartalmának tárolására szolgáló munkamenetek alkalmatlanok, mivel nem tudjuk visszaállítani a munkamenet adatait az IPN szkriptünkben. A definíció érdekében úgy vélem, hogy a $ _COOKIE ['cart_id'] tartalmazza a kosár azonosítóját, amellyel megkülönbözteti az egyik felhasználó kosarát a másiktól. Hagyja, hogy a kosár tartalma az adatbázisunkban a MySQL adatbázisban legyen tárolva, a táblázatban a következő struktúrával: Fizetés után a vevő kosarat törölni kell, és be kell írni a rendelési táblázatot. A megrendelésekre vonatkozó általános információkat az asztal megrendelései tárolják, a megrendelés adatait pedig a table_order order_details táblázatban tárolja

A parancsfájl kimenő kódja (pénztár)

/ *
itt van az adatbázishoz csatlakozó kód
és megjeleníti a kosár tartalmát
* /

Szkript kód: payment_success.php

/ *
itt van az adatbázishoz csatlakozó kód
* /

/ ********
Biztosítjuk, hogy ez a tranzakció ne legyen
korábban feldolgozták
******** /
$ r = mysql_query ("SELECT order_id FROM megbízások WHERE txn_id = '". $ _POST ["txn_id"]. "'");
lista ($ duplikátum) = mysql_fetch_row ($ r);
mysql_free_result ($ r);
ha ($ duplikátum) meghal ("Úgy érzem, találkoztam veled korábban");
/ ********
ellenőrizze a fizetési összeget
******** /
$ cart_id = intval ($ _POST ['item_number']);
$ r = mysql_query ("SELECT összeg (ár * mennyiség), COUNT (cart_id) FROM cart
WHERE cart_id = ". $ Cart_id);
list ($ total. $ metszetek) = mysql_fetch_row ($ r);
mysql_free_result ($ r);
ha (! $ nitems) // nem tudta visszaállítani a gyűjtőtartály tartalmát
<
mail ($ adminemail. "IPN hiba". "A kosár tartalmának visszaállítása nem lehetséges \ r \ nKart azonosító:".
$ cart_id. "\ r \ nTartalomazonosító:". $ _POST ["txn_id"]);
die ("Nem tudom felidézni, hogy mit fizettél. Kérjük, lépjen kapcsolatba". $ adminemail);
>
ha ($ total! = $ _POST ["mc_gross"] || $ _POST ["mc_currency"] = $ pénznem)
<
mail ($ adminemail. "IPN hiba". "Fizetési összeg eltérés \ r \ nCart azonosító:"
. $ cart_id. "\ r \ nTartalomazonosító:". $ _POST ["txn_id"]);
die ("Pénzből? Kérjük, lépjen kapcsolatba". $ adminemail);
>
/ ********
az ellenőrzések befejeződnek. rendeljenek
******** /
$ order_date = dátum ("Y-m-d H: i: s". strtotime ($ _POST ["payment_date"]));
mysql_query ("INSERT INTO SET parancsok
txn_id = '". $ _POST [" txn_id "]."',
order_date = '$ order_date',
order_total = $ total.
email = '". $ _POST [" payer_email "]."',
first_name = '"mysql_escape_string ($ _POST [" first_name "])."',
utolsó_név = '. mysql_escape_string ($ _POST ["last_name"]). "',
utca = '. mysql_escape_string ($ _POST ["address_street"]). "',
city ​​= 'mysql_escape_string ($ _POST ["address_city"]). "',
state = '. mysql_escape_string ($ _POST ["address_state"]). "',
zip = '"mysql_escape_string ($ _POST [" address_zip "])."',
country = '. mysql_escape_string ($ _POST ["address_country"]). "'");
$ order_id = mysql_insert_id ();
$ r = mysql_query ("SELECT * FROM cart WHERE cart_id =". $ cart_id);
míg ($ sor = mysql_fetch_assoc ($ r))
<
mysql_query ("INSERT INTO order_details SET
order_id = $ order_id.
item_id = ". $ sor ['item_id'].",
ár = ". $ sor [" ár "].",
quantity = ". $ sor ['quantity']);
>
mysql_free_result ($ r);
mysql_query ("TÖLTSE A KOCSÁT, HOGY cart_id =". $ cart_id);
mail ($ adminemail "Új rendelés". "Új rendelés \ r \ nOrder azonosító:" $ order_id. "\ r \ nTranzakcióazonosító:"
. $ _POST ["txn_id"]);
/ *
Tájékoztatjuk Önöket, hogy a megrendelést elfogadják, köszönöm vásárlásukat és
ajánlat vásárolni valami mást * /
?>

A visszatérési paraméter használata kényelmes, mivel lehetővé teszi az ellenőrző eredmény azonnali kiadását a felhasználónak a fizetés után. Az ilyen ellenőrzés azonban nem biztosít 100% -os bizonyosságot arra nézve, hogy a pénzt ténylegesen jóváírták a számlánkra. Például ha a vevő fizeti az elektronikus átutalást (e-check), a pénzt csak a bank által végzett ellenőrzés feldolgozása után kell jóváírni, és a beiratkozás nem garantált. A bejelentés-url megfosztja ezt a hiányosságot, mivel lehetővé teszi a pénz tényleges átvételének pillanatát. A következő példában megmutatom, hogyan kezelheti az ismételt IPN-eket a tartalomra való előfizetéssel.

Legyen egy bizonyos erőforrás, amelyhez fizetett hozzáférést szeretnénk biztosítani. A fizetés havi 10 dollár, a héten ingyenes korlátozott hozzáférés biztosított.

Az előfizetői adatok az előfizetői táblában vannak tárolva. A felhasználói név és a jelszó ellenőrzése során a korlátozott mezőt kell meghatározni annak meghatározásához, hogy a felhasználó teljes vagy korlátozott hozzáférést kapjon.

Az előfizetési űrlapot megjelenítő szkript kódja

PayPal (usr_manage = 1) lesz a felhasználónév és a jelszó. Az előfizetés után az ipn.php parancsfájl kap IPN-t (txn_type = subscr_signup). Ha az előfizetés állapota megváltozik, további IPN-eket fogunk küldeni, csak a subscr_payment és subscr_eot kezelést fogjuk kezelni.

Ipn.php parancsfájl kód


/ *
itt van az adatbázishoz csatlakozó kód
* /

következtetés

Kapcsolódó cikkek