PayPal-integratie Deel 2 PayPal REST API

Wat je gaat creëren

In deze zelfstudie laat ik u zien hoe u betalingen kunt doen met de PayPal REST API en C #. Alle bibliotheken die ze hebben voor verschillende talen zoals Ruby, Node.js, Python, PHP lijken erg op elkaar, dus alle concepten zijn hier van toepassing op alle bibliotheken.

Project Setup

Om te beginnen heb ik een MVC-project gemaakt in Visual Studio 2015: Bestand> Nieuw> Project, en selecteer ASP.NET-toepassing.

Selecteer de ASP.NET 5-webapplicatie Sjabloon, die de nieuwe MVC 6 gebruikt. Het is vergelijkbaar met MVC 5 als u hiermee bekend bent.

Zoals je op de onderstaande foto kunt zien, heb ik een paar bestanden en mappen aan de oplossing toegevoegd. De belangrijkste twee dingen om op te merken zijn:

  1. In Referenties Ik heb de doel-DNX Core 5.0 verwijderd, wat ons in staat stelt om dit project in Mac OS X of Linux uit te voeren, maar de PayPal-bibliotheek die we nodig hebben is nog niet bijgewerkt. 
  2. Ik heb de map "Services" toegevoegd, waar ik de logica voor PayPal-aanroepen ga inpakken, zodat we de controllers mooi en kort kunnen houden.

Installeer PayPal SDK met NuGet. Klik met de rechtermuisknop op de naam van de oplossing en selecteer Beheer NuGet-pakketten, en zoek dan naar "PayPal" en installeer het.

Maak een PayPal-app

Om onze applicatie te integreren met PayPal, moeten we navigeren naar PayPal-ontwikkelaars en vervolgens naar REST API-apps, Klik op Maak een app.

Geef je app een naam en kies een sandbox-ontwikkelaarsaccount die is gekoppeld aan de app. Voor testdoeleinden kunnen we vervolgens navigeren naar http://sandbox.paypal.com en inloggen met de sandbox-inloggegevens om de PayPal-rekening en -transacties van de test te zien.

Na klikken op Maak een app, we zien het bevestigingsscherm met de Client ID en geheime tokens.

Kopieer de clientId- en clientSecret-tokens naar appsettings.json, zoals je kunt zien in de onderstaande screenshot:

Betalingen testen

PayPal biedt een Sandbox-omgeving voor testen. U kunt hier testkopers en verkopersaccounts maken. Wanneer u zich aanmeldt, heeft u een zakelijk account in de Sandbox dat is gekoppeld aan uw ontwikkelaarsaccount.

Als u een nieuw testaccount wilt maken, logt u in op de ontwikkelaarssite en klikt u vervolgens op Dashboard tab en navigeer naar Sandbox> Accounts. Hier kunt u de lijst met testaccounts bekijken als u:

Als je je testaccounts nog niet hebt gemaakt, ga je gang en klik je op Maak een account aan, in de rechterbovenhoek, om ten minste één persoonlijk testaccount en één testbedrijfsaccount te maken.

Nadat u de testaccounts hebt gemaakt, kunt u zich aanmelden via www.sandbox.paypal.com met het teste-mailadres en -wachtwoord dat u aan elk account op het vorige formulier hebt toegewezen. Dit is erg handig om te testen dat wanneer u iets koopt met uw 'persoonlijke testaccount', het geld wordt overgeschreven naar uw 'testbedrijfsaccount'. Nu bent u klaar om te beginnen met de integratie met PayPal en te testen of het geld van het ene naar het andere account gaat.

Enkele PayPal-betaling

PayPal biedt verschillende betaalmethoden. U kunt directe creditcardbetalingen gebruiken, wat betekent dat uw klanten de PayPal-inlogpagina of samenvatting niet te zien krijgen - het gebeurt allemaal op uw website. Hiervoor moet je PCI-compatibel zijn en ik raad Stripe aan, omdat je alleen SSL nodig hebt met hun JavaScript-bibliotheek. Aan de andere kant, om betalingen te accepteren via PayPal-betalingen, zijn er drie stappen nodig:

  1. Geef betalingsinformatie op maak een betaling.
  2. Ontvang goedkeuring voor betaling, door uw klant door te sturen naar PayPal om de transactie goed te keuren.
  3. Voer de betaling uit om het geld op te nemen nadat PayPal uw klant doorstuurt naar uw website.

