In diesem Tutorial zeige ich Ihnen, wie Sie mit der PayPal-REST-API und C # Zahlungen tätigen können. Alle Bibliotheken, die sie für verschiedene Sprachen wie Ruby, Node.js, Python, PHP haben, sind sehr ähnlich, so dass alle Konzepte hier für alle Bibliotheken gelten.
Projektaufbau
Zu Beginn habe ich in Visual Studio 2015 ein MVC-Projekt erstellt: Datei> Neu> Projekt und ASP.NET-Anwendung auswählen.
Wählen Sie die ASP.NET 5-Webanwendungsvorlage aus, die die neue MVC 6 verwendet. Sie ist MVC 5 ähnlich, wenn Sie damit vertraut sind.
Wie Sie auf dem Foto sehen können, habe ich der Lösung einige
Dateien und Ordner hinzugefügt. Die wichtigsten zwei Dinge zu beachten sind:
In Referenzen habe ich den Ziel-DNX-Core 5.0 entfernt, was es uns ermöglichen würde, dieses Projekt unter Mac OS X oder Linux auszuführen, aber die von uns benötigte PayPal-Bibliothek wurde noch nicht aktualisiert.
Ich habe den Ordner "Services" hinzugefügt, in dem ich die Logik für PayPal-Anrufe verpacken werde, damit wir die Controller schön und kurz halten können.
Installieren Sie PayPal SDK mit NuGet. Klicken Sie mit der rechten Maustaste auf den Namen der Lösung und wählen Sie NuGet-Pakete verwalten. Suchen Sie dann nach "PayPal" und installieren Sie es.
Erstellen Sie eine PayPal-App
Um unsere Anwendung mit PayPal zu integrieren, müssen wir zu
PayPal-Entwicklern navigieren und dann unter REST-API-Apps auf App erstellen klicken.
Geben Sie Ihrer App einen Namen und wählen Sie ein
Sandbox-Entwicklerkonto aus, das mit der App verknüpft ist. Zu Testzwecken können Sie dann zu http://sandbox.paypal.com navigieren und sich mit den Anmeldedaten für die Sandbox anmelden, um das PayPal-Testkonto und die Transaktionen zu testen.
Nach dem Klicken auf "App erstellen" sehen wir den
Bestätigungsbildschirm mit der Client-ID und den geheimen Token.
Kopieren Sie die Token clientId und clientSecret in appsettings.json, wie Sie im folgenden Screenshot sehen können:
Zahlungen testen
PayPal stellt eine Sandbox-Umgebung zum Testen bereit. Sie können Testkäufer- und Verkäuferkonten von dort erstellen. Wenn Sie sich anmelden, verfügen Sie über 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 die Registerkarte Dashboard und navigieren Sie zu Sandbox> Konten. Hier können Sie die Liste der Testkonten sehen, wenn Sie Folgendes haben:
Wenn Sie Ihre Testkonten noch nicht erstellt haben, klicken Sie
rechts oben auf Konto erstellen, um mindestens ein persönliches
Testkonto und ein Testgeschäftskonto zu erstellen.
Nachdem Sie die Testkonten erstellt haben, können Sie sich über
www.sandbox.paypal.com mit der Test-E-Mail-Adresse und dem Passwort anmelden, die Sie den einzelnen Konten auf dem vorherigen Formular zugewiesen haben. Dies ist sehr nützlich, um zu testen, ob die Gelder bei Ihrem "persönlichen Testkonto" auf Ihr "Testgeschäftskonto" überwiesen werden. Jetzt können Sie mit der Integration in PayPal beginnen und testen, ob die Mittel von einem Konto auf ein anderes übertragen werden.
Einzel-PayPal-Zahlung
PayPal bietet verschiedene Zahlungsmethoden an. Sie können direkte Kreditkartenzahlungen verwenden, was bedeutet, dass Ihre Kunden die PayPal-Anmeldeseite oder -zusammenfassung nicht sehen können - alles geschieht auf Ihrer Website. Sie müssen dafür PCI-kompatibel sein, und ich empfehle Stripe, da Sie nur SSL mit ihrer JavaScript-Bibliothek benötigen. Auf der anderen Seite, um Zahlungen über PayPal-Zahlungen zu nehmen, dauert es drei Schritte:
Geben Sie Zahlungsinformationen an, um eine Zahlung zu erstellen.
Holen Sie sich die Zahlungsgenehmigung, indem Sie Ihren Kunden an PayPal weiterleiten, um die Transaktion zu genehmigen.
Führen Sie die Zahlung aus, um die Beträge zu erfassen, nachdem PayPal Ihren Kunden auf Ihre Website weitergeleitet hat.
In meinem MVC-Projekt habe ich im Ordner "Services" die PayPalPaymentService-Klasse erstellt, der ich diese Methoden hinzugefügt habe:
In diesem Aufruf werden einige Parameter übergeben:
Absicht: Drei mögliche Werte: "Verkauf" für sofortige Zahlungen, "Autorisieren", um eine Zahlung zu autorisieren, um später zu erfassen, oder "Bestellung", um einen Auftrag zu erstellen. Wenn Sie die Autorisierung für eine später zu erfassende Zahlung erhalten, haben Sie 3 Tage Garantie, obwohl Sie versuchen können, die Zahlung bis zu 29 Tage später zu erfassen.
Payer: Quelle der Mittel für diese Zahlung, wobei die Zahlungsmethode PayPal-Wallet-Zahlung, Banklastschrift oder direkte Kreditkarte verwendet wird.
Transaktionen: Hier wird der Betrag für die Zahlung angegeben und optional die Artikel angegeben, für die bezahlt wird. Sie können bei Bedarf auch Zwischensumme, Versand und Steuern angeben.
Umleitungs-URLs: Geben Sie die URL an, an die PayPal Ihre Kunden nach einer Transaktion weiterleitet, sodass Sie Ihre Datenbank aktualisieren und eine Bestätigungsnachricht anzeigen können.
Die vorherigen Funktionen können von Ihrem Controller wie folgt
verwendet werden:
Wie Sie sehen können, habe ich drei Aktionen erstellt:
CreatePayment: Dies ist die Aktion, die die Zahlung auslöst. Es ruft PayPal an, um die Zahlung zu erstellen, und leitet den Benutzer dann an PayPal weiter, um die Transaktion zu genehmigen.
PaymentSuccessful: Dies ist die Aktion, bei der PayPal unseren Kunden nach einer erfolgreichen Zahlung zurückleitet. An diesem Punkt können wir die Zahlung ausführen, um die Gelder auf unser Händlerkonto zu übertragen.
PaymentCancelled: Bei dieser Aktion wird der Benutzer von PayPal umgeleitet, wenn der Benutzer den Genehmigungsprozess abbricht. Zu diesem Zeitpunkt möchten Sie dem Kunden möglicherweise die Möglichkeit geben, es erneut zu versuchen oder sich mit Ihnen in Verbindung zu setzen.
Autorisieren Sie eine Zahlung, um sie später zu erfassen
Dieses Szenario ist dem vorherigen Fall sehr ähnlich. Möglicherweise möchten Sie diese Methode verwenden, wenn Sie Vorbestellungen für ein Produkt durchführen möchten, das noch nicht verfügbar ist. Die Schritte, um diese Zahlung zu erhalten, sind:
Autorisierung der Zahlung: Der Parameter 'intent' für diesen Aufruf sollte 'authorize' lauten.
Erfassung der 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:
// Specify an amount to capture. By setting 'is_final_capture' to true, all remaining funds held by the authorization will be released from the funding instrument.
9
varcapture=newCapture()
10
{
11
amount=newAmount()
12
{
13
currency="USD",
14
total="4.54"
15
},
16
is_final_capture=true
17
};
18
19
// Capture an authorized payment by POSTing to
20
// URI v1/payments/authorization/{authorization_id}/capture
AuthorizePayment ist die Aktion, die die Zahlung auslöst. Es ist der vorherigen "CreatePayment" -Funktion sehr ähnlich, aber wir übergeben in diesem Fall "authorize" als den Parameter "intent".
AuthorizeSuccessful ist die Aktion, bei der Ihr Kunde nach erfolgreicher Genehmigung der Zahlung auf PayPal umgeleitet wird. An dieser Stelle erfasse ich die Zahlung, aber Sie könnten die PaymentId in Ihrer Datenbank speichern und die Zahlung erfassen, wenn Sie müssen.
In diesen Codebeispielen habe ich zur Vereinfachung die Zahlungsvariablenwerte fest codiert. In Ihrer realen Anwendung werden Sie sie wahrscheinlich in Methoden einschließen, die all diese Werte als Variablen annehmen, so dass alles dynamisch festgelegt und wiederverwendet werden kann.
Abonnements
Dies wird in PayPal als "Abrechnungspläne" bezeichnet. Sie
können wiederkehrende Zahlungspläne erstellen und Ihre Kunden für einen Abrechnungsplan anmelden, indem Sie eine
Abrechnungsvereinbarung erstellen. Mit der PayPal REST API können Sie Fakturierungspläne erstellen, aktualisieren oder löschen. Dies ist etwas, das Sie verwenden können, wenn Sie ein Admin-Panel erstellen möchten, um diese Dinge für Ihr Unternehmen zu verwalten.
Die Schritte zum Erstellen wiederkehrender Kosten für Ihre Kunden wären:
Erstellen Sie einen Abrechnungsplan und aktivieren Sie ihn. Nachdem Sie einen Fakturierungsplan erstellt haben, befindet er sich in einem CREATED-Status. Es muss aktiviert werden, indem eine PATCH-Anfrage gestellt wird.
Legen Sie eine Abrechnungsvereinbarung an und führen Sie sie 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.
Abrechnungspläne
Erstellen Sie einen Abrechnungsplan
Erstellen Sie einen Fakturierungsplan, der die Abrechnungsperioden definiert. Dies ist eine Zusammenfassung der Parameter, die zum Erstellen eines Plans übergeben werden müssen.
Name: Name des Abrechnungsplans.
Beschreibung: Beschreibung des Fakturierungsplans.
Typ: Zulässige Werte sind 'FIXED' für eine festgelegte Anzahl wiederkehrender Zahlungen oder 'INFINITE' für einen Plan, der wiederholt wird, bis er manuell abgebrochen wird.
Merchant Preferences: Dies ist ein Objekt, das Präferenzen wie Setup-Gebühr, maximale Fehlerversuche einer Zahlung, Rückgabe-URL, Abbruch-URL, Benachrichtigungs-URL angibt, wobei PayPal den Nutzer nach einer Zahlung umleitet.
Zahlungsdefinitionen: Array mit Zahlungsdefinitionen für diesen Plan. Normalerweise würde dieses Array eine oder zwei Zahlungsdefinitionen haben. Wenn wir eine kostenlose Testversion oder eine Testversion zu einem reduzierten Preis anbieten möchten, richten wir zwei Zahlungsdefinitionen ein. Die erste wird die Definition für die Probezeit sein, und die zweite Definition wäre die regelmäßige Zahlung. Die Eigenschaften für eine Zahlungsdefinition sind Name, Typ (Probe oder Normal), Häufigkeit (Tag, Woche, Monat, Jahr), Häufigkeitsintervall (wenn wir die Frequenz auf "WOCHE" und das Frequenzintervall auf "1" setzen, sind wir Definieren einer wöchentlichen Zahlung), Betrag, der dem Kunden berechnet wird, und Zyklen ist die Anzahl der gesamten Zahlungen. Charge Models dient dazu, die Versandkosten und Steuern zusätzlich zum Betragswert für den Plan anzugeben.
Dies ist ein Code-Snippet, das zeigt, wie ein Fakturierungsplan erstellt wird:
1
// Define the plan and attach the payment definitions and merchant preferences.
2
// More Information: https://developer.paypal.com/webapps/developer/docs/api/#create-a-plan
3
varbillingPlan=newPlan
4
{
5
name="Tuts+ Plus",
6
description="Monthly plan for courses.",
7
type="fixed",
8
// Define the merchant preferences.
9
// More Information: https://developer.paypal.com/webapps/developer/docs/api/#merchantpreferences-object
10
merchant_preferences=newMerchantPreferences()
11
{
12
setup_fee=GetCurrency("0"),// $0
13
return_url="returnURL",// Retrieve from config
14
cancel_url="cancelURL",// Retrieve from config
15
auto_bill_amount="YES",
16
initial_fail_amount_action="CONTINUE",
17
max_fail_attempts="0"
18
},
19
payment_definitions=newList<PaymentDefinition>
20
{
21
// Define a trial plan that will only charge $9.99 for the first
22
// month. After that, the standard plan will take over for the
23
// remaining 11 months of the year.
24
newPaymentDefinition()
25
{
26
name="Trial Plan",
27
type="TRIAL",
28
frequency="MONTH",
29
frequency_interval="1",
30
amount=GetCurrency("0"),// Free for the 1st month
31
cycles="1",
32
charge_models=newList<ChargeModel>
33
{
34
newChargeModel()
35
{
36
type="TAX",
37
amount=GetCurrency("1.65")// If we need to charge Tax
38
},
39
newChargeModel()
40
{
41
type="SHIPPING",
42
amount=GetCurrency("9.99")// If we need to charge for Shipping
43
}
44
}
45
},
46
// Define the standard payment plan. It will represent a monthly
47
// plan for $19.99 USD that charges once month for 11 months.
48
newPaymentDefinition
49
{
50
name="Standard Plan",
51
type="REGULAR",
52
frequency="MONTH",
53
frequency_interval="1",
54
amount=GetCurrency("15.00"),
55
// > NOTE: For `IFNINITE` type plans, `cycles` should be 0 for a `REGULAR` `PaymentDefinition` object.
Ein neu erstellter Fakturierungsplan hat den Status CREATED. Aktivieren Sie es in den Status AKTIV, damit Ihre Kunden den Plan abonnieren können. Um den Plan zu aktivieren, müssen wir eine PATCH-Anfrage machen:
1
// Activate the plan
2
varpatchRequest=newPatchRequest()
3
{
4
newPatch()
5
{
6
op="replace",
7
path="/",
8
value=newPlan(){state="ACTIVE"}
9
}
10
};
11
plan.Update(apiContext,patchRequest);
Wie Sie sehen können, sind PayPal-Bibliotheken ein direkter Wrapper für ihre REST-API, was gut ist, aber die API ist auch sehr komplex im Vergleich zu anderen wie Stripe. Aus diesem Grund ist es wirklich eine gute Option, alle PayPal-Kommunikation in Objekte mit klareren und einfacheren APIs für unsere Anwendungen zu wickeln. Hier können Sie sehen, wie dieser Code in mehrere Funktionen eingepackt ist und wie Parameter aussehen:
Sie können die Informationen für einen bestehenden Abrechnungsplan aktualisieren, indem Sie eine "PATCH" -Anfrage stellen. Dies ist eine Funktion, die diesen Aufruf umschließt:
Um die Beschreibung des Fakturierungsplans zu aktualisieren, können wir diese Funktion aufrufen und die richtigen Parameter übergeben:
1
UpdateBillingPlan(
2
planId:"P-5FY40070P6526045UHFWUVEI",
3
path:"/",
4
value:newPlan{description="new description"});
Löschen eines Fakturierungsplans
Wenn Sie keine neuen Kunden für einen Abrechnungsplan akzeptieren möchten, sollten Sie sie idealerweise auf den Status "INAKTIV" aktualisieren. Dies wirkt sich nicht auf bestehende Abrechnungsvereinbarungen für diesen Plan aus. Dies kann einfach durch Aufruf der Funktion UpdateBillingPlan erfolgen:
1
UpdateBillingPlan(
2
planId: "P-5FY40070P6526045UHFWUVEI",
3
path: "/",
4
value: new Plan { state = "INACTIVE" });
Abrechnungsvereinbarungen
Erstellen Sie eine Abrechnungsvereinbarung
Sobald Sie einen oder mehrere Fakturierungspläne erstellt haben, möchten Sie damit beginnen, dass sich Kunden für Ihre Abonnementpläne anmelden. Um dies zu tun, 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:
1
publicIActionResultSubscribe()
2
{
3
varplan=PayPalSubscriptionsService.CreateBillingPlan("Tuts+ Plan","Test plan for this article",GetBaseUrl());
Abonnieren: Dies ist die erste Aktion, die aufgerufen wird. Es wird ein Testabrechnungsplan erstellt und 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 als 'Return URL' nach einem erfolgreichen Abonnement verwendet. Die Übereinstimmungstoken-ID wird in der Abfragezeichenfolge übergeben, und wir verwenden dieses Token, um die Fakturierungsvereinbarung auszuführen und sie aktiv zu machen.
SubscribeCancel: Diese Aktion wird als "URL abbrechen"
verwendet. Wenn aus irgendeinem Grund die Zahlung fehlschlägt oder Ihr Kunde die Zahlung auf PayPal storniert, wird der Benutzer zu dieser Aktion geleitet, und Sie müssen damit umgehen. Vielleicht bieten Sie die Möglichkeit, es erneut zu versuchen.
Wie Sie im vorherigen Code-Snippet sehen können, habe ich den Großteil der Funktionalität in verschiedene Methoden eingepackt. Der erste ist "CreateBillingPlan", der im vorherigen Abschnitt erklärt wurde. Der zweite ist "CreateBillingAgreement", mit dem ein Benutzer einen Plan abonniert:
Die dritte Methode ist "ExecuteBillingAgreement". Nach einer erfolgreichen Genehmigung des Abonnements verwenden wir das zurückgegebene Token, um das Abonnement zu aktivieren:
Diese Option ist sehr begrenzt, und was ich von diesem Anruf erwarten würde, ist die Möglichkeit, den Abonnementplan zu ändern, um einen Kunden zu aktualisieren oder herabzustufen. Dies wird in einem einzelnen Aufruf nicht unterstützt, wie es in Stripe ist. Sie müssen dieses Szenario behandeln, indem Sie die aktuelle Vereinbarung aufheben und eine neue für Upgrades oder Downgrades erstellen. Es ist nicht ideal, aber es könnte sich in Zukunft ändern.
Fazit
Dies ist eine Übersicht über die gängigsten Funktionen, die Benutzer zur Integration in PayPal verwenden. Ihre API ist weitaus größer als die in diesem Artikel beschriebenen Integrationsmethoden. Sie können auch Rückerstattungen und teilweise Rückerstattungen ausgeben und sie haben viele verschiedene Optionen für Edge Cases in den in diesem Artikel behandelten Samples. Wenn Sie mehr Details zu einer bestimmten Integration erfahren möchten, hinterlassen Sie einen Vorschlag in den Kommentaren.