Hur man accepterar betalningar med Stripe

Förädling av kreditkort är tyvärr mycket svårare än vi hoppas, som utvecklare. Med tanke på att det är en sådan gemensam uppgift, är det verkligen nödvändigt att vi hoppar igenom otaliga hoops (omgiven av eld, förstås) för det enda syftet att behandla en betalning? Merchants? Gateways? SSL? Säkerhet? Mycket snabbt kan en till synes enkel operation bli en överväldigande förvirrande och, ännu viktigare, farlig uppgift. När du befinner dig som hanterar en användares känsliga data, bor du bättre på tårna.

Stripe översätter en komplicerad, förvirrande och farlig operation till ett enkelt API-samtal.

Skulle det inte vara fantastiskt om det fanns en tjänst som gjorde denna process så lätt som möjligt? En tjänst som byggdes av utvecklare för utvecklare. Vilken tanke! Ange Stripe; inga handlare konton, inga gateways. Ett API-samtal, tillsammans med några säkerhetsriktlinjer, är allt som du behöver börja acceptera kreditkortsbetalningar idag.

Medan Stripe inte är gratis frågar de bara om 2,9% av varje avgift (plus .30 cent). Det är allt. Inga installationsavgifter, lagringsavgifter, dolda kostnader - inget av det. Bara 2,9%. Inte dåligt!


5 Key Stripe-funktioner

  1. Enkel: Manuell hantering av kreditkort är svår och farlig. Med Stripe är det en film! Du kan till och med bearbeta avgifter från kommandoraden!
  2. Billig: Olika betalningshandlare är notoriska för sina dolda avgifter. Stripe berättar framför dig exakt vad du kan förvänta dig att betala: 2,9% per laddning + 30 cent. Inga setup avgifter. Inga dolda avgifter. Inga kortlagringsavgifter.
  3. Intuitivt API: Stripes API är ren, vilsam och lätt att använda.
  4. Används av Cool Kids: Om adoption är ett problem behöver det inte vara. Otaliga tjänster hävstång Stripe, inklusive Reddit, Grooveshark och Shopify.
  5. Byggd av utvecklare: Mycket tydligt, Stripe byggdes för att skrapa en utvecklarens kliar. Teamet är fullt av utvecklare och entreprenörer, precis som du.

Nu gör vi det

Såld? Jag var också. Låt oss bearbeta vår första testbetalning. Naturligtvis, innan du börjar, besök stripe.com, skapa ett nytt konto (gratis) och fyll i de olika blanketterna, till exempel uttalande deskriptor och din bankinformation.

Stripes uppmärksamhet på elegans sträcker sig till sin designavdelning.

Att ladda en användare kräver två kärnsteg:

  1. Hämta användarens kreditkortsinformation och skicka en AJAX-begäran till Stripes server, som kommer att returnera en unik token som representerar denna säkra data.
  2. Använd ditt valfria server-språk (PHP för den här artikeln), skapa en ny Strip-laddning, som passerar genom den unika token.

Skapa ett betalningsformulär

Naturligtvis är det första steget att skapa en betalningsblankett för din produkt. Du har två alternativ: använd Stripes checka ut script, som automatiskt skapar formuläret, validerar användarens inmatning och genererar den unika token för användarens kreditkortsdata. I situationer då konfiguration och styling är flexibla, är detta en utmärkt väg att ta. Sätt in en skript tagg tillsammans med en handfull anpassade HTML5 attribut, och du är klar!

 
Stripe erbjuder en inbäddbar form som påskyndar processen för att acceptera betalningar.

Men i de flesta situationer behöver du full kontroll. Som sådan, i den här artikeln använder vi en anpassad blankett. I det här avsnittet uppnår vi tre saker:

  1. Använd ett formulär för att samla användarens kreditkortsinformation
  2. Konvertera den data till ett unikt enstaka token
  3. Skicka formuläret till servern tillsammans med token

En grundläggande betalningsblankett kan se ut:

 

