Dus wilt u online creditcards accepteren?

Tot voor kort was het accepteren van creditcards op een website duur en ingewikkeld. Maar dat was vóór Stripe: een radicaal ander en waanzinnig geweldig bedrijf voor de verwerking van creditcards. Vandaag laat ik je zien hoe je kaarten binnen 30 minuten of minder kunt accepteren - zonder een cent te besteden.

Opnieuw gepubliceerde zelfstudie

Om de paar weken bekijken we enkele van onze favoriete lezers uit de geschiedenis van de site. Deze tutorial werd voor het eerst gepubliceerd in juni 2012.


De manier waarop dingen vroeger waren

Zonder Stripe is het accepteren van creditcards op een website een enorme onderneming. Eerst moet u een 'verkopersaccount' openen. Dit is een gewone bankrekening, maar met meer kosten. Dan hebt u een "betalingsgateway" nodig - omdat de verwerking van de creditcard blijkbaar in een afzonderlijke dimensie plaatsvindt waarbij bankiers met een ijzeren vuist regeren en Lindsey Lohan een succesvolle acteercarrière heeft. En dan komen de bloedzuigers: $ 25 maandelijkse kosten. $ 99 instelkosten. $ 50 jaarlijkse kosten. $ 0,35 mislukte transactiekosten (u betaalt wanneer de kaart van uw klant niet doorkomt!). $ 0,25 + 2,0% succesvolle transactiekosten. $ 2,00 batch fee. $ 5,00 Daddy-needs-a-new-porsche fee. Het is belachelijk. De meest populaire kaartprocessor is Authorize.net, en de mensen van dat bedrijf (en zijn vele wederverkopers) besteden elke dag aan het bedenken van nieuwe, belachelijke manieren om je geld te nemen.


Voer Stripe in

De installatie duurt ongeveer vijf minuten.

Helaas, het is illegaal om de CEO van Authorize.net te ontvoeren, slather hem in barbecuesaus en laat hem vallen in een kuil van honing dassen. Maar je kunt het volgende beste ding doen: gebruik zijn service niet. Overschakelen naar Stripe. U hebt geen verkopersaccount of betalingsgateway nodig. Stripe stort geld in ieder bankrekening die je leuk vindt. Er zijn geen kosten. De installatie duurt ongeveer vijf minuten. (Ja, serieus.) En u betaalt precies één ding: 2,9% + $ 0,30 op elke succesvolle kaarttransactie. (Dus, als je iets verkoopt voor $ 30, houd je $ 28,83 en krijgt Stripe $ 1,17.) De website is eenvoudig en intuïtief en het personeel is super behulpzaam. Het enige nadeel is dat Stripe momenteel niet beschikbaar is buiten de Verenigde Staten. (Opmerking: met Stripe accepteren we creditcards uit het buitenland, maar u kunt zich niet aanmelden voor een Stripe-account buiten de VS). Ze werken aan uitbreiding naar andere landen.

De rest van deze tutorial zal in detail beschrijven hoe u Stripe op uw website implementeert met PHP en Javascript (jQuery). De service heeft ook API's voor Ruby, Python, Java en andere platforms. Hoewel het kan lijken dat er veel werk voor de boeg is, is er echt niet; je bent binnen de kortste keren weer online. Laten we beginnen:


Stap 0: installeer een SSL-certificaat

We hebben te maken met creditcardinformatie, dus we moeten natuurlijk de gebruikersverbinding met onze server beveiligen. We doen dit met behulp van een SSL-certificaat en het is niet optioneel. Niet alleen verwachten gebruikers het "https: //" -protocol op een bestelpagina te zien, Stripe vereist dit ook. Maar maak je geen zorgen: het implementeren van SSL is heel eenvoudig. Bijna alle hostingproviders bieden automatische installatie van SSL-certificaten. U koopt eenvoudig het certificaat bij uw provider en zij zullen het automatisch voor u installeren en configureren. U hoeft niets anders te doen op uw site. Als uw bestelformulier op http://mydomain.com/order.php staat, stuurt u de klant simpelweg naar https://mydomain.com/order.php en wordt de verbinding beveiligd met uw nieuwe SSL-certificaat. Dat is het!

