Toplu Ödeme GZip İsteği

using System.IO.Compression;

public class PaywallApiClient
{
    private readonly HttpClient _httpClient;
    private readonly string _baseUrl;

    public PaywallApiClient(string baseUrl = "https://test-payment-api.itspaywall.com")
    {
        _httpClient = new HttpClient();
        _baseUrl = baseUrl;
    }

    public async Task<string> SendBulkPaymentAsync(string filePath, BulkPaymentRequest request)
    {
        try
        {
            var gzippedData = CompressFile(filePath);
            
            using var formData = new MultipartFormDataContent();
            
            var fileContent = new ByteArrayContent(gzippedData);
            fileContent.Headers.Add("Content-Type", "application/gzip");
            formData.Add(fileContent, "File", Path.GetFileName(filePath) + ".gz");
            
            formData.Add(new StringContent(request.FileFormat), "FileFormat");
            formData.Add(new StringContent(request.FilePattern), "FilePattern");
            formData.Add(new StringContent(request.CallbackAddress), "CallbackAddress");

            _httpClient.DefaultRequestHeaders.Clear();
            _httpClient.DefaultRequestHeaders.Add("apiclientpublic", request.ApiClientPublic);
            _httpClient.DefaultRequestHeaders.Add("apikeypublic", request.ApiKeyPublic);
            var response = await _httpClient.PostAsync($"{_baseUrl}/api/paywall/payment/bulk/file/startdirect", formData);
            var responseContent = await response.Content.ReadAsStringAsync();
            
            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("İstek başarılı!");
                Console.WriteLine($"Status Code: {response.StatusCode}");
                return responseContent;
            }
            else
            {
                Console.WriteLine($"Hata: {response.StatusCode} - {responseContent}");
                return null;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Hata oluştu: {ex.Message}");
            return null;
        }
    }

    private byte[] CompressFile(string filePath)
    {
        if (!File.Exists(filePath))
        {
            throw new FileNotFoundException($"Dosya bulunamadı: {filePath}");
        }

        var fileBytes = File.ReadAllBytes(filePath);
        
        Console.WriteLine($"Orijinal dosya boyutu: {fileBytes.Length} bytes");
        
        using var outputStream = new MemoryStream();
        using (var gzipStream = new GZipStream(outputStream, CompressionMode.Compress))
        {
            gzipStream.Write(fileBytes, 0, fileBytes.Length);
        }
        
        var compressedData = outputStream.ToArray();
        Console.WriteLine($"Sıkıştırılmış dosya boyutu: {compressedData.Length} bytes");
        
        return compressedData;
    }

    public void Dispose()
    {
        _httpClient?.Dispose();
    }
}

public class BulkPaymentRequest
{
    public string FileFormat { get; set; }
    public string FilePattern { get; set; }
    public string CallbackAddress { get; set; }
    public string ApiClientPublic { get; set; }
    public string ApiKeyPublic { get; set; }
}

public class Program
{
    public static async Task Main(string[] args)
    {
        var client = new PaywallApiClient();
        
        var request = new BulkPaymentRequest
        {
            FileFormat = "5",
            FilePattern = "1",
            CallbackAddress = "your_callback_address_here",
            ApiClientPublic = "your_api_client_public_key_here",
            ApiKeyPublic = "your_api_key_here" 
        };
        
        // Select the file path to be processed
        // Ensure the file exists at this path
        // Example: Adjust the path according to your environment
        string filePath = "/Users/userName/bulkPaymentRequestFile/yuz_pw_test.txt";
        
        Console.WriteLine($"Dosya işleniyor: {filePath}");
        
        var result = await client.SendBulkPaymentAsync(filePath, request);
        
        if (result != null)
        {
            Console.WriteLine("API Yanıtı:");
            Console.WriteLine(result);
        }
        
        client.Dispose();
        
        Console.WriteLine("İşlem tamamlandı. Devam etmek için bir tuşa basın...");
        Console.ReadKey();
    }
}
 

Last updated