In mijn MVC-project, in de Diensten map, ik heb de PayPalPaymentService-klasse gemaakt waar ik deze methoden heb toegevoegd:

public static Payment CreatePayment (string baseUrl, stringintent) // ### Api Context // Geef een 'APIContext'-object door om de // -aanroep te verifiëren en een unieke aanvraag-id // (die idempotency garandeert) te verzenden. De SDK genereert // een verzoek-id als u er niet expliciet een doorgeeft. var apiContext = PayPalConfiguration.GetAPIContext (); // Payment Resource var payment = new Payment () intent = intent, // 'sale' of 'authorize' payer = new Payer () payment_method = "paypal", transacties = GetTransactionsList (), redirect_urls = GetReturnUrls (baseUrl , intentie); // Maak een betaling met een geldige APIC-tekst var createdPayment = payment.Create (apiContext); return createdPayment;  private statische lijst GetTransactionsList () // Een transactie definieert het contract van een betaling // wat is de betaling voor en wie vervult deze. var transactionList = new List(); // De API voor het maken van betalingen vereist een transactielijst; // voeg de gemaakte transactie toe aan een lijst transactionList.Add (nieuwe transactie () description = "transactiebeschrijving.", invoice_number = GetRandomInvoiceNumber (), amount = new Amount () currency = "USD", total = "100.00" , // Totaal moet gelijk zijn aan de som van verzendkosten, BTW en subtotaal. Details = nieuw Details () // Details: laat u details van een betalingsbedrag opgeven. Tax = "15", shipping = "10", subtotal = "75", item_list = new ItemList () items = new List() new Item () name = "Item Name", currency = "USD", price = "15", quantity = "5", sku = "sku"); return transactionList;  private static RedirectUrls GetReturnUrls (string baseUrl, string intent) var returnUrl = intent == "sale"? "/ Home / PaymentSuccessful": "/ Home / AuthorizeSuccessful"; // Doorverwijzende URL's // Deze URL's bepalen hoe de gebruiker wordt omgeleid van PayPal // nadat ze de betaling hebben goedgekeurd of geannuleerd. retourneer nieuwe RedirectUrls () cancel_url = baseUrl + "/ Home / PaymentCancelled", return_url = baseUrl + returnUrl;  public static Payment ExecutePayment (string paymentId, string payerId) // ### Api Context // Geef een 'APIContext'-object door om de // -aanroep te verifiëren en een unieke aanvraag-id // (die idempotency garandeert) te verzenden. De SDK genereert // een verzoek-id als u er niet expliciet een doorgeeft. var apiContext = PayPalConfiguration.GetAPIContext (); var paymentExecution = new PaymentExecution () payer_id = payerId; var payment = new Payment () id = paymentId; // Voer de betaling uit. var uitgevoerdPayment = payment.Execute (apiContext, paymentExecution); terugkeer uitgevoerdBetaling; 

Er worden enkele parameters doorgegeven in deze aanroep:

  • intent: Drie mogelijke waarden: 'verkoop' voor onmiddellijke betalingen, 'autoriseren' om een ​​betaling te autoriseren om later te ontvangen, of 'bestellen' om een ​​bestelling te maken. Wanneer u de machtiging voor een betaling die later wordt vastgelegd, hebt u 3 dagen garantie, hoewel u kunt proberen de betaling tot 29 dagen later vast te leggen.
  • Betaler: Bron van de fondsen voor deze betaling, betalingsmethode die wordt gebruikt: PayPal-portemonneebetaling, bankoverschrijving of directe creditcard. 
  • transacties: Dit wordt gebruikt om het bedrag voor de betaling op te geven en optioneel de items op te geven waarvoor wordt betaald. U kunt ook het subtotaal, verzending en belasting opgeven indien nodig.
  • Omleidings-URL's: Geef de URL op waarnaar PayPal uw klanten zal doorsturen na een transactie, zodat u uw database kunt bijwerken en een bevestigingsbericht kunt weergeven.

