Cum să configurați plăți periodice

Este posibil ca, la un moment dat, să doriți să implementați plăți recurente sau de abonament pentru un serviciu SaaS sau alt serviciu. Din fericire, PayPal oferă instrumentele necesare pentru a implementa o soluție integrată de plată integrată.


Ce vom construi

Notă: Eu folosesc Laravel în acest tutorial, dar poți aplica aceste concepte și în alte limbi și cadre.

Vom configura PayPal să accepte plățile pentru abonament și să ne configureze ascultătorul de notificare prin plată instantanee (IPN). După finalizarea componentei de înscriere, vom analiza procesul de anulare prin intermediul API-ului PayPal. Încep cu o aplicație barebones Laravel cu înregistrare simplă și conectare, iar noi vom adăuga componentele de care avem nevoie pentru a introduce plăți de abonament pe măsură ce procedăm prin tutorial.


Pasul 1: Configurarea butoanelor abonamentului

PayPal oferă un câmp personalizat pe care îl putem folosi pentru a transmite ID-ul utilizatorului.

Înainte de a începe, asigurați-vă că aveți un cont de afaceri PayPal. Este gratuit, dar trebuie să aveți un cont de companie pentru a implementa plăți de abonament pe site-ul dvs..

PayPal oferă mai multe tipuri de butoane pe care le putem utiliza, cum ar fi: Cumpărați acum, Abonați și Facturarea automată. Astăzi vom examina butonul de abonare. Tastele de abonament vă permit să setați suma de facturare, precum și perioada de plată recurentă. Puteți, de asemenea, să configurați o perioadă de încercare și să lăsați PayPal să creeze contul de utilizator atunci când ping-ul dvs. de pe server.

În primul rând, conectați-vă la contul dvs. PayPal și navigați la Profil -> Preferințele mele de vânzare. Apoi căutați PayPal Butoane și selectați Abonamente din lista derulantă. Asigurați-vă că completați restul informațiilor.

Vă recomandăm să lăsați neefectuată caseta "Aveți numele PayPal să creați numele de utilizator și parolele pentru clienți" și selectați opțiunea "Utilizați codul meu de comerciant securizat".

Vom permite utilizatorilor să se înscrie pentru un cont gratuit și apoi să facă upgrade ulterior.

Creați butonul și copiați codul generat; o veți folosi în aplicația dvs..

Transmiterea informațiilor suplimentare

Întrucât conectăm abonamente la conturi, va trebui să știm cine face o plată. Cel mai simplu mod de a face acest lucru este să potriviți adresa de e-mail a tranzacției PayPal cu contul de e-mail utilizat pentru a vă conecta la aplicația noastră. Acest lucru nu este sigur, totuși, deoarece mulți oameni folosesc adrese de e-mail diferite. Deci, trebuie să treci ID-ul utilizatorului din aplicația noastră în PayPal.

Din fericire, PayPal oferă un câmp personalizat pe care îl putem folosi pentru a transmite ID-ul utilizatorului. Are o limită de 256 de caractere. Așa că am de gând să folosesc o structură JSON, permițându-ne să transmitem informații suplimentare dacă ar trebui.

Asigurați-vă că verificați lista completă a variabilelor HTML acceptate.


Pasul 2: Pregătirea aplicației

Mai întâi trebuie să înființăm tabelul de plăți, unde să stocăm tranzacțiile. Să o creăm cu următoarele coloane:

  • id: Un număr întreg cu auto-incrementare și cheia primară.
  • txn_id: ID-ul tranzactiei pe care PayPal il va da. Setați ca varchar.
  • numele de utilizator: Vom folosi acest lucru pentru a configura relația noastră cu tabela de utilizator, un număr întreg va face.
  • paypal_id: ID-ul de profil PayPal pe care va trebui să-l gestionăm mai târziu. Setați ca varchar.
  • creat la: Vom folosi aceasta pentru a vedea când tranzacția este finalizată și începeți abonamentul.

De asemenea, adăugați a abonament coloană către dvs. utilizator masa. Voi stabili acest lucru ca un număr întreg pentru a permite mai multe niveluri: una, două și trei pentru a debloca caracteristici suplimentare. De asemenea, am parcurs și am creat modelul care ne va permite să interacționăm cu tabelul de plăți.


Pasul 3: Scrierea ascultătorului