Notitie: er is één uitzondering. Als uw bestellingspagina bronnen zoals stylesheets, scripts of afbeeldingen laadt met een absolute (in plaats van relatieve) URL, moet u ervoor zorgen dat deze URL's het protocol 'https: //' gebruiken. Als u bijvoorbeeld een afbeelding op deze beveiligde bestellingspagina op deze manier opneemt, krijgt u in de browser een waarschuwing dat de pagina zowel beveiligde als onveilige elementen bevat:

 

Om dit op te lossen, laad de afbeelding vanaf een beveiligde URL, zoals deze:

 

U hoeft zich geen zorgen te maken over dit probleem voor relatieve urls (zoals "... /images/someImage.jpg") omdat uw server deze items automatisch veilig laadt.


Stap 1: maak een account aan

Ga naar Stripe.com en maak een nieuw account aan. Zodra je de initiële gebruikersnaam / wachtwoordprompt hebt gepasseerd, klik je rechtsboven op het menu 'Uw account' en open je het deelvenster 'Accountinstellingen', dat hieronder wordt weergegeven. Zorg eerst dat je een goede "Statement Descriptor" instelt. Dit is wat klanten zullen zien op hun creditcardafschriften. Een goede beschrijving helpt de klant om te onthouden wat hij of zij heeft gekocht, zodat ze uw transactie niet voor fraude verwarren en de kosten annuleren. (Wanneer dit gebeurt, wordt dit een 'terugvordering' genoemd en betaalt u een bedrag van $ 15 bovenop het verlies van de verkoop, dus zorg ervoor dat uw descriptor is ingesteld!) Geef vervolgens de bankrekening op waarnaar u uw geld wilt laten storten. . Je bent van harte welkom om de mijne te gebruiken. En tot slot, kijk eens naar het tabblad "API Keys". We zullen deze binnenkort gebruiken, dus houd ze bij de hand.


Stap 2: maak uw betalingsformulier aan

Het volgende dat we nodig hebben, is een formulier dat onze klanten invullen om een ​​creditcardorder bij ons te plaatsen. Vandaag gebruiken we deze enorm over-vereenvoudigde PHP-pagina, genaamd "buy.php":

       

Betalingsvorm

Voornaam:

Achternaam:

E-mailadres:

Creditcardnummer:

Uiterste houdbaarheidsdatum:

CVC:

Er zijn drie dingen om op te merken over het bovenstaande codefragment.

  1. Ten eerste hebben we de actie van het formulier ingesteld op 'javascript:' in plaats van een pad naar een server-side script. (Je zult zien waarom in slechts een minuut.)
  2. Ten tweede is er een kort fragment van PHP dat automatisch ons expiratiejaarveld in de komende 20 jaar invult, zodat we dat in de toekomst niet handmatig hoeven bij te werken..
  3. Ten derde heeft geen van de formuliervelden een "naam" -parameterset. Dit is cruciaal omdat hierdoor wordt voorkomen dat de waarde van het veld (zoals het creditcardnummer) naar onze server wordt verzonden wanneer het formulier wordt verzonden. We zullen vertellen waarom dit belangrijk is in slechts een minuut.

Hoeveel informatie moet ik verzamelen??

De enige dingen die je absoluut moet een creditcard moeten in rekening brengen zijn het kaartnummer en de vervaldatum. Maar u moet altijd op zijn minst enige aanvullende informatie verzamelen. Dit is waarom: als een klant de kosten van zijn kaart betwist, moet u bewijzen dat hij inderdaad een bestelling bij u heeft geplaatst.

Hoe meer informatie u verzamelt, hoe gemakkelijker het zal zijn om te bewijzen dat de klant (in tegenstelling tot een identiteitsdief) de bestelling op uw site heeft geplaatst.


What's Next: The Big Picture