De voorgaande functies kunnen als volgt uit uw controller worden gebruikt:

public IActionResult CreatePayment () var payment = PayPalPaymentService.CreatePayment (GetBaseUrl (), "sale"); return Redirect (payment.GetApprovalUrl ());  public IActionResult PaymentCancelled () // TODO: verwerking geannuleerde betaling retour RedirectToAction ("Fout");  public IActionResult PaymentSuccessful (string paymentId, string token, string PayerID) // Execute Payment var payment = PayPalPaymentService.ExecutePayment (paymentId, PayerID); return View (); 

Zoals je kunt zien, heb ik drie acties gemaakt:

  • CreatePayment: Dit is de actie die de betaling activeert. Hij belt naar PayPal om de betaling te maken en stuurt de gebruiker vervolgens door naar PayPal om de transactie goed te keuren.
  • Betaling gelukt: Dit is de actie waarbij PayPal onze klant terugleidt na een succesvolle betaling. Op dit moment kunnen we de betaling uitvoeren om het geld over te maken naar onze verkopersaccount.
  • PaymentCancelled: Met deze actie wordt de gebruiker omgeleid van PayPal als de gebruiker het goedkeuringsproces annuleert. Op dit moment wilt u waarschijnlijk de optie aan de klant geven om het opnieuw te proberen of om contact met u op te nemen.

Autorisatie van een betaling om later vast te leggen

Dit scenario lijkt veel op het vorige geval. U kunt deze methode gebruiken als u pre-orders probeert uit te voeren voor een product dat nog niet beschikbaar is. De stappen om deze betaling te krijgen zijn:

  1. Autoriseer de betaling: De 'intent' parameter voor deze call zou 'authorize' moeten zijn.
  2. Leg de betaling vast: Houd er rekening mee dat autorisaties maximaal 3 dagen worden gegarandeerd, hoewel u kunt proberen een betaling tot maximaal 29 dagen vast te leggen.

Om dit type betaling te implementeren, heb ik slechts één nieuwe methode toegevoegd aan de klasse PayPalPaymentService om de betaling vast te leggen:

openbare statische Capture CapturePayment (string paymentId) var apiContext = PayPalConfiguration.GetAPIContext (); var payment = Payment.Get (apiContext, paymentId); var auth = payment.transactions [0] .related_resources [0] .autorisatie; // Geef een hoeveelheid op die moet worden vastgelegd. Door 'is_final_capture' in te stellen op true, worden alle resterende middelen die in het bezit zijn van de autorisatie vrijgegeven van het financieringsinstrument. var capture = new Capture () amount = new Amount () currency = "USD", total = "4.54", is_final_capture = true; // Een geautoriseerde betaling vastleggen door te POSTEN naar // URI v1 / payments / authorization / authorization_id / capture var responseCapture = auth.Capture (apiContext, capture); return responseCapture; 

Vervolgens heb ik vanuit de HomeController twee nieuwe acties toegevoegd om dit type betaling te tonen:

public IActionResult AuthorizePayment () var payment = PayPalPaymentService.CreatePayment (GetBaseUrl (), "authorize"); return Redirect (payment.GetApprovalUrl ());  public IActionResult AuthorizeSuccessful (string paymentId, string token, string PayerID) // Capture Payment var capture = PayPalPaymentService.CapturePayment (paymentId); return View (); 
  • AuthorizePayment is de actie die de betaling activeert. Het lijkt erg op de vorige 'CreatePayment'-functie, maar we geven' autoriseren 'door als de intentieparameter in dit geval.
  • AuthorizeSuccessful is de actie waarbij uw klant wordt omgeleid na het succesvol goedkeuren van de betaling op PayPal. Op dit punt vang ik de betaling, maar u kunt het paymentId in uw database opslaan en de betaling vastleggen wanneer dat nodig is.

