A fizetési rendszerek

A fizetési rendszerek. PayPal

PayPal - az egyik leghíresebb a világon a fizetési rendszerek használt internetes fizetések
A kifizetések a PayPal biztonságos, ha megfelelően kihasználni a lehetőségeket.







fizetési módok

PayPal támogatja a több típusú fizetések:

A cikkben az utóbbi két módszer lesz szó. Azt szintén nem veszik figyelembe a módszer, amelyben a kosár van kialakítva a honlapunkon, és akkor minden a tartalmát a kosár át PayPal.

fizetési folyamat

Vásárlás egy „egy kattintással”

Kód egyszerű formák:

A kulcsfontosságú paraméterek

Most kell, hogy ellenőrizze az összeget és a kifizeté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.)

IPN ugyanazon ügylet lehet küldeni többször. Például, ha a fizetési bármely okból került őrizetbe, az első IPN küldjük azonnal fizetés után. Amint a kifizetést teljesített vagy törölt, akkor meg kell küldeni a második IPN. Ha az IPN-script nem tért vissza a HTTP 200 állapot, PayPal IPN küld ismétlődő egy idő után. Az első után megismételjük 10 másodperc, majd, ha szükséges, 20, majd 40, 80, stb (legfeljebb 24 óráig). Ha 4 napon belül várható válasz a script nem érhető kísérletet leáll. Ezt fel lehet használni annak érdekében, hogy ne veszítse el a számokat a tranzakciót, ha hiba történik a IPN script. Például, ha a szkript nem tud csatlakozni az adatbázishoz, amelyben adatokat tároló tranzakciókat, akkor visszatérhet HTTP 500 státusz és az IPN újra megpróbáljuk később. Ismételt IPN kerül elküldésre, ha az IPN-script nem hívja meg a PayPal szerver ellenőrzi a tranzakciót.

Amint a leírás visszatérő paraméterek rm és notify_url. IPN tört két script meghatározott paraméterek és visszaút notify_url. 2 különbség közöttük:

  1. IPN a visszatérő küldjük csak egyszer, közvetlenül a fizetés után. notify_url nevezhetjük többször (lásd. az előző fejezetben).
  2. Nyomtató visszatérő script jelenik meg a felhasználónak. Megjegyezzük, hogy ha a kimeneti hivatkozásokat tartalmaz, azokat abszolút. Következtetés notify_url script a felhasználó böngészője nem jelenik meg.

Megszerzése POST változókat tartalmaz információt a tranzakció. A leggyakrabban használt változókat:

Tranzakció típusa. Lehetséges értékek:
„Web_accept” - kifizetés megtörtént a „Buy Now” gombra
„Kosár” - a kifizetés a beépített PayPal Kosár
„Send_money” - a kifizetés a funkció használata „Send money”
„Fordított” - a pénz visszakerült a vevő saját kezdeményezésére

Fizetési állapotát. Lehetséges értékek:
„Kész” - a tranzakció sikeresen befejeződött, az átutalt pénzt a számlára az eladó. Ha txn_type = „fordított” azt jelenti, hogy a pénzt már visszatéríti a vevő számlájára
„Függőben” - fizetés késik. a késés oka - változó pending_reason. Amint a kifizetést teljesített vagy törölt, akkor a PayPal küldjön egy értesítést.
„Sikertelen” - fizetés sikertelen. Ez az állapot csak akkor lehetséges, ha a fizetési saját bankszámlájáról osuschestvyalsya
„Megtagadva” - fizetési törölték az eladó. Ez az állapot akkor jelentkezik, ha az eladó törli a kifizetés, az állam, amely már függőben
„A visszatérítés” - a pénz visszakerült a vevőnek. Ez az állapot akkor jelentkezik, ha az eladó törli a kifizetés, az állam, amely már befejeződött

példák szkriptek







Fizetés az áru a „kosárba”

Nem írom le itt a végrehajtását a tényleges „doboz”. Az egyetlen észrevétel, hogy a mi esetünkben a munkamenetet tárolja a tartalmát a kosár nem alkalmasak, mivel nem tudjuk visszaállítani az adatokat tréningen IPN-script. Az érthetőség kedvéért, úgy vélem, hogy a $ _COOKIE [ „cart_id”] tartalmazza az ID a kosarat, amellyel különbséget teszünk kosár egy felhasználó egy másik. Hagyja, hogy a tartalmát a kosár már tárolt MySQL adatbázis tábla felépítése a következő:

Kifizetése után a vevő kosár meg kell tisztítani és készített felvételeket a megrendelések táblázatban. Általános információk a megrendelések lesznek tárolva a megrendelések táblázat:

Rendelési adatok kerülnek a táblázatban tárolt ORDER_DETAILS:

Script kód, amely a megrendelőlapot (pénztár)

/ *
itt a kód, hogy csatlakozik az adatbázishoz
és kiadásához a tartalmát a kosárba
* /

script kód payment_success.php

/ *
itt a kód, hogy csatlakozik az adatbázishoz
* /

