104 lines
4.2 KiB
C#

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