Oké, we hebben SSL geïnstalleerd en een betalingsformulier klaar voor gebruik. Laten we aannemen dat we de klant $ 20,00 in rekening zullen brengen voor deze bestelling. (In werkelijkheid zou u het totaal berekenen op basis van wat de klant heeft besteld, enzovoort. Dat is aan u.) Wanneer hij het formulier invult en op de verzendknop drukt, gebeuren er drie dingen in deze volgorde:

  1. Met behulp van Javascript (jQuery) verzamelen we de waarde van elk formulierveld. We geven deze informatie rechtstreeks door aan Stripe's server met behulp van Stripe.js.
  2. De server van Stripe zorgt ervoor dat de creditcardgegevens goed worden gevormd, een transactie voorbereiden en ons een "token voor eenmalig gebruik" terugsturen.
  3. We geven het token door aan een server-side script op onze eigen server, waardoor Stripe opnieuw contact opneemt en de daadwerkelijke afschrijving op de creditcard wordt geactiveerd. Dat is het!

Waarom doe het op deze manier?

Veiligheid. De creditcardgegevens van de gebruiker raken nooit onze eigen server. We geven het rechtstreeks door aan Stripe op de client-kant met Javascript. Stripe's server neemt die informatie en bereidt een transactie voor. Het "token" dat naar ons wordt verzonden bevat NIET de creditcardgegevens, maar bevat een ID waarmee we de transactie kunnen activeren die Stripe aan zijn kant heeft voorbereid. Zodoende kunnen we het token veilig aan onze eigen server doorgeven zonder de veiligheid van de creditcardgegevens van de gebruiker in gevaar te brengen.

Opmerking: terwijl jij kan gebruik Stripe zonder het tokenproces, I sterk ontmoedig het. Als je de onbewerkte creditcardgegevens doorgeeft aan je eigen server, moet je waanzinnig voorzichtig zijn om ze te beschermen en er zijn veel manieren om het te verknoeien. Logbestanden van serverfouten kunnen bijvoorbeeld gemakkelijk gevoelige informatie opslaan, dus u moet ze veilig en regelmatig schrobben. Als u deelneemt aan een gedeeld hostingpakket, hebt u waarschijnlijk niet de benodigde controle om dit te doen. En als je server ooit is gehackt, kun je in de vergetelheid raken door afgetelde klanten. En als je iets doet werkelijk dom als winkel niet-versleutelde kaartinformatie in een database, zal ik persoonlijk naar je huis rijden en je verslaan met een cactus. Op veilig spelen; gebruik het tokenproces.


Stap 3: verzamel de formulierwaarden

Maak een nieuw Javascript-bestand, genaamd "buy-controller.js". Laten we beginnen met het coderen van dat bestand met enkele basisvalidatiecontroles:

 function showErrorDialogWithMessage (bericht) // Voor de zelfstudie doen we alleen een melding. U moet deze functie aanpassen om // mooie "foutmeldingen op uw pagina te presenteren. alert (bericht); // Activeer de bestelknop opnieuw zodat de gebruiker het opnieuw kan proberen $ ('# buy-submit-button'). RemoveAttr ("disabled");  $ (document) .ready (function () $ ('# buy-formulier'). submit (function (event) // deactiveer onmiddellijk de submit-knop om dubbele submits $ ('# buy-submit-button') te voorkomen ) .attr ("uitgeschakeld", "uitgeschakeld"); var fName = $ ('# voornaam'). val (); var lName = $ ('# achternaam'). val (); var email = $ ('# email'). val (); var cardNumber = $ ('# card-number'). val (); var cardCVC = $ ('# card-security-code'). val (); // Voornaam en achternaam velden: zorg ervoor dat ze niet leeg zijn als (fName === "") showErrorDialogWithMessage ("Vul uw voornaam in."); Return; if (lName === "") showErrorDialogWithMessage ( "Voer uw achternaam in."); Return; // Bevestig het e-mailadres: var emailFilter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA- Z0-9 \ -]) + \.) + ([A-zA-Z0-9] 2,4) + $ /; if (email === "") showErrorDialogWithMessage ("Voer uw e-mailadres in . "); return; else if (! emailFilter.test (email)) showErrorDialogWithMessage (" Uw e-mailadres is niet geldig. "); return; // Stripe valideert het kaartnummer en CVC voor ons, dus zorg ervoor dat ze niet leeg zijn als (cardNumber === "") showErrorDialogWithMessage ("Voer uw kaartnummer in."); terug te keren;  if (cardCVC === "") showErrorDialogWithMessage ("Voer de beveiligingscode van uw kaart in."); terug te keren;  // Boom! We hebben de basisvalidatie doorstaan, dus we zijn klaar om de info naar // Stripe te sturen om een ​​token te maken! (We zullen deze code binnenkort toevoegen.)); );

