Altbilgi içeriğine atla
IRONPDF KULLANARAK

C# FinTech Uygulamaları için PDF Makbuzlar ve İşlem Kayıtları

Bir Uyumluluk Sorunu, Sadece Bir Biçimlendirme Sorunu Değil

IronPDF ana sayfa Çoğu FinTech uygulaması, işlem verilerini ilişkisel bir veritabanında depolar ve bir müşteri bir makbuz istediğinde, uygulama kaydı yeniden sorgular ve bir görünüm oluşturur. Bu yaklaşımın temel bir sorunu vardır: Ortaya çıkan PDF veya "makbuz", işlem tamamlandığı andaki müşteri tarafından görülen durumu değil, verilerin mevcut durumunu yansıtır.

Veritabanı kayıtları, normal operasyonel süreçler yoluyla düzeltilebilir, düzenlenebilir veya güncellenebilir. Yeniden sorgulanan bir makbuz tarihsel bir doküman değildir, geçmiş bir zaman damgasıyla ilgili mevcut bir anlık görüntüdür. Bir ödeme işleyicisi bir chargeback ile karşı karşıya kaldığında, bir neobanka'nın uyumluluk ekibi bir düzelticiye yanıt verirken, bir verdiği platform'un denetim kaydı mahkeme emri altına alındığında veya bir kripto borsa, bir KYC denetçisine belge bütünlüğünü göstermek zorunda olduğunda, bir sorgu yerine bir doküman olması gerekir.

Bir PDF dokümanı settlement anında depolanmıştır, tahrifat algılama için hash'lenmiş ve değiştirilemez belleğe yazılmıştır. Bu, mevcut PDF belgelerinin yıllarca geçerli kalmasını sağlar. Hangi belgelerle ilgileniyor olursanız olun: mali raporlar veya sadece ilk PDF, belge üretimi nihai olmalıdır.

PCI-DSS, SOX ve AML kayıt tutma yükümlülükleri, belirli olarak programlı olarak PDF belgeleri gerektirmez ancak kanıtlanabilir, denetlenebilir kayıtlar gerektirir. Veritabanı satırının tek başına sağlamadığı bir şekilde, işlenmiş, karmalanmış ve zaman damgalı bir PDF dosyası bu gereksinimi karşılar. Bu makalede daha sonra, yeni bir PDF belgesi oluşturma işlemi çalışırken bu sürecin nasıl işleyebileceğine dair bir IronPDF örneğine göz atacağız.

Çözüm Özeti: HTML İçeriğini C#'da PDF'ye Dönüştürün

Iron Software'dan IronPDF kütüphanesi, bir işlemin tamamlandığı anda, senkronize olarak, işlem hattının bir parçası olarak oluşturulmuş bir PDF makbuzu üretir. IronPDF'i, Visual Studio'daki NuGet Paket Yöneticisi veya Paket Yöneticisi Konsolu aracılığıyla yükleyebilirsiniz. Dot NET CLI kullanarak, sadece IronPDF paketini yükleyin.

Makbuz, bir HTML şablonundan veya HTML dosyasından işlenir, işlem kimliği ve zaman damgası ile damgalanır, karmalanır ve değişmez depolamaya yazılır. Bu, nihai belge olur. Bakımı yapılacak bir SSRS tanımı yoktur, arayacak üçüncü taraf bir belge API'si yoktur ve başsız bir tarayıcı yan aracısı yoktur. IronPDF, PDF görevleri için bir NuGet kütüphanesi olarak işlem içinde çalışır.

Belge İş Akışlarını Otomatikleştirmenin Ana Faydaları:

  • Tüm sayfa boyutları arasında formatlamayı korur.

  • Belge bütünlüğünü sağlamak için dijital imza desteği.

  • Bir web sayfasından veya HTML dizesinden PDF nesneleri oluşturma yeteneği.

  • Iron Software'ın müşteri logoları ve markalaması kolayca gömülebilir

Bir İşlemden Makbuza Geçiş Hattı Nasıl Çalışır

Mutlu Yol

Bir ödeme başarılı olur ve işlem kaydı veritabanına yazılır. Aynı işlemci – bir yanıt döndürmeden önce – işlem ayrıntılarıyla birlikte bir HTML içerik makbuzu şablonunu doldurur: Kimlik, UTC zaman damgası, tutar ve para birimi, gönderen ve alıcı kimlikleri, ücret dökümü ve dinamik içerik.

Yeni ChromePdfRenderer (özellikle var renderer = new ChromePdfRenderer();), web içeriğini PDF formatına dönüştürür. Ortaya çıkan PDF byte dizisi anında SHA-256 kullanılarak karmalanır.

using IronPdf
using System.Security.Cryptography;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.MarginTop = 15;

renderer.RenderingOptions.MarginBottom = 15;

