So binden Sie PayPal-Zahlungen in eine MVC Anwendung ein

PayPal gilt als das beliebteste Online-Zahlungsmittel. Grund dafür ist zunächst die sowohl für den Anwender als auch für den Händler einfache Eröffnung eines Kontos. Durch wenige Klicks kann ein Händler ein Konto erstellen, das sofort in eine E-Commerce- Anwendung eingebunden werden kann. PayPal bietet den Händlern und ihren Kunden schnelle Zahlungsabläufe und eine starke Sicherheit. Weiterhin bietet PayPal den Entwicklern eine leicht einzubindende API- und eine Sandbox Umgebung, um den Händler zu simulieren sowie verschiedene Dummy Accounts, um Test-Zahlungen zu simulieren. In diesem Blogbeitrag möchte ich demonstrieren, wie diese Einbindung in eine MVC Applikation funktioniert.

Vorbereitungen

Auf der Seite https://developer.paypal.com können Entwickler eine Sandbox Umgebung einrichten und Test-Accounts mit selbst konfigurierbarem Guthaben einrichten. Nach dem Erstellen einer App erhalten wir zweimal eine ClientID und ein ClientSecret, einmal für die Sandbox Umgebung zum Testen und einmal für die zukünftige Live Umgebung.

Einbindung in MVC

Die Einbindung funktioniert über ein Nuget Package, das von PayPal bereitgestellt wird und über die Nuget Console installiert wird. Als Nächstes muss das Projekt konfiguriert werden: Die web.config wird mit folgenden Einträgen erweitert:

   <configSections>
<!-- ... -->
<section name="paypal" type="PayPal.SDKConfigHandler, PayPal" />
</configSections>

<!-- PayPal SDK settings -->
<paypal>
<settings>
<add name="mode" value="sandbox"/>
<add name="clientId" value="______Client_Id______"/>
<add name="clientSecret" value="______Client_Pass______"/>
</settings>
</PayPal>

Nach der Installation der Nuget Packages werden Dlls eingebunden, die eine API zur Kommunikation mit PayPal bereitstellen. Die Kommunikation mit PayPal ist im folgenden Diagramm beschrieben:

Der Zahlungsprozess

Authentifizierung

Der Config manager aus dem Namespace PayPal. API liest die Einstellung aus der web.config, damit die App ein OAuth Token erhält, mit dem sie sich bei den Services von PayPal identifizieren kann.

Dictionary<string, string> config = ConfigManager.Instance.GetProperties();
string accessToken = new OAuthTokenCredential(config).GetAccessToken();
APIContext apiContext = new APIContext(accessToken);

Bestätigung

Nun muss die PayPal Zahlung erstellt und an PayPal gesendet werden, damit der Kunde sich  authentifiziert und die Zahlung bestätigt. Dafür hat die PayPal API mehrere Klassen bereitgestellt:

  • Payment: Erstellt die Zahlung und führt die Zahlung aus.
  • Payer: Informationen über den Kunden.
  • RedirectUrl: Definiert an welche URLs PayPal nach einer Zahlung bzw. nach dem Abbruch einer Zahlung weiterleiten soll.
  • Transaction: Beinhaltet die wichtigsten Informationen über eine Zahlung
    Amount: Beinhaltet Informationen über den Betrag wie Geldwährung, Steuerinformationen und Gesamtsumme.
    ItemList: Ist eine Collection von Items (Artikel mit allen dazu gehörige Informationen wie Preis, Anzahl, Beschreibung, etc.)

Die Klasse Payment bietet die Methode Create zum Ausführen der Zahlung:

Payment createdPayment = payment.Create(apiContext);

Ein Request wird an PayPal geschickt mit allen Zahlungsinformationen. Als Antwort darauf erhält die App eine URL, an die der Benutzer weitergeleitet wird. Um den User wiederzuerkennen, wird in der Session die Zahlungs-ID gespeichert.

Der Anwender muss sich bei PayPal anmelden und die Zahlung durchführen. Mit welcher Zahlungsmethode er bei PayPal zahlt, ist für uns nicht wichtig. PayPal nimmt die Zahlung an und leitet den User an die Redirect-URL, die sie von uns erhalten hat oder an die Cancel-URL, falls der Anwender die Zahlung abbricht.

PayPal fügt der URL, die sie von uns erhalten hat, Parameter hinzu und leitet den Anwender auf diese weiter. Anhand der Parameter und der in der Session gespeicherten Information wird der Vorgang erkannt und mit der Ausführung der Zahlung fortgefahren.

