PayPal-Integration Teil 2 PayPal-REST-API

Was Sie erstellen werden

In diesem Tutorial werde ich Ihnen zeigen, wie Sie Zahlungen mit der PayPal-REST-API und C # tätigen können. Alle Bibliotheken, die sie für verschiedene Sprachen haben, wie Ruby, Node.js, Python, PHP, sind sehr ähnlich, daher gelten alle Konzepte für alle Bibliotheken.

Projektaufbau

Zunächst habe ich ein MVC-Projekt in Visual Studio 2015 erstellt: Datei> Neu> Projekt, und wählen Sie ASP.NET-Anwendung.

Wähle aus ASP.NET 5-Webanwendung Vorlage, die die neue MVC 6 verwendet. Sie ist der MVC 5 ähnlich, wenn Sie damit vertraut sind.

Wie Sie auf dem Foto unten sehen können, habe ich der Lösung einige Dateien und Ordner hinzugefügt. Die zwei wichtigsten Dinge, die Sie beachten sollten:

  1. Im Verweise Ich habe das Ziel DNX Core 5.0 entfernt, wodurch wir dieses Projekt unter Mac OS X oder Linux ausführen können, aber die benötigte PayPal-Bibliothek wurde noch nicht aktualisiert. 
  2. Ich habe den Ordner "Dienste" hinzugefügt, in dem ich die Logik für PayPal-Anrufe einpacken werde, damit wir die Controller kurz und knapp halten können.

Installieren Sie das PayPal-SDK mit NuGet. Rechtsklick Klicken Sie auf den Namen der Lösung und wählen Sie NuGet-Pakete verwalten, und suchen Sie dann nach "PayPal" und installieren Sie es.

Erstellen Sie eine PayPal-App

Um unsere Anwendung in PayPal zu integrieren, müssen wir zu PayPal-Entwicklern navigieren und dann unter REST-API-Apps, klicke auf App erstellen.

Geben Sie Ihrer App einen Namen und wählen Sie ein Sandbox-Entwicklerkonto, das der App zugeordnet ist. Zu Testzwecken können wir dann zu http://sandbox.paypal.com navigieren und uns mit den Sandbox-Anmeldedaten anmelden, um das PayPal-Testkonto und die PayPal-Transaktionen anzuzeigen.

Nach dem Klicken auf App erstellen, Wir sehen den Bestätigungsbildschirm mit der Client-ID und den geheimen Token.

Kopieren Sie die Token clientId und clientSecret nach appsettings.json, Wie Sie im folgenden Screenshot sehen können:

Testen von Zahlungen

PayPal bietet eine Sandbox-Umgebung zum Testen. Dort können Sie Testkäufer- und Verkäuferkonten anlegen. Wenn Sie sich anmelden, haben Sie ein Business-Konto in der Sandbox, das an Ihr Entwicklerkonto gebunden ist.

Um ein neues Testkonto zu erstellen, melden Sie sich bei der Entwicklerseite an und klicken Sie dann auf Instrumententafel Tab und navigieren Sie zu Sandbox> Konten. Hier können Sie die Liste der Testkonten sehen, falls vorhanden:

Wenn Sie noch keine Testkonten erstellt haben, klicken Sie auf Benutzerkonto anlegen, oben rechts, um mindestens ein persönliches Testkonto und ein Testgeschäftskonto anzulegen.

Nachdem Sie die Testkonten erstellt haben, können Sie sich unter www.sandbox.paypal.com mit der Test-E-Mail-Adresse und dem Kennwort anmelden, die Sie jedem Konto im vorherigen Formular zugewiesen haben. Dies ist wirklich nützlich, um zu testen, dass beim Kauf eines Produkts mit Ihrem persönlichen Testkonto das Geld auf Ihr Testgeschäftskonto übertragen wird. Jetzt können Sie mit der Integration mit PayPal beginnen und testen, ob sich das Geld von einem Konto auf ein anderes bewegt.

Einzelne PayPal-Zahlung