PayPal oferă o soluție simplă pentru a ne anunța când a fost efectuată o plată; ei numesc Notificări de plată instantanee (IPN). Pentru a profita de IPN, trebuie să creați un ascultător IPN pentru aplicația noastră. Ascultătorul validează datele, le inserează în tabelul de plăți și stabilește nivelul de abonament al utilizatorului.

Din fericire, nu trebuie să reinventăm roata datorită acestei clase la îndemână. Vom folosi IpnListener pentru verificarea rapidă a datelor și apoi putem procesa acest lucru pentru a le introduce în baza noastră de date. Cu Laravel, putem plasa clasa în dosarul nostru de biblioteci, făcându-l autoload pentru noi.

Creați un nou controler sau rută și adăugați următorul cod:

$ listener = noul IpnListener (); încercați $ verified = $ listener-> processIpn ();  captură (Excepție $ e) ieșire (0);  dacă ($ verificat) // răspunsul IPN a fost "VERIFIED" altceva // răspunsul IPN a fost "INVALID"

Mi-am sunat dosarul ipn.php, și o voi face / IPN. Nu uitați că PayPal va trimite POST la această adresă URL; dacă utilizați verbele HTTP / REST, configurați-o corespunzător. De aici putem procesa datele noastre:

$ listener = noul IpnListener (); încercați $ verified = $ listener-> processIpn ();  captură (Excepție $ e) return Log :: eroare ($ e-> getMessage ());  dacă ($ verificat) $ data = $ _POST; $ user_id = json_decode ($ date ['personalizat']) -> user_id; $ abonament = ($ date ['mc_gross_1'] == '10')? 2: 1; $ txn = array ('txn_id' => $ date ['txn_id'], 'user_id' => $ user_id, 'paypal_id' => $ data ['subscr_id'], 'abonament' => data ('Ymd H: i: s', strtotime ('+ 1 Lună'));); Plata :: crea (TXN $);  altceva Log :: eroare ("Tranzacția nu a fost verificată"); 

În acest cod, mai întâi decodificăm JSON-ul trecut în câmpul nostru personalizat, oferindu-ne un acces facil la ID-ul utilizatorului. Apoi, setăm nivelul abonamentului pe baza valorii tranzacției și îl stocăm în baza de date. De asemenea, înregistrăm orice eroare utilizând clasa Log Laravel. Ar putea fi, de asemenea, plăcut să trimiteți o confirmare de primire către utilizator, dar vă voi lăsa la îndemână.


Pasul 4: Activarea IPN

Apoi, trebuie să activați IPN și să configurați PayPal pentru a ne asculta ascultătorii. Deoarece panoul de administrare al PayPal poate fi dificil de navigat, am inclus următoarele capturi de ecran pentru a vă ajuta să vă ghidez. Mergi la Profil -> Preferințe de vânzare:

Atunci căutați Notificări de plată instantanee:

Apoi, faceți clic pe Alegeți setările IPN:

Apoi introduceți URL-ul către ascultător:


Pasul 5: obțineți numele de utilizator API, parola și semnătura

În timp ce suntem în tabloul de bord, merită să obținem datele de identificare ale API înainte de a ne sorta procesul de anulare. Mergi la Profil -> Preferințe de vânzare:

Cauta Acces API:

Selectați opțiunea 2:

Cereți o semnătură API:

Și ia notă de acreditările dvs.:


Pasul 6: Tratarea anularilor

Trebuie să aveți un cont de companie pentru a implementa plățile pentru abonamente.

Notă: Veți avea nevoie de un certificat SSL pentru a gestiona anulările sau de PayPal cu o eroare.

Pentru a oferi cea mai bună experiență pentru utilizatori, probabil că veți dori să gestionați anulările din cadrul aplicației sau serviciului dvs. PayPal oferă câteva API-uri care ne permit să facem acest lucru: NVP sau SOAP. Aș recomanda să merg cu NVP.

Documentația PayPal pare să complicheze lucrurile, dar NVP (Pair-Name-Value) este în esență doar un șir de coduri URL pe care îl putem cURL.

Metoda care ne interesează este ManageRecurringPaymentsProfileStatus. Putem schimba starea abonamentului, alegând una dintre următoarele trei acțiuni:

  • Anulare: Numai abonamentele active sau suspendate pot fi anulate. Alegerea acestei acțiuni împiedică reactivarea utilizatorului la o dată ulterioară.
  • Suspenda: Numai abonamentele active pot fi suspendate. Această acțiune permite utilizatorilor să reactiveze mai târziu abonamentul.
  • Reactiva: Numai abonamentele suspendate pot fi reactivate, reinstalând abonamentul.

