Maib.Checkout.Api.Connector 1.0.3

dotnet add package Maib.Checkout.Api.Connector --version 1.0.3
                    
NuGet\Install-Package Maib.Checkout.Api.Connector -Version 1.0.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Maib.Checkout.Api.Connector" Version="1.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Maib.Checkout.Api.Connector" Version="1.0.3" />
                    
Directory.Packages.props
<PackageReference Include="Maib.Checkout.Api.Connector" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Maib.Checkout.Api.Connector --version 1.0.3
                    
#r "nuget: Maib.Checkout.Api.Connector, 1.0.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Maib.Checkout.Api.Connector@1.0.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Maib.Checkout.Api.Connector&version=1.0.3
                    
Install as a Cake Addin
#tool nuget:?package=Maib.Checkout.Api.Connector&version=1.0.3
                    
Install as a Cake Tool

maib

maib Checkout API .NET Client

maib e-commerce Checkout API docs: https://docs.maibmerchants.md/checkout

Contents

Introduction

The maib Checkout API .NET client is a .NET (Core) library designed to simplify integration with the maib e-commerce Checkout API.

The client provides 4 main methods:

  • Create a new checkout (CreateCheckoutAsync) — creates a new checkout session and returns a RedirectUrl where the customer should be redirected to complete the payment.
  • Get all checkouts (GetAllCheckoutsAsync) — returns checkouts using various filters.
  • Get a checkout by ID (GetCheckoutByIdAsync) — returns checkout information by its unique identifier.
  • Refund a payment (RefundPaymentAsync) — requests a refund for a transaction made for a specific checkout.

The GenerateTokenAsync operation is used to acquire an access token, which is required for other operations.

Requirements

Before usage

To perform any operations, you need to obtain ClientId and ClientSecret.

Please send a message to ecomm@maib.md to complete the registration process and receive your credentials.

Usage

  1. Add the namespace in Program.cs:
using Maib.Checkout.Api.Connector.Extensions;
  1. Register the client:

Production client

services.AddMaibCheckoutConnector({IConfiguration instance}, {sectionName});

Sandbox client

services.AddMaibCheckoutSandboxConnector({IConfiguration instance}, {sectionName});

Configuration must contain the following section:

"sectionName": {
  "Url": "OurApiUrl",
  "RequestTimeoutMs": 30000
}

Production and sandbox url you can find in the e-Commerce maib checkout documentation: https://docs.maibmerchants.md/checkout

  1. Dependency injection:
public class YourService
{
    private readonly IMaibCheckoutApiClient _client;
    private readonly IMaibCheckoutApiSandboxClient _sandboxClient;

    public YourService(IMaibCheckoutApiClient client, IMaibCheckoutApiSandboxClient sandboxClient)
    {
        _client = client;
        _sandboxClient = sandboxClient;
    }
}

Examples

Access token generation

var generateTokenRequest = new GenerateTokenRequest
{
    ClientId = "YourProjectId",
    ClientSecret = "YourProjectSecret"
};

var generateTokenResult = await _client.GenerateTokenAsync(generateTokenRequest, cancellationToken);

if (!generateTokenResult.Ok)
{
    // request failed
    foreach (var error in generateTokenResult.Errors)
    {
        _logger.LogError(error.ErrorMessage);
    }

    return;
}

var accessToken = generateTokenResult.Result!.AccessToken;

// process response ...

Create checkout

var request = new CreateCheckoutRequest
{
    AccessToken = accessToken,
    Amount = 22.50m,
    Currency = Currency.MDL,

    CallbackUrl = "https://example.com/callback", // optional
    FailUrl = "https://example.com/fail",         // optional
    SuccessUrl = "https://example.com/success",   // optional
    Language = Language.Ro,                       // optional

    Payer = new PayerDto // optional
    {
        Name = "John Smith",
        Phone = "37369222222",
        Email = "test.email@gmail.com",
        UserAgent = "Chrome",
        Ip = "192.193.245.11"
    },

    Order = new OrderDto // optional
    {
        Amount = 19.52m,
        Currency = Currency.MDL,
        DeliveryAmount = 21.43m,
        DeliveryCurrency = Currency.MDL,
        Description = "order description",
        Id = "TY223423",
        Items =
        [
            new OrderItemDto
            {
                Name = "Item1",
                Currency = Currency.MDL,
                Price = 10.23m,
                Quantity = 1,
                DisplayOrder = 1,
                Id = "32423422"
            },
            new OrderItemDto
            {
                Name = "Item2",
                Currency = Currency.MDL,
                Price = 11.25m,
                Quantity = 2,
                DisplayOrder = 3,
                Id = "453434345"
            }
        ]
    }
};

var createCheckoutResult = await _client.CreateCheckoutAsync(request, cancellationToken);