/ ********
Bizonyosodjunk meg róla, hogy ez a tranzakció nem
Azt nem kezelték korábban
******** /
$ R = mysql_query ( "SELECT ORDER_ID megrendelésekből WHERE txn_id = '$ _POST [ "txn_id"] .. "'");
list ($ példányban) = mysql_fetch_row ($ r);
mysql_free_result ($ r);
if ($ duplikált) die ( "Úgy érzem találkoztunk.");
/ ********
ellenőrizze az összeget a fizetési
******** /
$ Cart_id = intval ($ _POST [ 'ITEM_NUMBER']);
$ R = mysql_query ( „SELECT SUM (ár * mennyiség), COUNT (cart_id) a kosárból
WHERE cart_id = „$ cart_id) .;
list ($ összesen $ nitems.) = mysql_fetch_row ($ r);
mysql_free_result ($ r);
if (! $ nitems) // nem állította vissza a tartalmát a kosárba
<
mail ($ adminemail "IPN hiba" "Nem lehet visszaállítani Kosár tartalma \ r \ nCart ID:" ...
$ Cart_id. "\ R \ nTransaction ID:". $ _POST [ "txn_id"]);
die ( „Nem is emlékszem, amit fizetett forduljon”. $ adminemail.);
>
if ($ összesen! = $ _POST [ "mc_gross"] || $ _POST [ "mc_currency"]! = $ pénznemben)
<
mail ($ adminemail "IPN hiba" "A kifizetés összege nem egyezik \ r \ nCart ID:" ..
. $ Cart_id. "\ R \ nTransaction ID:". $ _POST [ "txn_id"]);
die ( "a pénz forduljon?" $ adminemail.);
>
/ ********
ellenőrizze befejeződött. alakítás érdekében
******** /
$ ORDER_DATE = időpont ( "Y-m-d H: i: s" strtotime ($ _POST [ "PAYMENT_DATE"]).);
mysql_query ( „INSERT INTO megrendelések SET
txn_id = ' "$ _POST [" txn_id "]."',
ORDER_DATE = '$ ORDER_DATE'
order_total = $ összesen,
email = ' "$ _POST [" payer_email "]."',
first_name = ' "mysql_escape_string ($ _POST [" FIRST_NAME "])."',
LAST_NAME = ' "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 "])."',
ország = 'mysql_escape_string ($ _POST [ "address_country "])."'„);
$ ORDER_ID = mysql_insert_id ();
$ R = mysql_query ( "SELECT * FROM WHERE helyezése cart_id =" $ cart_id.);
míg a ($ sor = mysql_fetch_assoc ($ r))
<
mysql_query ( „INSERT INTO ORDER_DETAILS SET
ORDER_ID = $ ORDER_ID,
item_id = "$ sor [ 'ITEM_ID'].",
ár = "$ row [ 'ár']."
mennyiség = „$ sor [ 'mennyiség']) .;
>
mysql_free_result ($ r);
mysql_query ( "DELETE FROM WHERE helyezése cart_id =" $ cart_id.);
mail ($ adminemail "Új rend", "Új rend \ r \ Norder ID:" ... $ ORDER_ID "\ r \ nTransaction ID:".
. $ _POST [ "txn_id"]);
/ *
tájékoztatni arról, hogy a megrendelést elfogadja, köszönöm a vásárlást, és
hez vásárolni valami mást * /
?>

A visszatérő kényelmes, mert lehetővé teszi, hogy közvetlenül a kifizetés után, hogy ki a vizsgálat eredményét a felhasználó számára. Azonban ez az ellenőrzés nem 100% -ban biztos, hogy a pénzt valóban jóváírták. Például, ha a vevő fizet elektronikus ellenőrzését (e-check), a pénz kerül jóváírásra csak kézhezvétele után a bank feldolgozása, és a beiratkozás nem garantált. értesíti-url nem rendelkezik ezzel a hátránnyal, mivel lehetővé teszi, hogy nyomon kövesse az időben tényleges kézhezvétele pénzt. Az alábbi példában megmutatom, hogyan tudja kezelni ismételt IPN példaként előfizetési tartalmat.

IPN-script előfizetésre kezelje többféle IPN. Gyakran nehéz. Azt részletesen leírja a különböző IPN (txn_type)

A legtöbb esetben elegendő, hogy észre subscr_signup feldolgozás. subscr_cancel. subscr_payment és subscr_eot.

Tegyük fel, hogy van egy forrás, hogy azt akarjuk, hogy a fizetett hozzáférést. A fizetés 10 $ havonta, amennyiben egy héten ingyenes, de korlátozott hozzáférést.

Előfizetői adatait tárolja az előfizetők táblázatban

A szkript ellenőrzi a felhasználónév és jelszó szükséges, hogy egy korlátozott területen, hogy eldöntsék, hogy a felhasználó teljes vagy korlátozott hozzáférést.

Script kód, amely a jegyzési ív

Generációs felhasználói nevet és jelszót biztosítunk PayPal (usr_manage = 1). Miután előfizetett, ipn.php script megkapja IPN (txn_type = subscr_signup). További IPN fogjuk feldolgozni csak subscr_payment subscr_eot és küldjük, ha változik az előfizetési állapot.

script kód ipn.php


/ *
itt a kód, hogy csatlakozik az adatbázishoz
* /

következtetés

Végül néhány tipp




Kapcsolódó cikkek