Vervolgens moeten we dit nieuwe JavaScript-bestand toevoegen aan de element van onze "buy.php" -pagina. We gaan ook "Stripe.js" toevoegen. Dit bestand wordt gehost op de Stripe-server waarmee we contact met Stripe kunnen opnemen vanaf de clientzijde om creditcardgegevens door te geven en ons token te ontvangen. (Merk op dat we Stripe.js laden met behulp van het "https: //" protocol!) Wijzig de element van "buy.php" om er als volgt uit te zien:

     

API-sleutels

Voordat we informatie aan Stripe kunnen voorleggen, moeten we op de een of andere manier aan Stripe vertellen wie we zijn. Om dat te doen, gebruiken we een paar "sleutels", wat unieke tekenreeksen zijn die onze account identificeren. Om deze sleutels te vinden, gaat u naar het deelvenster Instellingen van Stripe-account en opent u het tabblad API-sleutels, hier afgebeeld:

Zoals u kunt zien, zijn er in totaal twee sleutels in twee sets: "Test" en "Live". U gebruikt de testset tijdens de ontwikkeling, zodat u uw code kunt verifiëren zonder kaarten daadwerkelijk op te laden. Wanneer u klaar bent om een ​​website te implementeren, hoeft u alleen de testsleutels te vervangen door de echte sleutels. Er zijn twee sleutels in elke set: "publiceerbaar" en "geheim". (We gebruiken de "geheime" sleutel in ons server-side script zodra we een token van Stripe hebben ontvangen.) Neem nu de publiceerbare testsleutel en voeg het als volgt toe aan het HEAD-element van "buy.php":

      

Waarschuwing: U MOET Stripe.js opnemen VOORDAT u de publiceerbare sleutel heeft ingesteld. Zorg er ook voor dat u geen website live neemt zonder over te schakelen naar de "live" -sleutels! En tot slot, wees er absoluut zeker van dat je je geheime sleutels veilig en geheim!


Stap 4: vraag een token aan

Terug aan de onderkant van 'buy-controller.js' staan ​​we klaar om de code toe te voegen die een token van Stripe aanvraagt. Het zijn maar een paar regels:

 // Boom! We hebben de basisvalidatie doorstaan, dus vraag een token aan bij Stripe: Stripe.createToken (nummer: cardNumber, cvc: cardCVC, exp_month: $ ('# expiration-month'). Val (), exp_year: $ ('# expiration- jaar '). val (), stripeResponseHandler); // Voorkom dat de standaard verzendactie op het formulierretournement false is;