if (!createCheckoutResult.Ok)
{
    // request failed
    foreach (var error in createCheckoutResult.Errors)
    {
        _logger.LogError(error.ErrorMessage);
    }

    return;
}

var checkoutId = createCheckoutResult.Result!.CheckoutId;
var checkoutUrl = createCheckoutResult.Result!.CheckoutUrl;

// process create checkout result ...

Refund request

var request = new RefundPaymentRequest
{
    PayId = "0F2442CE-7738-4AEA-AD08-54F2E7321086", // Payment identifier received in the callback message
    AccessToken = accessToken,
    Amount = 23.44m,                    // optional; if not specified, full refund will be requested
    Reason = "Some reason for refund"   // optional
};

var refundResult = await _client.RefundPaymentAsync(request, cancellationToken);

if (!refundResult.Ok)
{
    // request failed
    foreach (var error in refundResult.Errors)
    {
        _logger.LogError(error.ErrorMessage);
    }

    return;
}

var refundId = refundResult.Result!.RefundId;
var status = refundResult.Result!.Status; // PaymentRefundStatus.Created will be returned on successful refund request.

// process refund result ...

Get all checkouts request

// All filtering properties are optional; if none are specified then all checkouts will be returned.
var getAllRequest = new GetAllCheckoutsRequest
{
    Id = Guid.Parse("2f6b3d5e-7b2a-4f2d-9c6b-1a4c8f0f3d21"),
    OrderId = "ORD-2026-000123",

    Status = CheckoutStatus.Created,
    MinAmount = 10.50m,
    MaxAmount = 2500.00m,

    Currency = Currency.MDL,
    Language = Language.Ro,

    PayerName = "John Doe",
    PayerEmail = "john.doe@example.com",
    PayerPhone = "+37369000111",
    PayerIp = "203.0.113.42",

    CreatedAtFrom = DateTimeOffset.UtcNow.AddDays(-14),
    CreatedAtTo = DateTimeOffset.UtcNow,

    ExpiresAtFrom = DateTimeOffset.UtcNow.AddDays(1),
    ExpiresAtTo = DateTimeOffset.UtcNow.AddDays(7),

    CancelledAtFrom = DateTimeOffset.UtcNow.AddDays(-30),
    CancelledAtTo = DateTimeOffset.UtcNow.AddDays(-20),

    FailedAtFrom = DateTimeOffset.UtcNow.AddDays(-10),
    FailedAtTo = DateTimeOffset.UtcNow.AddDays(-5),

    CompletedAtFrom = DateTimeOffset.UtcNow.AddDays(-4),
    CompletedAtTo = DateTimeOffset.UtcNow.AddDays(-1),

    Count = 50,
    Offset = 0,

    SortBy = CheckoutOrderField.CreatedAt,
    Order = OrderOption.Desc,

    AccessToken = accessToken // required
};

var checkoutsResult = await _client.GetAllCheckoutsAsync(getAllRequest, cancellationToken);

if (!checkoutsResult.Ok)
{
    // request failed
    foreach (var error in checkoutsResult.Errors)
    {
        _logger.LogError(error.ErrorMessage);
    }

    return;
}

CheckoutDto[] checkouts = checkoutsResult.Result!.Items;

PaymentDto[] payments = checkouts
    .Where(x => x.Payment != null)
    .Select(x => x.Payment!)
    .ToArray(); // If a checkout has already been paid, CheckoutDto contains PaymentDto with payment info.

int count = checkoutsResult.Result!.Count;            // Count of returned checkouts
int totalCount = checkoutsResult.Result!.TotalCount;  // Total count matching specified filters

// process get all checkouts result ...

Get checkout by id

var getByIdRequest = new GetCheckoutByIdRequest
{
    AccessToken = accessToken,
    CheckoutId = Guid.Parse("ee3c152a-d94b-414b-9d5b-68839a8f415a")
};

var checkoutResponse = await _client.GetCheckoutByIdAsync(getByIdRequest, cancellationToken);

if (!checkoutResponse.Ok)
{
    // request failed
    foreach (var error in checkoutResponse.Errors)
    {
        _logger.LogError(error.ErrorMessage);
    }

    return;
}

// Base checkout information
var checkoutId = checkoutResponse.Result!.Id;
var checkoutCreatedAt = checkoutResponse.Result!.CreatedAt;
var checkoutStatus = checkoutResponse.Result!.Status;
var checkoutAmount = checkoutResponse.Result!.Amount;
var checkoutCurrency = checkoutResponse.Result!.Currency;
var checkoutOrder = checkoutResponse.Result!.Order;
var checkoutExpiresAt = checkoutResponse.Result!.ExpiresAt;
var checkoutPayer = checkoutResponse.Result!.Payer;
var checkoutPayment = checkoutResponse.Result!.Payment;
var checkoutCallbackUrl = checkoutResponse.Result!.CallbackUrl;
var checkoutSuccessUrl = checkoutResponse.Result!.SuccessUrl;
var checkoutFailUrl = checkoutResponse.Result!.FailUrl;
var checkoutLanguage = checkoutResponse.Result!.Language;
var checkoutUrl = checkoutResponse.Result!.Url;
var checkoutCompletedAt = checkoutResponse.Result!.CompletedAt;
var checkoutFailedAt = checkoutResponse.Result!.FailedAt;
var checkoutCancelledAt = checkoutResponse.Result!.CancelledAt;

// Order info
var orderId = checkoutResponse.Result!.Order.Id;
var orderDescription = checkoutResponse.Result!.Order.Description;
var orderDate = checkoutResponse.Result!.Order.Date;
var orderDeliveryAmount = checkoutResponse.Result!.Order.DeliveryAmount;
var orderDeliveryCurrency = checkoutResponse.Result!.Order.DeliveryCurrency;
var orderAmount = checkoutResponse.Result!.Order.Amount;
var orderCurrency = checkoutResponse.Result!.Order.Currency;
var orderItems = checkoutResponse.Result!.Order.OrderItems;

// Order items (1st)
var orderItem1 = checkoutResponse.Result!.Order.OrderItems[0];
var orderItem1ExternalId = orderItem1.ExternalId;
var orderItem1Title = orderItem1.Title;
var orderItem1Amount = orderItem1.Amount;
var orderItem1Currency = orderItem1.Currency;
var orderItem1Quantity = orderItem1.Quantity;
var orderItem1DisplayOrder = orderItem1.DisplayOrder;

// Order items (2nd)
var orderItem2 = checkoutResponse.Result!.Order.OrderItems[1];
var orderItem2ExternalId = orderItem2.ExternalId;
var orderItem2Title = orderItem2.Title;
var orderItem2Amount = orderItem2.Amount;
var orderItem2Currency = orderItem2.Currency;
var orderItem2Quantity = orderItem2.Quantity;
var orderItem2DisplayOrder = orderItem2.DisplayOrder;

// Payer info
var payerName = checkoutResponse.Result!.Payer.Name;
var payerEmail = checkoutResponse.Result!.Payer.Email;
var payerUserAgent = checkoutResponse.Result!.Payer.UserAgent;
var payerPhone = checkoutResponse.Result!.Payer.Phone;
var payerIp = checkoutResponse.Result!.Payer.Ip;

// Payment info
var paymentPaymentId = checkoutResponse.Result!.Payment?.PaymentId;
var paymentPaymentMethod = checkoutResponse.Result!.Payment?.PaymentMethod;
var paymentNote = checkoutResponse.Result!.Payment?.Note;
var paymentExecutedAt = checkoutResponse.Result!.Payment?.ExecutedAt;
var paymentStatus = checkoutResponse.Result!.Payment?.Status;
var paymentAmount = checkoutResponse.Result!.Payment?.Amount;
var paymentCurrency = checkoutResponse.Result!.Payment?.Currency;
var paymentType = checkoutResponse.Result!.Payment?.Type;
var paymentProviderType = checkoutResponse.Result!.Payment?.ProviderType;
var paymentSenderName = checkoutResponse.Result!.Payment?.SenderName;
var paymentSenderIban = checkoutResponse.Result!.Payment?.SenderIban;
var paymentRecipientIban = checkoutResponse.Result!.Payment?.RecipientIban;
var paymentReferenceNumber = checkoutResponse.Result!.Payment?.ReferenceNumber;
var paymentMcc = checkoutResponse.Result!.Payment?.Mcc;
var paymentOrderId = checkoutResponse.Result!.Payment?.OrderId;
var paymentTerminalId = checkoutResponse.Result!.Payment?.TerminalId;
var paymentRefundedAmount = checkoutResponse.Result!.Payment?.RefundedAmount;
var paymentApprovalCode = checkoutResponse.Result!.Payment?.ApprovalCode;
var paymentRequestedRefundAmount = checkoutResponse.Result!.Payment?.RequestedRefundAmount;
var paymentFirstRefundedAt = checkoutResponse.Result!.Payment?.FirstRefundedAt;
var paymentLastRefundedAt = checkoutResponse.Result!.Payment?.LastRefundedAt;

// process checkout response ...

Troubleshooting

All requests return the following result structure:

{
  "Result": {},
  "Ok": true,
  "Errors": []
}

Properties

  • Ok — indicates whether the request is successful. A successful response is when Result is not null and Errors is null or an empty list.
  • Result — holds the response payload.
  • Errors — holds the request errors.
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.3 322 3/24/2026