In deze codevoorbeelden heb ik voor de eenvoud de betalingsvariabele-waarden hard gecodeerd. In uw echte toepassing zult u ze waarschijnlijk verpakken in methoden die al die waarden als variabelen opnemen, zodat alles dynamisch kan worden ingesteld en opnieuw kan worden gebruikt.

abonnementen

Dit wordt in PayPal 'factureringsplannen' genoemd. U kunt periodieke betalingsplannen maken en uw klanten abonneren op een factureringsplan door een factureringsovereenkomst te maken. Met behulp van de PayPal REST API kunt u facturatieplannen maken, bijwerken of verwijderen; dit is iets dat u zou kunnen gebruiken als u een beheerderspaneel wilt bouwen om deze zaken voor uw bedrijf te beheren.

De stappen om terugkerende kosten voor uw klanten te creëren, zijn:

  1. Maak een facturatieplan en activeer het. Nadat u een factureringsplan heeft gemaakt, is het in de staat CREATED. Het moet worden geactiveerd door een PATCH-verzoek te doen.
  2. Maak een factureringsovereenkomst en voer het uit: Het antwoord op de aanroep om een ​​factureringsovereenkomst te maken bevat de koppelingen naar approval_url en execute_url. We moeten de goedkeuring voor de factureringsovereenkomst krijgen en vervolgens de factureringsovereenkomst uitvoeren.

Facturatieplannen

Maak een facturatieplan

Maak een factureringsplan dat de factureringsperioden definieert. Dit is een samenvatting van de parameters die we moeten doorgeven om een ​​plan te maken.

  • Naam: Naam van het facturatieplan.
  • Omschrijving: Beschrijving van het facturatieplan.
  • Type: Toegestane waarden zijn 'FIXED' voor een vast aantal terugkerende betalingen, of 'INFINITE' voor een plan dat terugkeert totdat het handmatig wordt geannuleerd.
  • Handelaarsvoorkeuren: Dit is een object dat voorkeuren specificeert, zoals opstartkosten, maximale mislukte pogingen van een betaling, retour-URL, annulerings-URL, kennisgeving URL, waar PayPal de gebruiker zal omleiden na een betaling.
  • Betalingsdefinities: Matrix van betalingsdefinities voor dit plan. Normaal gesproken zou deze array een of twee betalingsdefinities hebben. Als we een gratis proefversie of proef willen aanbieden tegen een gereduceerde prijs, stellen we twee betalingsdefinities op. De eerste is de definitie voor de proefperiode en de tweede definitie is de reguliere betaling. De eigenschappen voor een betalingsdefinitie zijn naam, type (proef of normaal), frequentie (dag, week, maand, jaar), frequentie-interval (als we de frequentie instellen op 'WEEK' en het frequentie-interval op '1', definiëren we een wekelijkse betaling), bedrag om de klant te belasten, en cycli is het aantal totale betalingen. Oplaadmodellen is om de verzendkosten en belasting te specificeren naast de hoeveelheidwaarde voor het plan.

Dit is een codefragment dat laat zien hoe u een facturatieplan kunt maken:

// Definieer het plan en voeg de betalingsdefinities en merchant-voorkeuren bij. // Meer informatie: https://developer.paypal.com/webapps/developer/docs/api/#create-a-plan var billingPlan = nieuw plan name = "Tuts + Plus", description = "Maandelijks plan voor cursussen. ", type =" fixed ", // Definieer de winkelvoorkeuren. // Meer informatie: https://developer.paypal.com/webapps/developer/docs/api/#merchantpreferences-object merchant_preferences = new MerchantPreferences () setup_fee = GetCurrency ("0"), // $ 0 return_url = "returnURL ", // Ophalen uit configuratie cancel_url =" cancelURL ", // Ophalen uit configuratie auto_bill_amount =" YES ", initial_fail_amount_action =" CONTINUE ", max_fail_attempts =" 0 ", payment_definitions = new Lijst // Definieer een proefplan dat slechts $ 9,99 in rekening brengt voor de eerste // maand. Daarna neemt het standaardplan het over voor de // resterende 11 maanden van het jaar. new PaymentDefinition () name = "Trial Plan", type = "TRIAL", frequency = "MONTH", frequency_interval = "1", amount = GetCurrency ("0"), // Free for the 1st month cycles = "1 ", charge_models = nieuwe lijst new ChargeModel () type = "TAX", amount = GetCurrency ("1.65") // Als we belasting moeten in rekening brengen, new ChargeModel () type = "SHIPPING", amount = GetCurrency ("9.99") / / Als we de verzendkosten moeten in rekening brengen, // Definieer het standaard betalingsplan. Het vertegenwoordigt een maandelijks // plan voor $ 19,99 USD dat eenmaal per maand gedurende 11 maanden in rekening wordt gebracht. nieuwe PaymentDefinition name = "Standard Plan", type = "REGULAR", frequency = "MONTH", frequency_interval = "1", amount = GetCurrency ("15.00"), //> OPMERKING: voor 'IFNINITE' type plannen, ' cycles 'moet 0 zijn voor een object' REGULAR 'PaymentDefinition' cycles = "11", charge_models = new Lijst new ChargeModel type = "TAX", amount = GetCurrency ("2.47"), new ChargeModel () type = "SHIPPING", amount = GetCurrency ("9.99"); // Ontvang PayPal Config var apiContext = PayPalConfiguration.GetAPIContext (); // Planplan maken. Maken (apiContext);

Een nieuw factureringsplan is in de staat CREATED. Activeer deze in de ACTIVE-status, zodat uw klanten zich kunnen abonneren op het plan. Om het plan te activeren, moeten we een PATCH-verzoek doen:

// Activeer het plan var patchRequest = new PatchRequest () new Patch () op = "replace", path = "/", value = new Plan () state = "ACTIVE"; plan.Update (apiContext, patchRequest);

Zoals u kunt zien, zijn PayPal-bibliotheken een directe omkoping van hun REST-API, wat goed is, maar de API is ook erg complex in vergelijking met anderen, zoals Stripe. Om deze reden is het echt een goede optie om alle PayPal-communicatie in objecten in te pakken met duidelijkere en eenvoudigere API's voor onze toepassingen. Hier kunt u zien wat deze code verpakt in meerdere functies die parameters aannemen eruit ziet als:

public static Plan CreatePlanObject (stringplanName, stringplanDescription, string returnUrl, string cancelUrl, string frequency, int frequencyInterval, decimal planPrice, decimal shippingAmount = 0, decimal taxPercentage = 0, bool trial = false, int trialLength = 0, decimal trialPrice = 0 ) // Definieer het plan en voeg de betalingsdefinities en merchant-voorkeuren bij. // Meer informatie: https://developer.paypal.com/docs/rest/api/payments.billing-plans/ retourneer nieuw plan name = planName, description = planDescription, type = PlanType.Fixed, // Definieer de verkoper voorkeuren. // Meer informatie: https://developer.paypal.com/webapps/developer/docs/api/#merchantpreferences-object merchant_preferences = new MerchantPreferences () setup_fee = GetCurrency ("1"), return_url = returnUrl, cancel_url = cancelUrl , auto_bill_amount = "YES", initial_fail_amount_action = "CONTINUE", max_fail_attempts = "0", payment_definitions = GetPaymentDefinitions (trial, trialLength, trialPrice, frequency, frequencyInterval, planPrice, shippingAmount, taxPercentage);  private statische lijst GetPaymentDefinitions (bool trial, int trialLength, decimal trialPrice, string frequency, int frequencyInterval, decimal planPrice, decimal shippingAmount, decimal taxPercentage) var paymentDefinitions = new Lijst(); if (trial) // Definieer een proefplan dat 'trialPrice' in rekening brengt voor 'trialLength' // Daarna zal het standaardplan het roer overnemen. paymentDefinitions.Add (new PaymentDefinition () name = "Trial", type = "TRIAL", frequency = frequency, frequency_interval = frequencyInterval.ToString (), amount = GetCurrency (trialPrice.ToString ()), cycles = trialLength.ToString ( ), charge_models = GetChargeModels (trialPrice, shippingAmount, taxPercentage));  // Definieer het standaard betalingsplan. Het zal een 'frequentie' (maandelijks, etc) vertegenwoordigen // plan voor 'planPrice' dat 'planPrice' (een keer per maand) laadt voor #cycles. var regularPayment = new PaymentDefinition name = "Standard Plan", type = "REGULAR", frequency = frequency, frequency_interval = frequencyInterval.ToString (), amount = GetCurrency (planPrice.ToString ()), //> OPMERKING: voor 'IFNINITE 'type plannen,' cycli 'moet 0 zijn voor een' REGULAR "PaymentDefinition 'object. cycles =" 11 ", charge_models = GetChargeModels (trialPrice, shippingAmount, taxPercentage); paymentDefinitions.Add (regularPayment); return paymentDefinitions; private static Lijst GetChargeModels (decimaal planPrijs, decimale verzendkostenAmount, decimale belastingPercentage) // Maak het facturatieplan var chargeModels = new Lijst(); if (shippingAmount> 0) chargeModels.Add (new ChargeModel () type = "SHIPPING", amount = GetCurrency (shippingAmount.ToString ()));  if (taxPercentage> 0) chargeModels.Add (new ChargeModel () type = "TAX", amount = GetCurrency (String.Format ("0: f2", planPrice * taxPercentage / 100)));  return chargeModels; 