De "createToken" -functie (die is gedefinieerd in Stripe.js) accepteert twee parameters. De eerste is een object met de creditcardgegevens. De tweede is de naam van de callback-functie die wordt aangeroepen wanneer de Stripe-server klaar is met het voorbereiden van de transactie en het token retourneert. In dit geval wordt onze callback-functie "stripeResponseHandler" genoemd. Laten we die functie toevoegen aan de top van "buy-controller.js":

 function stripeResponseHandler (status, reactie) if (response.error) // Stripe.js kan geen token genereren. De foutmelding zal uitleggen waarom. // Meestal is het omdat de klant zijn kaartgegevens verkeerd heeft ingevoerd. // U zou dit moeten aanpassen om het bericht op een mooie manier te presenteren: alert (response.error.message);  else // Stripe.js heeft een token met succes gegenereerd. We zijn klaar om de kaart te laden! var token = response.id; var firstName = $ ("# voornaam"). val (); var lastName = $ ("# achternaam"). val (); var email = $ ("# email"). val (); // We moeten weten welk bedrag moet worden berekend. Veronderstel $ 20,00 voor de zelfstudie. // U zou dit vanzelfsprekend zelf berekenen: var prijs = 20; // Voer de oproep naar het serverscript om de bestelling te verwerken. // Geef de token en niet-gevoelige formulierinformatie door. var request = $ .ajax (type: "POST", url: "pay.php", dataType: "json", data: "stripeToken": token, "firstName": firstName, "lastName": lastName, " email ": email," price ": price); request.done (function (msg) if (msg.result === 0) // Pas deze sectie aan om een ​​succesbericht weer te geven en alles weer te geven wat / moet worden weergegeven aan de gebruiker. alert ("De creditcard is in rekening gebracht succesvol! "); else // De kaart is NIET succesvol opgeladen, maar we hebben wel verbinding gemaakt met Stripe // prima. Er is waarschijnlijk een probleem met de creditcard van de gebruiker. // Pas deze sectie aan om een ​​waarschuwing voor een foutverklaring weer te geven (" De creditcard van de gebruiker is mislukt. ");); request.fail (function (jqXHR, textStatus) // We hebben de AJAX-aanroep naar pay.php niet gemaakt. Er is iets mis aan onze kant. // Dit zou normaal niet moeten gebeuren, maar we moeten het wel aan als dat zo is. ("Fout: kan pay.php niet aanroepen om de transactie te verwerken.");); 

Deze functie controleert eerst of er een fout is opgetreden bij het maken van het token. Als Stripe.js er niet in slaagt om een ​​geldig token terug te sturen, komt dit meestal doordat de klant een deel van zijn creditcardgegevens verkeerd heeft ingevoerd. Ze hebben mogelijk een nummer verkeerd getypt of de verkeerde vervaldatum gekozen. Gelukkig zal de foutmelding die bij het antwoord hoort u precies vertellen waarom het maken van het token is mislukt. Stripe garandeert dat dit foutbericht geschikt is voor weergave, maar het is niet uitgebreid. Verwacht strings te zien als "ongeldige vervaldatum" of "foute CVC" in plaats van volledige zinnen.

Als, aan de andere kant, alles gevalideerd en Stripe een token heeft gemaakt, zijn we klaar om dat token aan ons server-side script te geven en de charge daadwerkelijk te plaatsen. In de bovenstaande code gebruiken we de Ajax-functie van jQuery om dat te doen. We geven het token door evenals enkele informatie die we mogelijk willen opnemen in een database: de naam en e-mail van de klant. Ten slotte moeten we weten hoeveel geld we aan de kaart vragen. We gaan vandaag uit van $ 20,00, maar je zou een berekende waarde uit je winkelwagentje halen, etc. We gooien al die informatie in een JSON-object en bellen het Ajax-gesprek naar ons server-side script, "pay.php" ( welke we hieronder zullen creëren). Vervolgens kijken we eenvoudigweg naar het antwoord en presenteren we de gebruiker een succes- of foutbericht. U zou deze code uiteraard aanpassen aan het ontwerp van uw site.


Stap 5: Maak een server-side script

Het enige wat u hoeft te doen, is het PHP-script op de server maken dat de lading op de kaart van onze klant activeert. Ten eerste hebben we Stripe's PHP-bibliotheek nodig. Om het te downloaden, gaat u naar de website van Stripe, klikt u op de koppeling "Documentatie" in de rechterbovenhoek en kiest u vervolgens het gedeelte "API-bibliotheken". (Of je kunt direct hierheen gaan door hier te klikken.) Scrol omlaag de pagina tot je de PHP-sectie ziet, die er als volgt uitziet:

Download de nieuwste versie en pak het uit. Je ziet twee items: "Stripe.php" en een map met de naam "Stripe" die een heleboel andere PHP-bestanden bevat. Zet beide items in de map van uw website.

Maak nu een nieuw bestand met de naam "pay.php". We beginnen met het coderen van dit bestand met wat basisdingen:

  1, 'errorMessage' => $ bericht); echo json_encode ($ a);  // Creditcardfacturering require_once ('Stripe.php'); // verander dit pad naar waar je de Stripe PHP-bibliotheek plaatst! $ trialAPIKey = "oRU5rYklVzp94Ab0RbBTP0soVdlaEtvm"; // Dit zijn de GEHEIME sleutels! $ liveAPIKey = "4BYrmtvwLb8iiiq9KIdbnRh5KCeSfPsX"; Streep :: setApiKey ($ trialAPIKey); // Schakelen om te schakelen tussen live- en testomgevingen // Haal alle waarden op uit het formulier $ token = $ _POST ['stripeToken']; $ email = $ _POST ['email']; $ firstName = $ _POST ['firstName']; $ lastName = $ _POST ['lastName']; $ prijs = $ _POST ['prijs']; $ priceInCents = $ prijs * 100; // Stripe vereist dat het bedrag wordt uitgedrukt in centen

Bovenaan hebben we een eenvoudige functie die we zullen bellen wanneer ons script een foutmelding krijgt. Het retourneert een JSON-object met twee items: "result" en "errorMessage". Dit JSON-object wordt teruggestuurd naar "buy-controller.js" (waar we de AJAX-functie van jQuery gebruikten om dit script aan de server aan te roepen). Daar kunnen we de waarde van "resultaat" bekijken om te zien wat er is gebeurd. Als het 0 is, is het betalingsscript met succes voltooid. Als dit 1 is, heeft het script een fout gegenereerd en kunnen we het item 'errorMessage' gebruiken om te rapporteren wat er met de gebruiker is gebeurd.

Vervolgens brengen we Stripe's PHP-bibliotheek binnen die we eerder hebben gedownload. Er is niets te ingewikkeld hier; zorg er alleen voor dat u het pad in de vereiste instructie bijwerkt naar de relatieve locatie van de Stripe PHP-bibliotheek. Daarna hebben we allebei onze GEHEIM API-sleutels. We noemen de "setApiKey" -functie (die deel uitmaakt van Stripe's PHP-bibliotheek) en geven deze onze evaluatiesleutel door. Gecombineerd met de 'publiceerbare' sleutel die we eerder hebben ingesteld, heeft Stripe nu alle informatie die nodig is om onze identiteit te verifiëren en deze transactie aan onze account te koppelen. Als we de website live nemen, schakelen we natuurlijk deze verklaring over om $ liveAPIKey te gebruiken!

Waarschuwing: vergeet niet over te schakelen naar de LIVE API-sleutels wanneer u uw site publiceert! U moet zowel de "publiceerbare" sleutel in het HEAD-element van "buy.php" als de "geheime" sleutel veranderen, die in "pay.php" hierboven verschijnt.

En als laatste pakken we alle gegevens die we hebben doorgegeven via de AJAX-aanroep in 'buy-controller.js'. Merk op dat Stripe ons vereist om het bedrag van de vergoeding in centen te specificeren. Hier hebben we de waarde in dollars doorgegeven, dus vermenigvuldigen we met 100 om deze in centen om te zetten.

Laad de kaart feitelijk op