PayPal bietet verschiedene Zahlungsmöglichkeiten an. Sie können direkte Kreditkartenzahlungen verwenden, was bedeutet, dass Ihre Kunden weder die PayPal-Anmeldeseite noch eine Übersicht sehen. Dies geschieht alles auf Ihrer Website. Sie müssen dazu PCI-kompatibel sein, und ich empfehle die Verwendung von Stripe, da Sie nur SSL verwenden, wenn Sie deren JavaScript-Bibliothek verwenden. Um dagegen Zahlungen per PayPal zu tätigen, sind drei Schritte erforderlich:

  1. Geben Sie die Zahlungsinformationen an eine Zahlung erstellen.
  2. Holen Sie sich die Zahlungsbestätigung, indem Sie Ihren Kunden zu PayPal weiterleiten, um die Transaktion zu genehmigen.
  3. Führen Sie die Zahlung aus Um das Geld einzubehalten, nachdem PayPal Ihren Kunden auf Ihre Website umgeleitet hat.

In meinem MVC-Projekt in der Dienstleistungen In diesem Ordner habe ich die PayPalPaymentService-Klasse erstellt, in der ich folgende Methoden hinzugefügt habe:

public static Payment CreatePayment (Zeichenfolge baseUrl, Zeichenfolgenabsicht) // ### Api Context // Übergeben Sie ein 'APIContext' -Objekt, um den Anruf zu authentifizieren und // eine eindeutige Anforderungs-ID zu senden (die Idempotenz gewährleistet). Das SDK generiert // eine Anforderungs-ID, wenn Sie nicht explizit eine übergeben haben. var apiContext = PayPalConfiguration.GetAPIContext (); // Payment Resource var payment = new Zahlung () Absicht = Absicht, // "Verkauf" oder "Autorisierung" payer = neuer Payer () payment_method = "paypal", transaction = GetTransactionsList (), redirect_urls = GetReturnUrls (baseUrl Absicht); // Eine Zahlung mit einem gültigen APIContext erstellen var createdPayment = payment.Create (apiContext); return erstelltPayment;  private statische Liste GetTransactionsList () // Eine Transaktion definiert den Vertrag einer Zahlung, // für was die Zahlung gilt und wer sie erfüllt. var transactionList = neue Liste(); // Die API zur Zahlungserstellung erfordert eine Transaktionsliste. // füge die erstellte Transaktion zu einer Liste hinzu transactionList.Add (new Transaction () description = "Transaktionsbeschreibung"), rechnungsnummer = GetRandomInvoiceNumber (), betrag = neuer Betrag () currency = "USD", total = "100.00" , // Summe muss gleich der Summe aus Versand, Steuer und Zwischensumme sein details = new Details () // Details: Geben Sie die Details eines Zahlungsbetrags an. Tax = "15", shipping = "10", subtotal = "75", item_list = neue ItemList () items = neue Liste() neuer Artikel () name = "Artikelname", Währung = "USD", Preis = "15", Anzahl = "5", sku = "sku"); return transactionList;  private static RedirectUrls GetReturnUrls (Zeichenfolge baseUrl, Zeichenfolgenabsicht) var returnUrl = intent == "sale"? "/ Home / PaymentSuccessful": "/ Home / AuthorizeSuccessful"; // URLs umleiten // Diese URLs bestimmen, wie der Benutzer von PayPal umgeleitet wird, // wenn die Zahlung genehmigt oder storniert wurde. return new RedirectUrls () cancel_url = baseUrl + "/ Home / PaymentCancelled", return_url = baseUrl + returnUrl;  public static Payment ExecutePayment (Zeichenfolge paymentId, string payerId) // ### Api Context // Übergeben Sie ein 'APIContext'-Objekt, um den Anruf zu authentifizieren und // eine eindeutige Anforderungs-ID zu senden (die Idempotenz gewährleistet). Das SDK generiert // eine Anforderungs-ID, wenn Sie nicht explizit eine übergeben haben. var apiContext = PayPalConfiguration.GetAPIContext (); var paymentExecution = new PaymentExecution () payer_id = payerId; var payment = neue Zahlung () id = paymentId; // Führen Sie die Zahlung aus. var donePayment = payment.Execute (apiContext, paymentExecution); Rückgabe ausgeführt 