Update facturatieplan

U kunt de informatie voor een bestaand facturatieplan bijwerken door een 'PATCH'-verzoek in te dienen. Dit is een functie die die oproep omspant:

public static void UpdateBillingPlan (string planId, string path, object value) // PayPal authenticatie tokens var apiContext = PayPalConfiguration.GetAPIContext (); // Haal Plan var plan = Plan.Get op (apiContext, planId); // Activeer het plan var patchRequest = new PatchRequest () new Patch () op = "replace", path = path, value = value; plan.Update (apiContext, patchRequest); 

Om de beschrijving van het facturatieplan bij te werken, kunnen we deze functie aanroepen en de juiste parameters doorgeven:

UpdateBillingPlan (planId: "P-5FY40070P6526045UHFWUVEI", pad: "/", waarde: nieuw Plan description = "nieuwe beschrijving");

Verwijder een facturatieplan

Idealiter, als u geen nieuwe klanten wilt accepteren voor een facturatieplan, moet u dit bijwerken naar de status 'INACTIEF'. Dit heeft geen invloed op bestaande factureringsovereenkomsten voor dit plan. Dit kan eenvoudig worden gedaan door de functie UpdateBillingPlan aan te roepen:

UpdateBillingPlan (planId: "P-5FY40070P6526045UHFWUVEI", pad: "/", waarde: nieuw Plan state = "INACTIVE");

Factureringsovereenkomsten

Maak een factureringsovereenkomst

Als u eenmaal een of meer facturatieplannen hebt aangemaakt, wilt u dat klanten zich aanmelden voor uw abonnementen. Om dit te doen, moet u uw klantgegevens verzamelen en een verzoek indienen bij PayPal. Om deze functionaliteit te kunnen testen, heb ik verschillende acties toegevoegd aan de HomeController:

public IActionResult Abonneren () var plan = PayPalSubscriptionsService.CreateBillingPlan ("Tuts + Plan", "Testplan voor dit artikel", GetBaseUrl ()); var abonnement = PayPal SubscriptionsService.CreateBillingAgreement (plan.id, nieuw PayPal.Api.ShippingAddress city = "London", line1 = "line 1", postal_code = "SW1A 1AA", country_code = "GB", "Pedro Alonso", "Tuts +", DateTime.Now); return Redirect (subscription.GetApprovalUrl ());  public IActionResult AbonnerenSuccess (tekenreekstoken) // Goedgekeurde overeenkomst uitvoeren PayPalSubscriptionsService.ExecuteBillingAgreement (token); return View ();  public IActionResult SubscribeCancel (tekenreekstoken) // TODO: verwerking van geannuleerde betaling retour RedirectToAction ("Fout"); 
  • Aanmelden: Dit is de eerste actie die wordt aangeroepen. Het maakt een testfactuurplan en vervolgens wordt een facturatieovereenkomst (abonnement) voor dat plan gemaakt en wordt de gebruiker doorgestuurd naar PayPal om de betaling te bevestigen.
  • SubscribeSuccess: Deze actie is de actie die wordt gebruikt als 'Return-URL' na een succesvol abonnement. De overeenkomsttoken-ID wordt doorgegeven in de queryreeks en we gebruiken dit token om de factureringsovereenkomst uit te voeren en deze actief te maken.
  • SubscribeCancel: Deze actie wordt gebruikt als 'Annuleren URL'. Als om welke reden dan ook de betaling mislukt of uw klant de betaling op PayPal annuleert, wordt de gebruiker naar deze actie gebracht en moet u dit doen. Misschien biedt u de mogelijkheid om het opnieuw te proberen.

Zoals je in het vorige codefragment kunt zien, heb ik de meeste functionaliteit op verschillende manieren ingepakt. De eerste is "CreateBillingPlan" die in de vorige sectie werd uitgelegd. De tweede is "CreateBillingAgreement" die wordt gebruikt om een ​​gebruiker te abonneren op een abonnement:

public static Agreement CreateBillingAgreement (string planId, ShippingAddress shippingAddress, string name, string description, DateTime startDate) // PayPal-verificatietokens var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () name = naam, description = description, start_date = startDate.ToString ("jjjj-MM-ddTHH: mm: ss") + "Z", betaler = nieuwe Betaler () payment_method = "paypal ", plan = nieuw Plan () id = planId, shipping_address = shippingAddress; var createdAgreement = agreement.Create (apiContext); return createdAgreement; 

De derde methode is "ExecuteBillingAgreement". Na een succesvolle goedkeuring van het abonnement gebruiken we het token terug om het abonnement te activeren:

public static void ExecuteBillingAgreement (tekenreeksstokje) // PayPal-verificatietokens var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () token = token; var uitgevoerdAgreement = agreement.Execute (apiContext); 

Een factureringsovereenkomst opschorten

Gebruik deze methode om een ​​overeenkomst op te schorten:

public static void SuspendBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.Suspend (apiContext, new AgreementStateDescriptor () note = "De overeenkomst opschorten"); 

Een factureringsovereenkomst opnieuw activeren

Deze is echt vergelijkbaar met de vorige:

public static void ReactivateBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.ReActivate (apiContext, new AgreementStateDescriptor () note = "Reactivering van de overeenkomst"); 

Annuleer een Factuurovereenkomst

Gebruik deze functie om een ​​plan te annuleren:

public static void CancelBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () id = agreementId; agreement.Cancel (apiContext, new AgreementStateDescriptor () note = "De overeenkomst annuleren"); 

Update een factureringsovereenkomst

Deze optie is zeer beperkt en wat ik van deze oproep zou verwachten, is de mogelijkheid om het abonnement te wijzigen, een klant te upgraden of te downgraden. Dit wordt niet ondersteund in een enkele oproep zoals in Stripe. U moet dit scenario afhandelen door de huidige overeenkomst te annuleren en een nieuwe te maken voor upgrades of downgrades. Het is niet ideaal, maar het kan in de toekomst veranderen.

Conclusie

Dit is een overzicht van de meest voorkomende functies die mensen gebruiken om met PayPal te integreren. Hun API is veel groter dan de integratiemethoden die in dit artikel worden uitgelegd - u kunt ook restituties en gedeeltelijke terugbetalingen uitgeven en ze hebben veel verschillende opties voor randgevallen in de voorbeelden die in dit artikel worden behandeld. Als u meer wilt weten over een specifieke integratie, laat dan een suggestie achter in de opmerkingen.