Vom folosi acțiunea de anulare, deoarece butoanele noastre de abonare creează un abonament complet nou în cazul în care utilizatorul dorește să se reactiveze mai târziu. Deci cererea noastră ar arăta așa:

$ input = intrare :: toate (); $ req = array ('USER' => 'YOUR_API_USER', 'PASSWORD' => 'YOUR_API_PASSWORD', 'SIGNATURE' => 'YOUR_API_SIGNATURE', 'VERSION' => '76 .0 ',' METHOD '=>' ManageRecurringPaymentsProfileStatus ' 'PROFILEID' => urlencode ($ input ['paypal_id']), 'ACTION' => 'Anulare', 'NOTĂ' => 'Utilizator anulat pe site';); $ ch = curl_init (); // Schimbă-le dacă testezi cu nisipul // curl_setopt ($ ch, CURLOPT_URL, 'https://api-3t.sandbox.paypal.com/nvp'); curl_setopt ($ ch, CURLOPT_URL, 'https://api-3t.paypal.com/nvp'); curl_setopt ($ ch, CURLOPT_VERBOSE, 1); curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_POST, 1); curl_setopt ($ ch, CURLOPT_POSTFIELDS, http_build_query ($ req)); curl_exec ($ ch); curl_close ($ ch); întoarcere Redirecționare :: la ('setări') -> cu ('anulat', adevărat);

Acum putem anula cu ușurință abonamentul, dar, din anumite motive, PayPal a optat să nu trimită o cerere IPN. Aceasta nu este o problemă, totuși, pe măsură ce configuram aplicația noastră pentru a include o expiră coloană. Deci, putem verifica acel câmp pentru a determina dacă utilizatorul este abonat.


Pasul 7: Redarea în cutia de nisip

PayPal oferă o cutie de nisip pentru a putea testa implementarea noastră. Dacă nu ați utilizat acest lucru înainte, va trebui să creați un cont gratuit. De acolo, veți putea să testați cu mai mulți utilizatori și tranzacții pentru a vă asigura că codul funcționează conform așteptărilor.

Ne vom testa pe ascultător, asigurându-ne că funcționează corect fără a trebui să efectueze tranzacții reale. Înainte de a face ceva în cutia de nisip, trebuie să configurați ascultătorul IPN pentru a pinge nisipul în loc de serverul live.

$ listener-> use_sandbox = true;

Acum, mergeți la PayPal Sandbox, conectați-vă, faceți clic pe Instrumente de testare din stânga și deschideți simulatorul IPN.

Introduceți adresa URL a ascultătorului și selectați Express Checkout de la drop-down. Puteți utiliza majoritatea detaliilor implicite, dar nu uitați să puneți JSON-ul în câmpul personalizat spre partea de jos a paginii.


Pasul 8: Verificarea abonamentului

Deci am creat abonamentul și am activat utilizatorii să anuleze serviciul, acum cum să verificăm acest lucru? Laravel îl face ușor, iar metoda sa se traduce în mai multe limbi și cadre. Voi adăuga o metodă pentru mine Utilizator model care ne oferă acces la abonament utilizând clasa de autorizare Laravel:

("expiră", ">", data ("Ymd H: i:") s ', time ())) -> primul (matrice (' abonament ',' expira ',' paypal_id ',' txn_id ')); 

Putem să accesăm acest lucru și să verificăm cu ușurință controlorii și opiniile noastre. De exemplu:

abonament(); dacă ($ sub && $ sub-> abonament == 1) echo 'Sunteți în planul standard';  elseif ($ sub && $ sub-> abonament == 2) echo 'Sunteți pe planul premium';  altceva echo 'Nu sunteți abonat'; ?>

In concluzie

Sperăm că acest tutorial vă oferă o idee despre cât de ușor este să configurați plăți recurente sau de abonament în aplicațiile dvs. PayPal nu este singurul procesor de plată, dar este unul dintre cele mai recunoscute și utilizate pe scară largă.

De aici, puteți adăuga chitanțe, mementouri de plată și notificări de anulare pentru a construi o soluție complet integrată.

Cod