In diesem Aufruf werden einige Parameter übergeben:

  • Absicht: Drei mögliche Werte: "Verkauf" für sofortige Zahlungen, "Autorisieren", um eine Zahlung für eine spätere Zahlung zu autorisieren, oder "Bestellung", um eine Bestellung zu erstellen. Wenn Sie das bekommen Genehmigung Für eine spätere Zahlung haben Sie 3 Tage Garantie. Sie können jedoch bis zu 29 Tage später versuchen, die Zahlung zu erfassen.
  • Zahler: Quelle des Geldbetrags für diese Zahlung, wobei Zahlungsmethode verwendet wird: PayPal-Wallet-Zahlung, Bankeinzug oder direkte Kreditkarte. 
  • Transaktionen: Hier wird der Betrag für die Zahlung angegeben, und optional können die Artikel angegeben werden, für die bezahlt wird. Sie können bei Bedarf auch Zwischensumme, Versand und Steuern angeben.
  • URLs umleiten: Geben Sie die URL an, zu der PayPal Ihre Kunden nach einer Transaktion umleitet. So können Sie Ihre Datenbank aktualisieren und eine Bestätigungsmeldung anzeigen.

Die bisherigen Funktionen können von Ihrem Controller aus folgendermaßen verwendet werden:

public IActionResult CreatePayment () var payment = PayPalPaymentService.CreatePayment (GetBaseUrl (), "sale"); return Umleitung (payment.GetApprovalUrl ());  public IActionResult PaymentCancelled () // TODO: Behandelte stornierte Zahlungsrückgabe RedirectToAction ("Error");  public IActionResult PaymentSuccessful (Zeichenfolge paymentId, Zeichenfolgentoken, Zeichenfolge PayerID) // Zahlung ausführen var payment = PayPalPaymentService.ExecutePayment (paymentId, PayerID); return View (); 

Wie Sie sehen können, habe ich drei Aktionen erstellt:

  • CreatePayment: Dies ist die Aktion, die die Zahlung auslöst. Er ruft PayPal an, um die Zahlung zu erstellen, und leitet den Benutzer an PayPal weiter, um die Transaktion zu genehmigen.
  • Bezahlung erfolgreich: Dies ist die Aktion, bei der PayPal unseren Kunden nach erfolgreicher Zahlung zurückweist. An diesem Punkt können wir die Zahlung ausführen, um das Geld auf unser Händlerkonto zu überweisen.
  • ZahlungStornierung: Bei dieser Aktion wird der Benutzer von PayPal weitergeleitet, wenn der Benutzer den Genehmigungsprozess abbricht. Zu diesem Zeitpunkt möchten Sie dem Kunden wahrscheinlich die Option geben, es erneut zu versuchen oder mit Ihnen in Kontakt zu treten.

Autorisieren Sie eine Zahlung zur späteren Erfassung

Dieses Szenario ist dem vorherigen Fall sehr ähnlich. Möglicherweise möchten Sie diese Methode verwenden, wenn Sie Vorbestellungen für ein Produkt annehmen möchten, das noch nicht verfügbar ist. Die Schritte, um diese Zahlung zu erhalten, sind:

  1. Autorisieren Sie die Zahlung: Der Parameter 'intent' für diesen Aufruf sollte 'authorize' sein..
  2. Erfassen Sie die Zahlung: Beachten Sie, dass Berechtigungen für bis zu 3 Tage garantiert sind. Sie können jedoch versuchen, eine Zahlung für bis zu 29 Tage zu erfassen.

Um diese Zahlungsart zu implementieren, habe ich der Klasse PayPalPaymentService nur eine neue Methode hinzugefügt, um die Zahlung zu erfassen:

public static Capture CapturePayment (Zeichenfolge paymentId) var apiContext = PayPalConfiguration.GetAPIContext (); var payment = Payment.Get (apiContext, paymentId); var auth = zahlungstransaktionen [0] .bezogene_resourcen [0] .autorisierung; // Geben Sie einen Betrag für die Erfassung an. Wenn Sie "is_final_capture" auf "true" setzen, werden alle verbleibenden, von der Autorisierung gehaltenen Mittel aus dem Finanzierungsinstrument freigegeben. var capture = new Capture () Betrag = neuer Betrag () currency = "USD", total = "4.54", is_final_capture = true; // Erfassen einer autorisierten Zahlung durch POSTing an // URI v1 / Zahlungen / Berechtigung / Berechtigungs_ID / capture var responseCapture = auth.Capture (apiContext, capture); Antwort zurückgebenCapture; 

Dann habe ich vom HomeController aus zwei neue Aktionen hinzugefügt, um diese Zahlungsart zu zeigen:

public IActionResult AuthorizePayment () var payment = PayPalPaymentService.CreatePayment (GetBaseUrl (), "authorize"); return Umleitung (payment.GetApprovalUrl ());  public IActionResult AuthorizeSuccessful (Zeichenfolge paymentId, Zeichenfolgentoken, Zeichenfolge PayerID) // Capture-Zahlung var capture = PayPalPaymentService.CapturePayment (paymentId); return View (); 
  • AuthorizePayment ist die Aktion, die die Zahlung auslöst. Dies ist der vorherigen 'CreatePayment'-Funktion sehr ähnlich, aber in diesem Fall übergeben wir' authorize 'als Intent-Parameter.
  • AuthorizeSuccessful ist die Aktion, bei der Ihr Kunde nach erfolgreicher Bestätigung der Zahlung auf PayPal umgeleitet wird. An diesem Punkt wird die Zahlung erfasst. Sie können jedoch die Zahlungs-ID in Ihrer Datenbank speichern und die Zahlung bei Bedarf erfassen.

In diesen Codebeispielen habe ich der Einfachheit halber die Zahlungsvariablenwerte fest codiert. In Ihrer realen Anwendung werden Sie sie wahrscheinlich in Methoden einfassen, die alle diese Werte als Variablen verwenden, damit alles dynamisch gesetzt und erneut verwendet werden kann.

Abonnements

Dies wird in PayPal als "Abrechnungspläne" bezeichnet. Sie können wiederkehrende Zahlungspläne erstellen und Ihre Kunden durch Erstellen einer Abrechnungsvereinbarung für einen Abrechnungsplan abonnieren. Mit der PayPal-REST-API können Sie Rechnungspläne erstellen, aktualisieren oder löschen. Dies ist etwas, das Sie verwenden könnten, wenn Sie ein Administrationsfenster erstellen möchten, um diese Dinge für Ihr Unternehmen zu verwalten.

Um wiederkehrende Gebühren für Ihre Kunden zu erstellen, führen Sie folgende Schritte aus:

  1. Erstellen Sie einen Abrechnungsplan und aktiviere es. Nachdem Sie einen Fakturierungsplan erstellt haben, befindet er sich im Status ERSTELLT. Es muss durch eine PATCH-Anfrage aktiviert werden.
  2. Erstellen Sie eine Rechnungsvereinbarung und Führ es aus: Die Antwort auf den Aufruf zum Erstellen einer Abrechnungsvereinbarung enthält die Links zu Approval_url und Execute_url. Wir müssen die Genehmigung für die Abrechnungsvereinbarung einholen und dann die Abrechnungsvereinbarung ausführen.

Fakturierungspläne

Erstellen Sie einen Fakturierungsplan