Hier is de rest van de code voor pay.php:

 probeer // We moeten al deze informatie hebben om door te gaan. Als het ontbreekt, schijn. if (! isset ($ token)) gooi nieuwe uitzondering ("Website Error: het stripe-token is niet correct gegenereerd of doorgegeven aan het script voor de betalingshandler. Uw creditcard is NIET belast. Rapporteer dit probleem alstublieft aan de webmaster."); if (! isset ($ email)) gooi nieuwe Exception ("Website Error: Het e-mailadres was NULL in het script van de betalingshandler. Uw creditcard was NIET in rekening gebracht. Rapporteer dit probleem alstublieft aan de webmaster."); als (! isset ($ firstName)) nieuwe uitzondering gooit ("Website Error: FirstName was NULL in het script van de betalingshandler. Uw creditcard werd NIET belast. Rapporteer dit probleem alstublieft aan de webmaster."); if (! isset ($ lastName)) gooi nieuwe uitzondering ("Website Error: LastName was NULL in het script van de betalingshandler. Uw creditcard werd NIET belast. Rapporteer dit probleem alstublieft aan de webmaster."); if (! isset ($ priceInCents)) gooi nieuwe uitzondering ("Website error: prijs was NULL in het script van de betalingshandler. Uw creditcard was NIET in rekening gebracht. Rapporteer dit probleem alstublieft aan de webmaster."); probeer // creëer de lading op de servers van Stripe. DIT ZAL DE KAART LADEN! $ charge = Stripe_Charge :: create (array ("amount" => $ priceInCents, "currency" => "usd", "card" => $ token, "description" => $ email)); // Als er geen uitzondering werd gegooid, was de aanklacht succesvol! // Hier kunt u de gegevens van de gebruiker opnemen in een database, een e-mail sturen, etc. // Een resultaatcode van '0' retourneren en welke andere informatie u ook wenst. // Dit is toegankelijk voor de jQuery Ajax-terugbelverzoek-handler in "buy-controller.js" $ array = array ('result' => 0, 'email' => $ email, 'price' => $ price, ' bericht '=>' Bedankt, uw transactie was succesvol! '); echo json_encode ($ array);  catch (Stripe_Error $ e) // Het laden is om een ​​of andere reden mislukt. Het bericht van Stripe zal uitleggen waarom. $ message = $ e-> getMessage (); returnErrorWithMessage ($ message);  catch (Uitzondering $ e) // Een of meer variabelen was NULL $ message = $ e-> getMessage (); returnErrorWithMessage ($ message); ?>

Verrassend eenvoudig, niet? Eerst verifiëren we dat geen van onze variabelen null is. Hoewel we niet allemaal nodig hebben om de kaart in rekening te brengen, willen we deze informatie mogelijk opnemen in een database of deze gebruiken om de klant een kwitantie per e-mail te sturen, dus we willen niet doorgaan als deze niet beschikbaar is.

Vervolgens gebruiken we de "Stripe_Charge :: create ()"-methode, die deel uitmaakt van de Stripe PHP-bibliotheek, dit is de regel die de kaart van de gebruiker daadwerkelijk laadt (of probeert, hoe dan ook) .De eerste twee items in de array spreken voor zich. waar we het token doorgeven dat we eerder bij Stripe hebben aangevraagd Het vierde item, "description", is van cruciaal belang. Wat we hier ook doorgeven is wat WE te zien krijgt als we in Stripe inloggen en onze transacties bekijken. klant die deze bestelling heeft geplaatst. Een e-mailadres is uw beste keuze, omdat veel klanten mogelijk dezelfde naam hebben.

Waarom zou de lading op dit punt falen?

Als we in staat waren om met succes een token van Stripe te krijgen, waarom zou de aanklacht dan mislukken? Het antwoord is dat de eerder uitgevoerde validatiestreep alleen controleerde of de creditcardgegevens goed waren gevormd; er is geen transactie uitgevoerd via de creditcardnetwerken. Het kan zijn dat de kaart van de klant zijn limiet overschrijdt. Of, als het een bankpas is, is er mogelijk niet genoeg geld in de rekening van de klant om deze aankoop te dekken. Het kan ook zijn dat het creditcardbedrijf de transactie eenvoudigweg als ongewoon markeert en de goedkeuring van de klant vereist om dit te laten gebeuren (dit is mij overkomen met American Express-kaarthouders). In dergelijke situaties zal de kaart correct worden gevalideerd als we om een ​​token vragen, maar falen als we proberen deze daadwerkelijk op te laden. Gelukkig maakt Stripe het heel gemakkelijk om met deze fouten om te gaan. We gebruiken gewoon try / catch-blokken, zoals je hierboven ziet.