Lägg märke till hur vi inte behöver mycket information för att bearbeta ett kreditkort. Tekniskt är den enda information som Stripe kräver ett kreditkortsnummer och utgångsdatum. Men som en tumregel, desto bättre blir informationen som du hämtar från användaren. Skulle avgiften bestridas kommer denna extra information att vara till nytta. Eller, med andra ord, ju mer information du begär, desto mer sannolikt är det att den äkta ägaren av kreditkortet placerar transaktionen. Nyckeln är att hitta linjen mellan tillräckligt och så mycket att användaren inte stör om att fylla i formuläret. Minst, begära användarens namn, e-postadress, kreditkortsnummer, utgångsdatum och CVC-nummer.

För att fortsätta borra i huvudet, låt aldrig känslig kreditkortsdata röra din server. Att göra det har potential att skapa en värld av ont, om den utförs felaktigt. I stället ta den enkla vägen: se till att inmatnings för användarens kreditkortsdata innehåller inte namn attribut. Genom att utelämna detta attribut kan data inte läggas ut på din server.

Var uppmärksam på de anpassade attributen på ingångarna, till exempel data rand = "nummer". Stripe erbjuder ett plugin, stripe.js, som hjälper till att sammanställa användarens angivna data och generera token. Stripe söker efter attributen och hämtar sina respektive värden.

Att använda stripe.js, hänvisa manuset till ditt projekt och ange din publicerbara nyckel, som kommer att tillhandahållas när du registrerar dig med Stripe. Vi använder också jQuery i den här artikeln, men det är absolut inte nödvändigt.

   

Tänk på setPublishableKey som ett sätt att identifiera din webbplats när du kommunicerar med Stripe. Vid anmälan kommer du att presenteras med två olika versioner av denna nyckel, för testning respektive produktion.

Därefter måste vi skapa det unika, enanvända token för användarens kreditkortsdata. Vi kan använda Rand objekt, som tillhandahålls av det manus som vi importerade, för detta ändamål. Ännu bättre, vi behöver inte oroa oss för serialisering av betalningsformulärets data. gå enkelt igenom formen jQuery-objektet och Stripe hanterar resten.

 // Händelsemedlemmar $ ('# betalningsformulär'). På ('skicka', genereraToken); var genereraToken = funktion (e) varform = $ (detta); // Inga tryck på knappen Köp nu mer än en gång form.find ('knapp'). Prop ('disabled', true); // Skapa token, baserat på formobjektet Stripe.create (form, stripeResponseHandler); // Förhindra formuläret från att skicka e.preventDefault (); ; var stripeResponseHandler = funktion (status, svar) ;

Med denna bit av JavaScript, när betalningsformuläret skickas, försöker Stripe skapa en enstaka token, med hjälp av relaterade data från de ingångar som inkluderar rand- specifika anpassade attribut. Det andra argumentet till skapa Metoden är en återuppringning som kommer att få token (response.id) från Stripes server, och fortsätt därefter.

Inom denna återuppringning är det viktigt att verifiera resultatet (var all information tillhandahållen korrekt), sätt in token i en dold inmatning, och skicka formuläret till din server. Observera igen att kreditkortsinformationen ska / kommer inte att slå din server - endast token och känsliga data. Detta är viktigt, så skriv acceptans eller funktionstest för att verifiera det.

Din återuppringning kan se ut så här:

 var stripeResponseHandler = funktion (status, svar) varform = $ ('# betalningsformulär'); // Alla valideringsfel? om (response.error) // Visa användaren vad de gjorde fel form.find ('. betalningsfel'). text (response.error.message); // Gör inlägget klickbart igen form.find ('button'). Prop ('disabled', false);  else // Annars är vi bra att gå! Skicka in formuläret. // Sätt in det unika token i formuläret $ ('', ' typ ':' dold ',' namn ':' stripeToken ',' value ': response.id). appendTo (form); // Ring den inhemska inlämningsmetoden på formuläret // för att hålla inlämningen avstängd form.get (0) .ubmit (); ;