Legen Sie einen Abrechnungsplan an, der die Abrechnungszeiträume definiert. Dies ist eine Zusammenfassung der Parameter, die zum Erstellen eines Plans übergeben werden müssen.

  • Name: Name des Abrechnungsplans.
  • Beschreibung: Beschreibung des Abrechnungsplans.
  • Art: Zulässige Werte sind "FIXED" für eine bestimmte Anzahl wiederkehrender Zahlungen oder "INFINITE" für einen Plan, der wiederholt wird, bis er manuell storniert wird.
  • Händlerpräferenzen: Hierbei handelt es sich um ein Objekt, das Präferenzen wie Einrichtungsgebühr, maximale Fehlversuche einer Zahlung, URL für Rückgabe, URL abbrechen und URL angeben angibt, wobei PayPal den Benutzer nach einer Zahlung umleitet.
  • Zahlungsdefinitionen: Array von Zahlungsdefinitionen für diesen Plan. Normalerweise hätte dieses Array eine oder zwei Zahlungsdefinitionen. Wenn wir eine kostenlose Testversion oder eine Testversion zu einem reduzierten Preis anbieten möchten, legen wir zwei Zahlungsdefinitionen fest. Die erste ist die Definition für den Testzeitraum und die zweite Definition wäre die reguläre Zahlung. Die Eigenschaften für eine Zahlungsdefinition sind Name, Art (Probe oder regelmäßig), Frequenz (Tag, Woche, Monat, Jahr), Frequenzintervall (Wenn wir die Frequenz auf "WOCHE" und das Frequenzintervall auf "1" setzen, definieren wir eine wöchentliche Zahlung.), Menge den Kunden in Rechnung stellen und Fahrräder ist die Anzahl der Gesamtzahlungen. Laden Sie Modelle Geben Sie die Versandkosten und Steuern zusätzlich zum Betragswert für den Plan an.

Dies ist ein Codeausschnitt, der zeigt, wie ein Fakturierungsplan erstellt wird:

// Definieren Sie den Plan und hängen Sie die Zahlungsdefinitionen und Händlerpräferenzen an. // Weitere Informationen: https://developer.paypal.com/webapps/developer/docs/api/#create-a-plan var billingPlan = neuer Plan name = "Tuts + Plus", description = "Monatsplan für Kurse. ", type =" fixed ", // Definieren Sie die Händlerpräferenzen. // Weitere Informationen: https://developer.paypal.com/webapps/developer/docs/api/#merchantpreferences-object merchant_preferences = new MerchantPreferences () setup_fee = GetCurrency ("0"), // $ 0 return_url = "returnURL ", // Abrufen von config cancel_url =" cancelURL ", // Abrufen von config auto_bill_amount =" YES ", initial_fail_amount_action =" CONTINUE ", max_fail_attieties =" 0 ", payment_definitions = neue Liste // Definieren Sie einen Testplan, für den im ersten Monat nur $ 9,99 berechnet werden. Danach wird der Standardplan für die verbleibenden elf Monate des Jahres übernommen. new PaymentDefinition () name = "Testplan", type = "TRIAL", Frequenz = "MONTH", frequency_interval = "1", betrag = GetCurrency ("0"), // Frei für die Zyklen des 1. Monats = "1 ", charge_models = neue Liste new ChargeModel () type = "TAX", Betrag = GetCurrency ("1.65") // Wenn wir Steuer berechnen müssen, neues ChargeModel () Typ = "SHIPPING", Betrag = GetCurrency ("9.99") / / Wenn wir Versandkosten berechnen müssen, // Definieren Sie den Standardzahlungsplan. Es handelt sich um einen monatlichen Plan für $ 19.99, der einmal monatlich für 11 Monate berechnet wird. new PaymentDefinition name = "Standardplan", type = "REGULAR", frequency = "MONTH", frequency_interval = "1", betrag = GetCurrency ("15.00"), //> HINWEIS: Für 'IFNINITE'-Typenpläne,' Für ein 'REGULARES "PaymentDefinition" -Objekt sollte "cycle" 0 sein. cycle = "11", charge_models = new List neues ChargeModel type = "TAX", Betrag = GetCurrency ("2.47"), neues ChargeModel () Typ = "SHIPPING", Betrag = GetCurrency ("9.99"); // Hole PayPal Config var apiContext = PayPalConfiguration.GetAPIContext (); // Plan erstellen plan.Create (apiContext);