Laad de kaart als laatste in!

Als die klant mij is, krijg je de kans om een ​​cactus te verslaan.

Als uw website dingen moet doen, zoals het genereren van een serienummer voor een softwarelicentie, moet u dat doen VOORDAT u de kaart van de klant in rekening brengt. Als u de kaart eerst in rekening brengt en uw site om welke reden dan ook geen serienummer kan genereren, wordt uw klant afgevinkt. (Als die klant mij is, loop je de kans om een ​​cactus te verslaan.) Ze kunnen zelfs hun creditcardmaatschappij bellen om de kosten te annuleren, wat resulteert in een vergoeding van $ 15 voor jou en het verlies van een verkoop. Dus speel het veilig: zorg ervoor dat u alles klaar heeft om te gaan VOORDAT u de klant in rekening brengt!

Dat is het! Dat is alle code die u nodig heeft om een ​​creditcard op uw website te laden. De rest van het artikel behandelt enkele aanvullende details over het gebruik van Stripe die u misschien handig vindt:


Testen en debuggen

Wanneer we de 'test'-API-sleutels gebruiken, kunnen we speciale creditcardnummers gebruiken die Stripe dwingen een bepaald type reactie te retourneren, zodat we onze code grondig kunnen testen. Dit zijn de speciale nummers:

  • 4242-4242-4242-4242: Simuleer een succesvolle kaarttransactie
  • 4000-0000-0000-0002: Dwingen een "kaart geweigerd" antwoord
  • 4242-4242-4242-4241: Forceer een "ongeldig kaartnummer" -antwoord

In de testmodus wordt een 3 of 4-cijferig CVC-nummer als geldig beschouwd. Elke vervaldatum die in de toekomst ligt, is geldig. U kunt een tweecijferig CVC-nummer doorgeven om die fout te testen. Op dezelfde manier kunt u elke datum in het verleden doorgeven om de ongeldige reactie op de vervaldatum te testen. En ten slotte, als u de "ongeldige hoeveelheid" -respons wilt testen, geeft u gewoon een niet-geheel getal (zoals 1,35) door als het bedrag dat u moet opladen.

Voor uitgebreide informatie over het testen van Stripe kunt u hun documentatiepagina bezoeken.


Abonnementen, Kaartinfo & meer opslaan

Met Stripe kunt u meer dan eenmalige kosten voor de kaart van een klant doen. U kunt een abonnement instellen dat de kaart een bepaald bedrag in rekening brengt met een interval naar keuze. De API's die u hiervoor nodig hebt, maken deel uit van de PHP-bibliotheek van Stripe en de website bevat uitstekende documentatie die u door het proces leidt.

Wat als u creditcardgegevens wilt opslaan zodat klanten deze niet elke keer hoeven in te voeren als ze uw site bezoeken? Met Stripe kun jij dat ook! U maakt eenvoudig een "klant" -object op vrijwel dezelfde manier als waarop we een token hebben gemaakt. Dit object bevat alle gevoelige gegevens die betrekking hebben op een bepaalde klant. Stripe slaat deze informatie veilig op aan het einde (wat betekent dat je geen cactusklopper hoeft te riskeren) en je kunt de gebruiker op elk gewenst moment in rekening brengen door eenvoudigweg het juiste 'klant'-object op te vragen, net zoals we deden met het token. Nogmaals, alle API's maken deel uit van de PHP-bibliotheek van Stripe en de website zal je er doorheen leiden.


Zie het in actie

Dus dat is het: Stripe in een notendop! Als je een goed voorbeeld wilt zien van wat we zojuist hebben behandeld met een beetje meer complexiteit en ontwerp, ga dan langs deze pagina en inspecteer de bron. (Hint: het zal er bekend uitzien.) Anders, als je vragen hebt, laat dan een reactie achter, kijk op de Stripe Support-pagina of vind me op Twitter: @bdkjones. Bedankt en veel succes!