using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Klarna.Checkout; namespace gehGassi.Core.Interfaces { /// /// Schnittstellenbeschreibung eines Service der alle benötigten Klarna-Funktionen zur Verfügung stellt /// public interface IKlarnaService { /// /// Prüft ob die Klarna Credentials korrekt sind und eine Verbindung zur Api aufgenommen werden kann /// /// Klarna Benutzername /// Klarna Passwort /// true wenn erfolgreich, false sonst Task TestCredentialsAsync(string username, string password); /// /// Erstellen einer Klarna-Order /// /// Id der simple print Bestellung /// Klarna Benutzername /// Klarna Passwort /// Redirect-Url für AGB /// Url für Checkout /// Bestätigungs-URL /// URL für Push-Notifications /// Klarna Order oder null, wenn ein Fehler aufgetreten ist Task CreateOrderAsync(long orderId, string username, string password, string termsUrl, string checkoutUrl, string confirmationUrl, string pushUrl); /// /// Abfragen einer Klarna-Order - Checkout API /// /// Klarna Order ID /// Klarna Benutzername /// Klarna Passwort /// Klarna Order oder null, wenn nicht gefunden Task GetOrderAsync(string klarnaOrderId, string username, string password); /// /// Abfragen einer Klarna-Order - OrderManagement API /// /// Klarna Order ID /// Klarna Benutzername /// Klarna Passwort /// Klarna Order oder null, wenn nicht gefunden Task GetManagementOrderAsync(string klarnaOrderId, string username, string password); /// /// Bestätigen einer Klarna-Order - OrderManagement API /// /// Klarna Order ID /// Klarna Benutzername /// Klarna Passwort /// Klarna Order oder null, wenn nicht gefunden Task AcknowledgeOrderAsync(string klarnaOrderId, string username, string password); /// /// Bestätigen des Versands einer Bestellung - OrderManagement API /// /// Order ID /// Klarna Benutzername /// Klarna Passwort /// true wenn erfolgreich, false sonst Task CaptureOrderAsync(long orderId, string username, string password); } /// /// Rückgabe des Versuchs eine Order als Shipped einzutragen /// public enum CaptureOrderResult { /// /// Erfolgreich /// Success = 1, /// /// Capture nicht erlaubt /// CaptureNotAllowed = 20, /// /// Der verfügbare Betrag ist 0 /// RemainingAuthorizedAmount = 21, /// /// Bestellung nicht gefunden /// OrderNotFound = 30, /// /// Authorisierung gescheitert /// AuthorizationFailed = 40, /// /// Timeout bei der Kommunikation. Nochmal versuchen /// Timeout = 50 } }