Ein neu erstellter Fakturierungsplan befindet sich im Zustand ERSTELLT. Aktivieren Sie den Status ACTIVE, damit Ihre Kunden den Plan abonnieren können. Um den Plan zu aktivieren, müssen wir eine PATCH-Anfrage machen:

// Aktiviere den Plan var patchRequest = new PatchRequest () new Patch () op = "ersetzen", path = "/", value = new Plan () state = "ACTIVE"; plan.Update (apiContext, patchRequest);

Wie Sie sehen, sind PayPal-Bibliotheken ein direkter Wrapper über ihre REST-API, was zwar gut ist, aber die API ist im Vergleich zu anderen wie Stripe auch sehr komplex. Aus diesem Grund ist es wirklich eine gute Option, die gesamte PayPal-Kommunikation in Objekten mit klareren und einfacheren APIs für unsere Anwendungen einzubinden. Hier können Sie sehen, wie dieser Code in mehreren Funktionen mit Parametern dargestellt wird:

public static Plan CreatePlanObject (Zeichenfolge planName, Zeichenfolge planDescription, Zeichenfolge returnUrl, Zeichenfolge cancelUrl, Zeichenfolgenhäufigkeit, int frequencyInterval, decimal planPrice, decimal shippingAmount = 0, dezimales taxPercentage = 0, bool trial = false, int trialLength = 0, decimal trialPrice = 0 ) // Definieren Sie den Plan und fügen Sie die Zahlungsdefinitionen und Händlerpräferenzen hinzu. // Weitere Informationen: https://developer.paypal.com/docs/rest/api/payments.billing-plans/ return new Plan name = planName, description = planDescription, type = PlanType.Fixed, // Definieren Sie den Händler Präferenzen. // Weitere Informationen: 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_attieties = "0", payment_definitions = GetPaymentDefinitions (trial, trialLength, trialPrice, Häufigkeit, HäufigkeitInterval, planPrice, shippingAmount, taxPercentage);  private statische Liste GetPaymentDefinitions (bool trial, int trialLength, decimal trialPrice, Zeichenfolgefrequenz, int frequencyInterval, decimal planPrice, decimal shippingAmount, decimal taxPercentage) var paymentDefinitions = new List(); if (trial) // Definieren Sie einen Testplan, der "trialPrice" für "trialLength" berechnet. // Danach übernimmt der Standardplan. paymentDefinitions.Add (new PaymentDefinition () name = "trial", type = "TRIAL", frequency = frequency, frequency_interval = frequencyInterval.ToString (), zahl = GetCurrency (trialPrice.ToString ()), Zyklen = trialLength.ToString ( ), charge_models = GetChargeModels (trialPrice, shippingAmount, taxPercentage));  // Definieren Sie den Standardzahlungsplan. Es wird eine "Häufigkeit" (monatlich usw.) für "planPrice" sein, die "planPrice" (einmal im Monat) für #cycles berechnet. var regularPayment = new PaymentDefinition name = "Standardplan", type = "REGULAR", Frequenz = Häufigkeit, frequency_interval = frequencyInterval.ToString (), betrag = GetCurrency (planPrice.ToString ()), //> HINWEIS: Für 'IFNINITE 'Typenpläne,' Zyklen 'sollte für ein' REGULAR-Objekt 'PaymentDefinition' 0 sein. Zyklen = "11", charge_models = GetChargeModels (trialPrice, shippingAmount, taxPercentage); paymentDefinitions.Add (regularPayment); return paymentDefinitions; private static Liste GetChargeModels (decimal planPreis, decimal shippingAmount, decimal taxPercentage) // Erstellen des Abrechnungsplans var chargeModels = new List(); if (shippingAmount> 0) chargeModels.Add (new ChargeModel () type = "SHIPPING") (Anzahl = GetCurrency (shippingAmount.ToString ()));  if (taxPercentage> 0) chargeModels.Add (new ChargeModel () type = "TAX"), betrag = GetCurrency (String.Format ("0: f2", planPrice * taxPercentage / 100));  return chargeModels; 

Fakturierungsplan aktualisieren

Sie können die Informationen für einen vorhandenen Fakturierungsplan aktualisieren, indem Sie eine PATCH-Anforderung stellen. Dies ist eine Funktion, die diesen Aufruf umschließt:

public static void UpdateBillingPlan (Zeichenfolge planId, Zeichenfolgenpfad, Objektwert) // PayPal-Authentifizierungstoken var apiContext = PayPalConfiguration.GetAPIContext (); // Plan abrufen var plan = Plan.Get (apiContext, planId); // Aktiviere den Plan var patchRequest = new PatchRequest () new Patch () op = "ersetzen", path = path, value = value; plan.Update (apiContext, patchRequest); 

Um die Beschreibung des Abrechnungsplans zu aktualisieren, können Sie diese Funktion aufrufen und die richtigen Parameter übergeben:

UpdateBillingPlan (planId: "P-5FY40070P6526045UHFWUVEI", Pfad: "/", Wert: neuer Plan description = "new description");

Löschen Sie einen Abrechnungsplan

Idealerweise möchten Sie, wenn Sie keine neuen Kunden für einen Fakturierungsplan akzeptieren möchten, den Status 'INACTIVE' aktualisieren. Bestehende Abrechnungsvereinbarungen für diesen Plan werden davon nicht berührt. Dies kann einfach durch Aufrufen der UpdateBillingPlan-Funktion erfolgen:

UpdateBillingPlan (planId: "P-5FY40070P6526045UHFWUVEI", Pfad: "/", Wert: neuer Plan state = "INACTIVE");

Abrechnungsvereinbarungen

Erstellen Sie eine Abrechnungsvereinbarung

Nachdem Sie einen oder mehrere Abrechnungspläne erstellt haben, möchten Sie, dass Kunden sich für Ihre Abonnementpläne anmelden. Dazu müssen Sie Ihre Kundendaten sammeln und eine Anfrage an PayPal stellen. Um diese Funktionalität testen zu können, habe ich dem HomeController mehrere Aktionen hinzugefügt:

public IActionResult Subscribe () var plan = PayPalSubscriptionsService.CreateBillingPlan ("Tuts + Plan", "Testplan für diesen Artikel", GetBaseUrl ()); var abonnement = PayPalSubscriptionsService.CreateBillingAgreement (plan.id, neue PayPal.Api.ShippingAddress city = "London", line1 = "Zeile 1", postal_code = "SW1A 1AA", country_code = "GB", "Pedro Alonso", "Tuts +", DateTime.Now); return Umleitung (Subscription.GetApprovalUrl ());  public IActionResult SubscribeSuccess (Zeichenfolgentoken) // Genehmigte Vereinbarung ausführen PayPalSubscriptionsService.ExecuteBillingAgreement (Token); return View ();  public IActionResult SubscribeCancel (Zeichenfolgen-Token) // TODO: Behandelte stornierte Rückgabe von Zahlungen RedirectToAction ("Error"); 
  • Abonnieren: Dies ist die erste Aktion, die aufgerufen wird. Es wird ein Testabrechnungsplan erstellt. Anschließend wird eine Abrechnungsvereinbarung (Abonnement) für diesen Plan erstellt, und der Benutzer wird zur Bestätigung der Zahlung an PayPal weitergeleitet.
  • SubscribeSuccess: Diese Aktion wird nach einem erfolgreichen Abonnement als 'Return URL' verwendet. Die Vereinbarungstoken-ID wird in der Abfragezeichenfolge übergeben, und wir verwenden dieses Token, um die Abrechnungsvereinbarung auszuführen und zu aktivieren.
  • AbonnierenAbbrechen: Diese Aktion wird als "URL abbrechen" verwendet. Wenn die Zahlung aus irgendeinem Grund fehlschlägt oder Ihr Kunde die Zahlung über PayPal storniert, wird der Benutzer zu dieser Aktion geführt und Sie müssen dies erledigen. Bieten Sie vielleicht die Möglichkeit an, es noch einmal zu versuchen.

Wie Sie im vorherigen Code-Snippet sehen können, habe ich die meisten Funktionen in mehrere Methoden eingebunden. Der erste ist "CreateBillingPlan", der im vorherigen Abschnitt erläutert wurde. Der zweite ist "CreateBillingAgreement", mit dem ein Benutzer einen Plan abonnieren kann:

public static Agreement CreateBillingAgreement (Zeichenfolge planId, ShippingAddress shippingAddress, Name der Zeichenfolge, Zeichenfolgenbeschreibung, DateTime startDate) // PayPal-Authentifizierungstoken var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = new Agreement () name = name, description = description, start_date = startDate.ToString ("jjjj-MM-ttTHH: mm: ss") + "Z", Zahler = neuer Payer () payment_method = "paypal ", plan = new Plan () id = planId, shipping_address = shippingAddress; var createdAgreement = agreement.Create (apiContext); return erstelltAgreement; 

Die dritte Methode ist "ExecuteBillingAgreement". Nach einer erfolgreichen Abonnementgenehmigung verwenden wir das zurückgegebene Token, um das Abonnement zu aktivieren:

public static void ExecuteBillingAgreement (Zeichenfolgen-Token) // PayPal-Authentifizierungs-Token var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = neue Vereinbarung () token = token; var doneAgreement = agreement.Execute (apiContext); 

Eine Abrechnungsvereinbarung aussetzen

Verwenden Sie diese Methode, um eine Vereinbarung auszusetzen:

public static void SuspendBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = neue Vereinbarung () id = agreementId; agreement.Suspend (apiContext, new AgreementStateDescriptor () note = "Die Vereinbarung aussetzen"); 

Reaktivieren Sie eine Abrechnungsvereinbarung

Dieser ist dem vorherigen wirklich sehr ähnlich:

public static void ReactivateBillingAgreement (string agreementId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = neue Vereinbarung () id = agreementId; agreement.ReActivate (apiContext, neuer AgreementStateDescriptor () note = "Reaktivieren der Vereinbarung"); 

Kündigen Sie eine Rechnungsvereinbarung

Verwenden Sie diese Funktion, um einen Plan abzubrechen:

public static void CancelBillingAgreement (Zeichenfolge-VereinbarungId) var apiContext = PayPalConfiguration.GetAPIContext (); var agreement = neue Vereinbarung () id = agreementId; agreement.Cancel (apiContext, new AgreementStateDescriptor () note = "Abbruch der Vereinbarung"); 

Aktualisieren Sie eine Abrechnungsvereinbarung

Diese Option ist sehr begrenzt, und was ich von dieser Aufforderung erwarten würde, ist die Möglichkeit, das Abonnement zu ändern, um einen Kunden zu aktualisieren oder ein Downgrade durchzuführen. Dies wird in einem einzelnen Anruf nicht unterstützt, wie in Stripe. Sie müssen mit diesem Szenario umgehen, indem Sie die aktuelle Vereinbarung stornieren und eine neue für Upgrades oder Downgrades erstellen. Es ist nicht ideal, kann sich aber in Zukunft ändern.

Fazit

Dies ist eine Übersicht über die am häufigsten verwendeten Funktionen zur Integration von PayPal. Ihre API ist viel größer als die in diesem Artikel erläuterten Integrationsmethoden. Sie können auch Rückerstattungen und Teilrückerstattungen ausgeben. In den in diesem Artikel beschriebenen Beispielen gibt es viele verschiedene Optionen für Randfälle. Wenn Sie an weiteren Details zu einer bestimmten Integration interessiert sind, hinterlassen Sie bitte einen Kommentar in den Kommentaren.