string receiptHtml = $@"
    <h1>Transaction Receipt</h1>
    <p><strong>Transaction ID:</strong> {tx.Id}</p>
    <p><strong>Timestamp (UTC):</strong> {tx.CompletedAt:u}</p>
    <p><strong>Amount:</strong> {tx.Amount:F2} {tx.Currency}</p>
    <p><strong>Fee:</strong> {tx.Fee:F2} {tx.Currency}</p>
    <p><strong>From:</strong> {tx.SenderRef} &rarr; <strong>To:</strong> {tx.ReceiverRef}</p>
    <p><strong>Resulting Balance:</strong> {tx.ClosingBalance:F2} {tx.Currency}</p>";

var pdf = renderer.RenderHtmlAsPdf(receiptHtml);

string hash = Convert.ToHexString(SHA256.HashData(pdf.BinaryData));

await _db.StoreReceiptHashAsync(tx.Id, hash);

await _blobStorage.UploadImmutableAsync($"receipts/{tx.Id}.pdf", pdf.BinaryData);
using IronPdf
using System.Security.Cryptography;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.MarginTop = 15;

renderer.RenderingOptions.MarginBottom = 15;

string receiptHtml = $@"
    <h1>Transaction Receipt</h1>
    <p><strong>Transaction ID:</strong> {tx.Id}</p>
    <p><strong>Timestamp (UTC):</strong> {tx.CompletedAt:u}</p>
    <p><strong>Amount:</strong> {tx.Amount:F2} {tx.Currency}</p>
    <p><strong>Fee:</strong> {tx.Fee:F2} {tx.Currency}</p>
    <p><strong>From:</strong> {tx.SenderRef} &rarr; <strong>To:</strong> {tx.ReceiverRef}</p>
    <p><strong>Resulting Balance:</strong> {tx.ClosingBalance:F2} {tx.Currency}</p>";

var pdf = renderer.RenderHtmlAsPdf(receiptHtml);

string hash = Convert.ToHexString(SHA256.HashData(pdf.BinaryData));

await _db.StoreReceiptHashAsync(tx.Id, hash);

await _blobStorage.UploadImmutableAsync($"receipts/{tx.Id}.pdf", pdf.BinaryData);
Imports IronPdf
Imports System.Security.Cryptography

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.MarginTop = 15

renderer.RenderingOptions.MarginBottom = 15

Dim receiptHtml As String = $"
    <h1>Transaction Receipt</h1>
    <p><strong>Transaction ID:</strong> {tx.Id}</p>
    <p><strong>Timestamp (UTC):</strong> {tx.CompletedAt:u}</p>
    <p><strong>Amount:</strong> {tx.Amount:F2} {tx.Currency}</p>
    <p><strong>Fee:</strong> {tx.Fee:F2} {tx.Currency}</p>
    <p><strong>From:</strong> {tx.SenderRef} &rarr; <strong>To:</strong> {tx.ReceiverRef}</p>
    <p><strong>Resulting Balance:</strong> {tx.ClosingBalance:F2} {tx.Currency}</p>"

Dim pdf = renderer.RenderHtmlAsPdf(receiptHtml)

Dim hash As String = Convert.ToHexString(SHA256.HashData(pdf.BinaryData))

Await _db.StoreReceiptHashAsync(tx.Id, hash)

Await _blobStorage.UploadImmutableAsync($"receipts/{tx.Id}.pdf", pdf.BinaryData)
$vbLabelText   $csharpLabel

Örnek Oluşturulmuş PDF Belgesi

IronPDF örnek PDF çıktısı Yeni PDF belgesi daha sonra değişmez depolamaya kaydedilir. İster ilk PDF'iniz ister mevcut PDF'leri birleştiriyor olun, süreç değişmez. Bir kopyası müşteriye bir PDF görüntüleyicisinde sunulur. Bir Iron Software ürün demosu sırasında, yazılım ürünü demo ekibi genellikle birkaç satırlık kodla dinamik raporlar ve HTML'den PDF dönüşümüne ya da PDF oluşturma görevlerine nasıl çözümler getirebileceğini vurgular.

UI/UX'e yardımcı olmak için, panoda mavi daire içinde bir anahtar, gri daire içinde bir anahtar veya mavi daire içinde bir anahtar görebilirsiniz; bu, güvenli bir şekilde karmalanmış bir dosyayı simgeler. İndirme bağlantısını içeren sağ ok simgesi kullanıcıların gezinmesine yardımcı olur.

Damgalı bir başlık veya altbilgi, belgenin kaynağını her sayfada pekiştirir:

var shortHash = hash[..12];

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = $@"
        <div style='font-size:9px; color:#666; text-align:center;'>
            Generated: {tx.CompletedAt:u} &nbsp;|&nbsp;
            TX: {tx.Id} &nbsp;|&nbsp;
            SHA-256: {shortHash}...
        </div>"
};
var shortHash = hash[..12];

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = $@"
        <div style='font-size:9px; color:#666; text-align:center;'>
            Generated: {tx.CompletedAt:u} &nbsp;|&nbsp;
            TX: {tx.Id} &nbsp;|&nbsp;
            SHA-256: {shortHash}...
        </div>"
};
HTML

Örnek Altbilgi

Örnek altbilgi Makbuzun her sayfası, işlem kimliğini, oluşturma zaman damgasını ve kısaltılmış bir karmayı taşır; bu, bir bağlılık görevlisinin bütünlüğü kontrol etmesi için yeterlidir, veritabanına erişim gerektirmez.

Sınır Durumları

Geri dönüşler ve iade ödemeleri. Başarısız veya geri çevrilmiş bir işlem yine de bir belge gerektirir. Orijinal işlem kimliği ve makbuz karma referansını kullanarak iade etkinliği için ayrı bir PDF oluşturun. İade makbuzu, ne olduğuna dair bir kayıt olarak tek başına durur, orijinali değiştirmez veya modifikasyona tabi tutmaz.

Çok para birimli işlemler. HTML şablonu, para birimi sembolü yerleşimini, ondalık ayırıcıları ve döviz kuru açıklamalarını bölgeye göre doğru bir şekilde ele almalıdır. C# format dizeleri çoğunu ele alır: Almanca ondalık konvansiyonlar için {amount.ToString("F2", CultureInfo.GetCultureInfo("de-DE"))}, JPY gibi ondalık yer kullanmayan para birimleri için açık sembol yerleşimi. Döviz kuru ve zaman damgası, miktarlardan çıkarımlanmak yerine açıklanan satır öğesi olarak görünmelidir.

Regülasyon filigranları. Bazı yargı yetkileri, belirli belge türlerinde "BİR VERGİ FİŞİ DEĞİLDİR," "RESMİ OLMAYAN KOPYA" gibi metinler veya yargı yetkisine özgü açıklama dili gerektirir. Bunlar, şablondaki bir HTML yer paylaşımı olarak veya stil verilmiş bir başlık bandı olarak temiz bir şekilde ele alınır, temel işlem verilerini değiştirmeden.

Bunun Uyumun Ötesinde Önemi Neden Vardır?

Paydaş Ne Aldıkları
Uyum / Hukuk Değişmez, karmalı makbuzlar, dakikalar içinde denetim taleplerini karşılar, yeniden sorgulama yok, yeniden oluşturma yok, müşterinin gördüğünden farklı olan mevcut veritabanı kaydını açıklama yok
Müşteri Desteği Müşterinin işlem zamanı aldığı belirli belge, uyuşmazlık çözümünü yorumsuz olmaktan çıkararak olguya dayalı hale getirir
Müşteriler Her işlemden saniyeler sonra gelen kutularında profesyonel, markalı bir makbuz, şirketin dosyada tuttuğu aynı belge
Teknoloji Bakımı yapılacak tek bir HTML şablonu, dış hizmet bağımlılığı olmadan işlem içinde işlenmiş, izlenecek bir API kontratı yok, izlenecek belge başına faturalama yok
Finans / Muhasebe Uzun süreli saklama için belge saklama politikalarıyla uyumlu ve finansal kayıt tutma gereksinimlerini karşılayan, ayrı bir arşivleme iş akışı olmaksızın PDF/A arşiv çıkışı

İpuçlarıTek bir işleme seçeneğiyle PDF/A çıktısını etkinleştirin — renderer.RenderingOptions.PdfArchiveFormat = IronPdf.Rendering.PdfArchiveFormat.PDF_A_3B — uzun vadeli finansal kayıt saklama için kabul edilebilir ISO standardında arşiv belgeleri üretmek için.

Kapatış

"İşlem verilerini saklıyoruz" ve "denetim izlenebilir bir kaydımız var" arasındaki fark, göründüğünden daha küçüktür, bu işlem taahhüt akışına eklenen bir işlem adımıdır. Bu adım, geri tarihli olamayan bir zaman damgası, kurcalamayı algılayan bir karma ve bir müşteri açtığında veya bir denetçi istediğinde aynı görünen fiziksel bir eser ile belge üretir.

IronPDF, o adım üzerinde .NET ekiplerine tam kontrol sağlar, HTML makbuzunun işlenmesinden altbilginin damgalanmasına, çıktının karmalanmasına ve değişmez depolamaya aktarımına kadar her şey tek bir kütüphaneden ironpdf.com adresinden gelir. Bir işlem hattı kuruyor veya güçlendiriyorsanız, ücretsiz 30 günlük deneme sürümünüzü başlatın ve üretime geçmeden önce makbuz çıktısını uyum gereksinimlerinizle karşılaştırın.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara