IDPayClient 1.0.0

dotnet add package IDPayClient --version 1.0.0                
NuGet\Install-Package IDPayClient -Version 1.0.0                
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="IDPayClient" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add IDPayClient --version 1.0.0                
#r "nuget: IDPayClient, 1.0.0"                
#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.
// Install IDPayClient as a Cake Addin
#addin nuget:?package=IDPayClient&version=1.0.0

// Install IDPayClient as a Cake Tool
#tool nuget:?package=IDPayClient&version=1.0.0                

IDPay Payment Gateway Client Library

Overview

This C# library provides a comprehensive client for interacting with the IDPay payment gateway, simplifying payment processing, transaction management, and financial operations for .NET applications.

Disclaimer

This library is an independent implementation and is not officially supported by IDPay. Always refer to the official IDPay documentation for the most up-to-date API specifications.

Features

  • Full support for IDPay payment gateway API endpoints
  • Comprehensive transaction management
  • Flexible configuration options
  • Robust error handling
  • Support for both production and sandbox environments

Supported Operations

  • Request new payment transactions
  • Verify transactions
  • Check transaction status
  • Retrieve transaction lists
  • Configurable for test and production modes

Installation

Install the library via NuGet Package Manager:

dotnet add package IDPayClient

Configuration

Creating an IDPay Configuration

var config = new IDPayConfig
{
    ApiKey = "your_idpay_api_key",
    IsTest = false  // Set to true for sandbox environment
};

Initializing the Client

var httpClient = new HttpClient();
var idPayClient = new IDPayClient(config, httpClient);

Dependency Injection in ASP.NET Core

Configuration in Program.cs (.NET 8+)

using IDPayClient;

var builder = WebApplication.CreateBuilder(args);

// Configure IDPay settings from configuration
builder.Services.Configure<IDPayConfig>(
    builder.Configuration.GetSection("IDPay"));

// Register IDPayClient with dependency injection
builder.Services.AddHttpClient<IDPayClient>((serviceProvider, client) => 
{
    var config = serviceProvider.GetRequiredService<IOptions<IDPayConfig>>().Value;
    return new IDPayClient(config, client);
});

var app = builder.Build();

Consuming in a Service or Controller

public class PaymentService
{
    private readonly IDPayClient _idPayClient;

    public PaymentService(IDPayClient idPayClient)
    {
        _idPayClient = idPayClient;
    }

    public async Task<CreatePaymentResponse> ProcessPayment()
    {
        var paymentRequest = new CreatePaymentRequest
        {
            OrderId = "some_order_id",
            Amount = 50000,
            CallbackAddress = "https://yourapp.com/callback",
            Name = "John Doe",
            Email = "john@example.com"
        };
        try 
        {
            return await _idPayClient.RequestPaymentAsync(paymentRequest);
        }
        catch (Exception ex)
        {
            // Handle exception here
            throw;
        }
    }
}

// Or in a minimal API controller
app.MapPost("/payment", async (IDPayClient idPayClient) =>
{
    var paymentRequest = new PaymentRequest
    {
        OrderId = "some_order_id",
        Amount = 50000,
        CallbackAddress = "https://yourapp.com/callback"
    };

    return await idPayClient.RequestPaymentAsync(paymentRequest);
});
{
  "IDPay": {
    "ApiKey": "your_idpay_api_key",
    "IsTest": true,
    "RequestNewTransactionAPI": "https://api.idpay.ir/v1.1/payment",
    "PaymentVerificationAPI": "https://api.idpay.ir/v1.1/payment/verify",
    "PaymentInquiryAPI" : "https://api.idpay.ir/v1.1/payment/inquiry",
    "TransactionsListAPI" : "https://api.idpay.ir/v1.1/payment/transactions"
  }
}

Environment-Specific Configuration

For different environments, you can use:

appsettings.Development.json
{
  "IDPay": {
    "IsTest": true,
    "ApiKey": "your_api_key"
  }
}
appsettings.Production.json
{
  "IDPay": {
    "IsTest": false,
    "ApiKey": "your_api_key"
  }
}

Best Practices

  • Use IOptions<IDPayConfig> for configuration
  • Utilize environment-specific settings
  • Protect sensitive information using user secrets or secure vaults
  • Use HttpClient factory for proper connection management

Usage Examples

Requesting a Payment

var paymentRequest = new PaymentRequest
{
    OrderId = "unique_order_123",
    Amount = 50000,  // Amount in Rials
    CallbackAddress = "https://yourwebsite.com/payment/callback",
    Description = "Product purchase",
    Name = "John Doe",
    Email = "john.doe@example.com",
    PhoneNumber = "09123456789"
};

var paymentResponse = await idPayClient.RequestPaymentAsync(paymentRequest);

if (paymentResponse.Success)
{
    // Redirect user to paymentResponse.PaymentLink
    Console.WriteLine($"Payment Link: {paymentResponse.PaymentLink}");
}
else
{
    Console.WriteLine($"Error: {paymentResponse.Message}");
}

Verifying a Transaction

var verifyRequest = new VerifyTransactionRequest
{
    TransactionID = "idpay_transaction_id",
    OrderID = "your_order_id"
};

var verificationResponse = await idPayClient.VerifyTransactionAsync(verifyRequest);

Checking Transaction Status

var inquiryRequest = new TransactionInquiryRequest
{
    TransactionID = "idpay_transaction_id",
    OrderID = "your_order_id"
};

var statusResponse = await idPayClient.CheckTransactionStatusAsync(inquiryRequest);

Configuration Options

The IDPayConfig class allows you to customize:

  • API Key
  • Environment (Test/Production)
  • Custom API Endpoint URLs

Error Handling

The library throws ArgumentException for invalid input parameters and returns detailed error information through response objects.

Security

  • Validates input parameters
  • Supports API key authentication
  • Trims and sanitizes input data
  • Supports both test and production environments

Dependencies

  • .NET 8.0 or later

Contributing

Contributions are welcome! Please submit pull requests or open issues on the project repository.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

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.0 38 11/28/2024