Ausführung

Nachdem der User die Zahlung bestätigt hat, wird sie durch die Klasse Payment ausgeführt. Dafür wird die Methode Execute aufgerufen.

Paymen​t payment = new Payment() { id = paymentId };

Payment executedPayment = payment.Execute(apiContext, paymentExecution);

Die Methode fragt den Status des Vorgangs bei PayPal ab und erhält als Antwort den Status der Zahlung. Ist der Status „approved“, dann war die Zahlung erfolgreich, ansonsten nicht. Ein Payment kann 3 verschiedene Status haben:

  • Created: Die Transaktion ist erstellt, aber vom Zahler noch nicht bestätigt.
  • Approved: Der Zahler hat die Zahlung bei PayPal bestätigt.
  • Failed: Die Transaktion war nicht erfolgreich.

Die Anwendung soll dann – je nach Status – den Anwender auf eine andere Seite weiterleiten bzw. eine entsprechende Meldung zeigen.

Erfahren Sie mehr

Ich bin im Flow! – Eine Übersicht zu Microsoft Flow
Blog
Blog

Ich bin im Flow! – Eine Übersicht zu Microsoft Flow

Die Power Platform wird aktuell von Microsoft sehr stark gepusht. Zeit, sich mit dem Potenzial der einzelnen Komponenten zu beschäftigen. Heute: Flow.

DevOps und Container
Blog
Blog

DevOps und Container

DevOps an sich ist nicht an eine Technologie gebunden, jedoch haben sich Container-Technologien und DevOps als Verwandte im Geiste gefunden.

PowerApps – Neuigkeiten, Übersicht, Tipps & Tricks
Blog
Blog

PowerApps – Neuigkeiten, Übersicht, Tipps & Tricks

Neues aus der Welt von PowerApps

May
04
novaCapta auf der dotnet Cologne
Event
Event

novaCapta auf der dotnet Cologne

In nächster Nachbarschaft zu unserem Kölner Büro findet am 04. und 05. Mai die dotnet Cologne im KOMED statt. Wir von der novaCapta sind auch dabei.

Azure Functions: Der Webservice ohne Webserver
Blog
Blog

Azure Functions: Der Webservice ohne Webserver

Azure Functions als Authentifizierungs-Helfer für clientseitige Lösungen mit 3rd Party APIs

Paket Dependency Manager für .NET
Blog
Blog

Paket Dependency Manager für .NET

Paket ist ein Dependency Manager für .NET, welcher es sich zum Ziel gesetzt hat einige Probleme von NuGet zu beheben.

Office 365 Groups als Evolution von SharePoint?
Blog
Blog

Office 365 Groups als Evolution von SharePoint?

Zusätzlich zu SharePoint erlauben die Office 365 Groups es mir als Anwender, schnell und einfach neue Gruppen anzulegen und selbständig Benutzer hinzuzufügen.

Das neuste Mitglied der Office 365 Familie: Delve
Blog
Blog

Das neuste Mitglied der Office 365 Familie: Delve

Microsoft legt nach: Mit Delve startet eine neue Form des Suchens und des Auffinden von Dokumenten und Informationen.

DevOps und „The Phoenix Project“
Blog
Blog

DevOps und „The Phoenix Project“

Buchvorstellung "Projekt Phoenix: Der Roman über IT und DevOps - Neue Erfolgsstrategien für Ihre Firma" von Gene Kim.

Sprechen Sie LUIS? – Der intelligente Chat-Bot im Praxistest
Blog
Blog

Sprechen Sie LUIS? – Der intelligente Chat-Bot im Praxistest

Mit LUIS, der Sprach- und Texterkennungssoftware von Microsoft, und dem Bot Framework von Azure haben wir eine Lösung für den IT-Support entwickelt.

Jan
25
Webcast mit Microsoft: Fit für die digitale Arbeitswelt
Webinar
Webinar

Webcast mit Microsoft: Fit für die digitale Arbeitswelt

Die digitale Transformation und die Veränderung der Arbeitswelt ist längst in vielen Unternehmen und in den öffentlichen Einrichtungen angekommen. Dennoch stell...

Theobald Software neuer Partner von novaCapta
News
News

Theobald Software neuer Partner von novaCapta

Komplexe SAP-Prozesse direkt in SharePoint durchführen – dabei unterstützt uns unser neuer Partner Theobald Software.