Använda PayPal Instant Payment Notification med PHP

Hallå där! Idag kommer vi att kombinera Paypal med PHP för att möjliggöra enkel behandling av betalningar på din webbplats.


Slutförd produkt: Förhandsgranskning

Steg 1 - Skapa ett PayPal-konto

För denna handledning behöver du en Premier PayPal-konto och en online hemsida. Börja med att gå till paypal.com och klicka på "registrera" högst upp på sidan.

Klick Komma igång under Premier Titel Du kommer att omdirigeras till en anmälningsblankett. Vänligen fyll i all nödvändig information. När ditt konto har skapats, logga in och fortsätt till steg 2.

Steg 2 - Aktivera IPN

I detta steg kommer vi att aktivera Instant Payment Notification (IPN), så när du är inloggad, vänligen klicka på Profil och välj sedan Instant Payment Notification

Nu på nästa skärm ser du att IPN är inställd på "off"; klick "Redigera" att ändra det.

I början av denna handledning nämnde jag att du skulle behöva en onlinewebbplats. Varför? Tja, vi ska fråga PayPal för att skicka oss data när en betalning är klar. PayPal kan inte nå lokala värdwebbplatser om du inte har alla inställningar konfigurerat på rätt sätt. (Detta innebär att du öppnar portar på din router). Så ska jag ange webbadressen till mitt valideringsskript, till exempel http://www.yourdomain.com/PayPal/ipn.php. PayPal skickar sedan en anmälan till min server på den webbadress jag har angett.

Steg 3 - Skapa en enkel HTML-sida

Okej, nu behöver vi en enkel och grundläggande html-sida där din besökare kan köpa tillgång till ditt nedladdningsområde.
Jag kommer inte att förklara all HTML eftersom jag tror att du borde veta grunderna i HTML innan du börjar med PHP.

index.php - En enkel HTML-sida med ett stylesheet.

    Nettuts.com | Köp tillgång till nedladdningsområde    

Köpåtkomst

Vänligen klicka på knappen nedan för att få inloggningsuppgifter för nedladdningsområdet.
Har du redan ett konto? Logga in här.

css / style.css - Ett enkelt stilark för vår HTML-sida.

 kropp bakgrund: # 2D2D2D; / * Ange webbplatsens bakgrundsfärg * / font: 11px 'Verdana'; / * Ange webbplatsens teckensnittstorlek och typsnittstyp * / #wrap margin: 0 auto; / * Center Vårt innehåll * / Bredd: 500px; / * Ange bredden för vårt innehåll * / bakgrund: #FFF; / * Ange innehåll Bakgrundsfärg * / vaddering: 10px; / * Ställ vaddering för innehåll * / border: 1px solid # 000; / * Lägg till en gräns runt innehållet * /

Steg 4 - Skapa en PayPal-knapp

Vi måste skapa en inköpsknapp, så vänligen klicka Merchant Services, och välj sedanWebbplatsbetalningsstandard

Du kan välja tre typer av knappar, Sälj enskilda objekt, Sälj flera objekt och, Prenumeration. Nu i denna handledning ska vi skapa ett enda objekt. När någon köper det här enskilda objektet, i det här fallet får du tillgång till ett hämtningsområde. När betalningen har validerats skickas ett mail med information om det.

Låt oss ange lite information för vår inköpsknapp; du kan lämna resten som det är.

När du har fyllt i varje avsnitt, generera koden. Kopiera den här koden till ditt urklipp och klistra in den på insidanindex.php - där jag lade till kommentaren på html-sidan. Läs steg 3 om det behövs.

Detta borde fungera perfekt. Användare kan klicka på knappen och slutföra köpet.

Steg 5 - Skriva ipn.php

Skapa först ipn.php så att vi kan börja skriva. Vi använder ett litet stycke som jag skapade från ett större utdrag som du kan få från Paypal hemsida.
Observera att det inte finns någon anledning att lära dig den här koden ur ditt huvud! Snippets är praktiska och sparar tid. Jag kommer att bryta ner det nedanför.

  $ värde) $ value = urlencode (stripslashes ($ value)); $ req. = "& $ key = $ value";  // Skicka tillbaka till PayPal-systemet för att validera $ header = "POST / cgi-bin / webscr HTTP / 1.0 \ r \ n"; $ header. = "Innehållstyp: Application / x-www-form-urlencoded \ r \ n"; $ header. = "Innehållslängd:". strlen ($ req). "\ R \ n \ r \ n"; $ fp = fsockopen ('ssl: //www.paypal.com', 443, $ errno, $ errstr, 30); om (! $ fp) // HTTP ERROR annars fputs ($ fp, $ header. $ req); medan (! feof ($ fp)) $ res = fgets ($ fp, 1024); om (strcmp ($ res, "VERIFIED") == 0) // BETALNING VALIDERAD & VERIFIERAD!  annars om (strcmp ($ res, "INVALID") == 0) // BETALNING INVALID & UNDERSÖK MANUAL!  fclose ($ fp); ?>

Vänligen fyll i rätt uppgifter för din databas så att vi kan infoga data i nästa steg.

PayPal POSTS data till den webbadress vi angav. I det här exemplet behöver vi bara e-postadressen från köparen, så att vi kan skicka honom sin inloggningsinformation. Denna kod ovan kommer att läsa data PayPal skickar och returnerar informationen till PayPal. Jag har lagt till två kommentarer där koden skulle komma om den validerades. Dessutom har jag också lagt till en kommentar som anger vad som ska göras om det inte är validerat.

Steg 6 - Skapa databasen

Nu ska vi fokusera på vad som ska hända om betalningen är verifierad. Först måste vi bygga ett MySQL-bord där vi lagrar användarinformationen. Bara en enkel med ett id, e-post och lösenord.

Därefter måste vi ange våra bordsuppgifter; vi behöver en ID med ett primärt nyckelval och det ska automatiskt öka nästa an e-post och Lösenord fält.

För er av er har inte tid att ange all denna information, nedan är en liten MySQL Dump-kod för att återskapa bordet.

 CREATE TABLE "användare" ("id" int (10) INTE NULL auto_increment, "email" varchar (50) INTE NULL, "lösenord" varchar (32) INTE NULL, PRIMÄR NYCKEL ('id')) MOTOR = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1; 

Steg 7 - Skapa konto

Öppna ipn.php igen. Vi kommer att skriva följande kod under rutan "// PAYMET VALIDATED".

Vårt första steg är att hämta köparens e-postadress PayPal skickar all denna information till ipn.php.

 // BETALNING VALIDERAD & VERIFIERAD! $ email = $ _POST ['payer_email'];

Vi måste skapa en sista variabel - vilket är lösenordet som vi genererar med php.

 // BETALNING VALIDERAD & VERIFIERAD! $ email = $ _POST ['payer_email']; $ lösenord = mt_rand (1000, 9999);

Som du kan se använde vi mt_rand för att skapa ett slumpmässigt lösenord - i detta fall ett numeriskt värde mellan 1000 och 9999. Därefter måste vi infoga dessa data i vår databas. För att göra så använder vi sökfrågan för mysql-inlägget.

 // BETALNING VALIDERAD & VERIFIERAD! $ email = $ _POST ['payer_email']; $ lösenord = mt_rand (1000, 9999); mysql_query ("INSERT INTO users (email, password) VALUES ('". mysql_escape_string ($ email). "', '" .md5 ($ lösenord). "')") eller dö (mysql_error ());

Här ber vi vårt skript att sätta in e-post och lösenord i vår databas. Jag har lagt till en mysql_escape_string för att säkerställa att mysql-injektion inte är möjlig. Jag har också lagt till md5-funktionen till vårt lösenord så att det kommer att lagras som en 32-karaktärs hash. Nu skapas kontot låt oss gå vidare till nästa steg.

Steg 8 - Skicka in inloggningsuppgifterna

Vi måste skriva en kod som kommer att maila inloggningsinformationen till köparen. För att uppnå detta använder vi php-postfunktionen.

 // BETALNING VALIDERAD & VERIFIERAD! $ email = $ _POST ['payer_email']; $ lösenord = mt_rand (1000, 9999); mysql_query ("INSERT INTO users (email, password) VALUES ('". mysql_escape_string ($ email). "', '" .md5 ($ lösenord). "')") eller dö (mysql_error ()); $ till = $ email; $ subject = 'Ladda ner område | Inloggningsuppgifter'; $ message = 'Tack för ditt köp Din kontoinformation ------------------------- E-post:'. $ email. ' Lösenord: '. $ Lösenord.' ------------------------- Du kan nu logga in på http://yourdomain.com/PayPal/ '; $ headers = 'Från: [email protected]'. "\ R \ n"; post ($ till, $ ämne, $ meddelande, $ rubriker);

Låt oss bryta ner den här e-postfunktionen. Vi använder variabeln $ email för att få användarens e-postadress och tilldela den till variabeln $ till.
Variabeln $ ämne är den titel / ämne som du kommer att se i ditt e-postprogram. Efter det har vi vårt meddelande, som innehåller en tacknotation samt kontouppgifterna. E-post- och $ -passordsvariablerna i meddelandet ändras till rätt information när e-postmeddelandet har skickats. Vi har också satt en anpassad rubrik. När användaren får e-postmeddelandet visas "från" adressen som "[email protected]".

Steg 9 - Ogiltig betalningsadress

En ogiltig betalning kan uppstå på grund av bedrägerier, men också på grund av ett problem med PayPal. så vi vill se till att vår kund får vad han betalat för.
Så vi ska skicka ett mail till vår webbplatsadministratör och berätta för honom att kontakta köparen för mer information. Kopiera bara e-postkoden vi använde tidigare och gör sedan de ändringar som anges nedan.

 // BETALNING INVALID & UNDERSÖK MANUELLT! $ till = '[email protected]'; $ subject = 'Ladda ner område | Ogiltig betalning '; $ message = 'Kära administratör, En betalning har gjorts men flaggas som INFALID. Vänligen kontrollera betalningsanvisningen och kontakta köparen. Köpare Email: '. $ Email.'; $ Headers = 'Från: [email protected]'. "\ R \ n"; post ($ till, $ ämne, $ meddelande, $ rubriker);

Denna kod är nästan densamma som ovan, endast vi gjort några ändringar i mottagaren, ämnet och meddelandet.

Steg 10 - Användarinloggning

Detta är vårt sista steg där vi bygger en enkel inloggningsblankett för våra köpare. Skapa en ny php-fil och namnge den login.php. Vi använder samma HTML-sida som används för index.php, bara vi kommer att göra några justeringar av innehållet på sidan, och naturligtvis lägg till lite styling till vårt inloggningsformulär.

login.php - Det här är den sida där våra köpare kan logga in.

    Nettuts.com | Logga in    

Logga in

Vänligen ange dina inloggningsuppgifter för att få tillgång till nedladdningsområdet

Lägg till style.css

 etikett display: block; / * Kontrollera att etiketten är på en enda rad * / Marginal: 3px; / * Skapa lite avstånd från inmatningsfälten * / inmatning padding: 3px; / * Ge texten lite mer utrymme * / border: 1px solid grå; / * Lägg till en ram runt inmatningsfälten * / Marginal: 3px; / * Skapa lite avstånd från etiketterna * /

Nu när vi har gjort vår form måste vi kontrollera om inloggningsuppgifterna är korrekta. Jag gjorde några ändringar till login.php så att vi kan komma igång:

    Nettuts.com | Logga in    

Logga in

Vänligen ange dina inloggningsuppgifter för att få tillgång till nedladdningsområdet

Koden ovan kommer att kontrollera om e-post och lösenord båda är upplagda. Om det är sant kan vi verifiera uppgifterna. Om inte, returnerar vi ett fel. Nästa kod vi ska skriva kommer att placeras under "// Verify". Först måste vi vrida postvariablerna i lokala variabler.

 $ email = mysql_escape_string ($ _ POST ['email']); $ password = md5 ($ _ POST ['lösenord']);

Jag har lagt till en flyktfunktion för att förhindra mysql-injektion och har omvandlat det inlämnade lösenordet till en md5-hash. Eftersom vi gjorde det i vår databas måste vi också ha användarens lösenord för att jämföra de två värdena korrekt. Nu är det dags att verifiera uppgifterna.

 $ email = mysql_escape_string ($ _ POST ['email']); $ password = md5 ($ _ POST ['lösenord']); $ gUser = mysql_query ("VÄLJ * FRÅN användare där. $ email." "OCH. $ lösenord." "LIMIT 1") eller dö (mysql_error ()); $ verifiera = mysql_num_rows ($ gUser); om ($ verifiera> 0) echo '

Logga in Komplett

Klicka här för att ladda ner vårt program

'; annars echo '

Inloggningen misslyckades

Tyvärr är dina inloggningsuppgifter inte korrekta. ';

Som du kan se kör vi en mysql-fråga och väljer alla data från vårt användartabell - men bara den rad där användarens e-postadress matchar den som finns i databasen.
mysql_num_rows kontrollerar om en match har hittats: 1 = true; 0 = false.

Det är allt!

Och det är slutet på denna handledning. Jag hoppas att du njöt av det, och gärna lämna en kommentar med dina tankar. Har några tips som kan hjälpa till?

  • Prenumerera på NETTUTS RSS-flödet för fler dagliga webbutvecklingstoppar och artiklar.