Det är verkligen ganska enkelt! Skicka in en AJAX-begäran till Stripes API (med hjälp av deras hjälpsamma JavaScript-plugin), hämta den genererade tokenen, sätt in den i formuläret och skicka den till din server!

laddning

Om du följer med, har du nu lyckats generera en engångs-token och skickat in betalningsformuläret. Nu är det dags för ditt server-sida språk att välja att fysiskt skapa avgiften. Kom ihåg att i föregående avsnitt gjordes ingen avgift. Vi skapade bara en token som representerade kreditkortsdata.

Stripe erbjuder ett antal serverns biblioteken för att registrera nya avgifter, eller till och med arrangera abonnemang. Chansen är hög att ditt föredragna språk är representerat (PHP, Ruby, Python, etc.).

I likhet med föregående avsnitt kan en ny avgift genomföras i några steg:

  1. Förklara din API-nyckel
  2. Använda Strip-biblioteket, gör ett API-samtal, genom att gå igenom transaktionsuppgifterna
  3. Bekräfta avgiften och fortsätt därefter.

Se Stripes bibliotek sida för installationsanvisningar. Om du använder PHP, som vi kommer att vara i den här artikeln, rekommenderas att du utnyttjar Komponisten för att ladda ner Stripe-paketet.

 "kräver": "stripe / stripe-php": "dev-master"

Kompositör är framtiden för PHP dependence management, så gå ombord nu, om du inte redan har. En grundläggande Stripe-avgift kan ha formen av:

 // Ange din API-nyckel Stripe :: setApiKey ("DIN API KEY"); försök Stripe_Charge :: create (['amount' => 2000, // det här är i cent: $ 20 'currency' => 'usd', 'card' => $ _POST ['stripeToken'], 'description' => 'Beskriv din produkt']);  fånga (Stripe_CardError $ e) // Avvisad. Bearbeta inte deras köp. // Gå tillbaka och berätta för användaren att prova ett nytt kort

Det är allt! API-nyckeln kommer att verifiera dig som en giltig Stripe-användare. Liknande den publicerbara nyckeln kommer Stripe att ge dig två olika versioner av den här nyckeln: en för testning respektive produktion.

Observera att alla avgifter till Stripe ska deklareras i cent (naturligtvis beroende på valuta). Om priserna sparas i din databas som dollar, euro eller pund, då vill du kompensera i enlighet därmed när du tar betalt.

Om inget undantag kastas kan du vara säker på att avgiften har bearbetats. Fortsätt genom att erbjuda användaren sin digitala nedladdning, eller registrera deras köp med ditt system.

Tro det eller inte, Stripes arbete är klart. Det finns säkert fler som du kan göra, som att skapa kunder och hantera prenumerationer, men när det gäller att helt enkelt hantera en enda betalning är du klar! ... Om du inte är.


SSL

Medan, ja, Stripes arbete är klart, din, å andra sidan, är det inte. Oavsett betalningsleverantör, när som helst när du arbetar med kreditkortsinformation, bör säkerheten vara en viktig fråga. Vi har redan tagit de första stegen genom att se till att kreditkortsuppgifterna aldrig berör servern, men det finns fortfarande mer att göra. Vi måste därefter säkra användarens anslutning till din server. Med andra ord behöver du ett SSL-certifikat. Under inga omständigheter ska du hoppa över det här steget!

"SSL (Secure Sockets Layer) är standard säkerhetsteknik för att skapa en krypterad länk mellan en webbserver och en webbläsare. Denna länk säkerställer att all data som skickas mellan webbservern och webbläsarna är privata och integrerade. "- info.ssl.com

När en användare erbjuder en webbplats deras kreditkortsinformation, kommer de att förvänta sig att se https inom adressfältet. Lyckligtvis är inköp av ett SSL-certifikat mycket lättare än det brukade vara. Faktum är att de flesta värdar erbjuder ett SSL-tillägg, vilket gör hela processen till ett enda klick. Detsamma gäller för olika SaaS-alternativ, till exempel Pagoda Box eller Heroku.

Tips: När du aktiverat SSL är det möjligt att bilder och tillgångar kommer att bryta. För att åtgärda detta, se till att alla webbadresser använder https, hellre än http. Eller, som en bättre lösning, använd protokollrelevanta webbadresser.

  Foo bar  Foo bar

Med denna techique, populär av Paul Irish, om den aktuella sidan använder HTTPS, kommer tillgången också att begäras med HTTPS.

Om du antar att din värd erbjuder ett SSL-tillägg med ett klick, pekar du bara på din användare på https: // version av ordersidan, och du är redo att gå!


Tips och tricks

Exemplen i denna artikel är enkla och mest processuella. Chansen är dock hög, att du kommer att arbeta med ett ramverk som stöder flera miljöer, routing och testfaciliteter. Använd följande tips som en start för att integrera Stripe med dina valfria ramar.

1. Särskilda kreditkortsnummer

Det är uppenbart att du inte vill använda riktiga kreditkortsnummer för att testa dina betalningsblanketter! Lyckligtvis har Stripe redan tänkt på detta; de innehåller ett antal kreditkortsnummer som simulerar specifika svar, till exempel en lyckad debitering, ogiltigt nummer, felaktig CVC-kod och många fler.

Här är några kortnummer som du ofta refererar till:

  • Visa godkänt: 4242424242424242
  • Mastercard Godkänd: 5555555555554444
  • Kort avvisat: 4000000000000002
  • Felaktigt nummer: 4242424242424241

2. Använd miljöer klokt

När du arbetar med Stripe har du två unika nycklar, som representerar API och publicerbara nycklar. Vidare finns det provnings- och produktionsvarianter för var och en av dessa. De flesta ramar erbjuder ett sätt att hantera flera miljöer. På så sätt, för utveckling, kommer din ansökan att använda testnycklarna korrekt, medan en gång distribueras kommer produktionsversionerna att refereras.

Nedan är ett Laravel-specifikt projekt. Laravel ger ett enkelt miljösystem. Lägg till en konfigurationsfil i en mapp som motsvarar miljönamnet, och de här värdena kommer att ta precenence över standardinställningarna.

Först ställer vi ner produktionsnycklarna:

  "PRODUKTIONS API KEY", "publishableKey '=>" PRODUKTIONSPUBLICERINGS NYCKEL "];

Och för utveckling åsidosätter vi produktionsnycklarna med sina test motsvarigheter:

  'TEST API KEY', 'publishableKey' => 'TEST PUBLISHABLE KEY'];

Nu, när programmet kräver API-nyckeln, använder du Config :: få (stripe.apiKey), Värdet som returneras bestäms av miljön. Framgång!

3. Gör inte hårddisken din till rand

Ett vanligt misstag som börjar utvecklare ger upphov till att länka sina applikationer till olika leverantörer, som Stripe. Din ansökan bör inte ta hand om vilken fakturering leverantör används. Det handlar bara om att man är tillgänglig. Genom hårdkodande referenser till Stripe i dina klasser skapar du en direkt koppling mellan de två - en som sannolikt kommer att bli svår att förändra.

Fråga dig själv, "Om jag i framtiden måste byta ut Stripe med en annan leverantör, hur svårt blir det?" Hint: allt större än "ett ögonblick"Är en kodlukt.

I stället kodar du till ett gränssnitt - kanske BillingProvider eller BillingGateway. På så sätt kan du skapa olika implementeringar av gränssnittet: en för Stripe, eller en för en annan tjänst helt, om behovet skulle uppstå. Dessa olika implementeringar kommer att rymma den tjänstspecifika funktionaliteten. Om du någon gång hittar en billigare faktureringsleverantör än Stripe, byter du ut Stripe-implementeringen av BillingProvider med en ServiceX versionen tar bara en stund - det vill säga när du har skapat den nya implementeringen som frågar efter ServiceX fakturerings API.

Här är ett skelett för hur det här kan se ut:

 // Definiera gränssnittsgränssnittet BillingProvider public function charge ($ creditInfo);  // Skapa en Stripe implementation class StripeBilling public function charge ($ creditInfo) // Stripe_Charge :: charge (...);  // Skapa en ServiceX-implementeringsklass ServiceXBilling public function charge ($ creditInfo) // ladda användaren med ServiceX

Nu när vi har två implementeringar, kan vi referera till vår nuvarande föredragna faktureringstjänst, med hjälp av beroendeinsprutning.

 klass PaymentController protected $ billing; offentlig funktion __construct (BillingProvider $ fakturering) $ this-> billing = $ fakturering; 

Med den här utvecklingsstilen behöver du inte röra kontrollen om du slutar behöva flytta från Stripe. Eftersom Stripe inte är hårdkodad vet den inte skillnaden!

4. Lämna inte köparen hängande

När du säljer digitala varor, fråga dig själv: "Vad ska köparen göra om något går fel i mitt ända?" Alltid ge något sätt för köparen att kontakta dig eller ditt företag. Vad händer om bekräftelsemailen som innehåller en länk för att ladda ner den digitala filen kommer aldrig i inköparens inkorg? Vad ska de göra?

En supportplats, eller till och med en enkel e-postadress på hemsidan, skulle hjälpa till i dessa oundvikliga situationer.

5. SSL-certifikat

DigiCert är Stripes rekommenderad SSL certifikatleverantör.

Om du manuellt måste köpa ett SSL-certifikat finns det ett antal tjänster att välja mellan. Baserat på tidigare erfarenhet kan du förvänta dig att spendera trettio minuter till en timme som ställer upp saker. Tänk på att de flesta certifikat inte är gratis och kan variera från $ 10 till $ 500, beroende på leverantören.

The Stripe-teamet rekommenderar DigiCert och Namecheap, men om du föredrar kan du överväga en fri lösning, som StartSSL.

6. Lita inte på formulärets pris

Ett vanligt misstag beror på att du använder formulärdata för att innehålla priset för den produkt som köps, eventuellt via en dold ingång. Eftersom en användare enkelt kan redigera detta ingångs värde är det oklokt att det beror på det. Hämta alltid priset på produkten från serverns sida. Lita aldrig på formuläret för att berätta. En enkel databasfråga är det föredragna alternativet.

7. Den digitala filen bör inte vara offentligt tillgänglig

Den tillgång du säljer borde aldrig vara tillgänglig för allmänheten, även om webbadressen enligt din mening är lång och förvirrande så att de flesta aldrig skulle lära sig det. Detta är en dålig övning av ett antal skäl.

Skapa istället en Nedladdningar bord som innehåller unika inköpskoder, tillsammans med deras associerade produktsidor. På så sätt, när en URI, t.ex. / Nedladdningar / 23gsfga831g, begärs kommer din ansökan att

  1. Verifiera den angivna token mot vad som lagras i databas tabellen.
  2. Svara genom att erbjuda en nedladdning för filen som är kopplad till köptoken.

För att ta saker vidare kan du också tillämpa en hämtningsgräns. Att tillåta detta skulle helt enkelt kräva att a DOWNLOAD_COUNT fält läggs till i inköp tabell. Med varje förfrågan borde detta antal ökas med en. När det här numret når ditt angivna tröskelvärde, bör inte nedladdningen tillhandahållas. Detta kan vara till hjälp i fall då du vill se till att nedladdningslänkar inte delas.


Slutsats

Det underbara med Stripe är att det översätter en komplicerad, förvirrande och farlig operation till ett enkelt, enkelt API-samtal. Inga försäljarkonton, inga gateways, inga dolda avgifter. Det finns en anledning till varför de säger att Stripe är skrattsam lätt att använda. Det är!