E-fatura?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

E-fatura?

Mesaj gönderen mussimsek »

Merhaba,

E-fatura ile ilgili Delphi tarafında çalışma yapan oldu mu? UBL-TR formatında dosya oluşturma, mali mühürle imzalama gibi???

Teşekkürler.
Kullanıcı avatarı
doctorfunks
Üye
Mesajlar: 105
Kayıt: 26 Oca 2005 10:37
Konum: İstanbul

Re: E-fatura?

Mesaj gönderen doctorfunks »

Merhaba,
Biz çalışmalar yapıyoruz,E-Fatura için birkaç yöntem var biliyorsunuz. Biz şuanda özel entegratör aracılığı ile onların istemiş olduğu xml dosyaları hazırlayarak gönderime başlayacağız. Siz UBL-TR sistemini kendiniz mi oluşturmayı düşünüyorsunuz Mustafa hocam ?
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: E-fatura?

Mesaj gönderen Battosai »

viewtopic.php?f=2&t=31560&hilit=+fatura Burda aynı mevzu geçti kimse devamını getirmedi :) Bu mevzuda daha çok konu açılır. Basit bir Restful yapısı ile çözülecek mesele tecrübeli geliştiricileri bile zorlayacak bir yapıda kurgulanmasını anlamış değilim. Bilmediğimiz birşey vardır elbet.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: E-fatura?

Mesaj gönderen mussimsek »

Merhaba,

Evet UBL-TR yapısı biraz özelleştirilmiş XML'e benziyor. Bu dosyanın formatını temin ettim, biz kendimiz oluşturmayı planlıyoruz. Sonrasında mali mühür ve entegratöre gönderme sıkıntıları var. Bakalım uğraşıyoruz.

Çalışma yapan varsa, tecrübelerini paylaşırsa memnun olurum...

Kolay gelsin.
Kullanıcı avatarı
doctorfunks
Üye
Mesajlar: 105
Kayıt: 26 Oca 2005 10:37
Konum: İstanbul

Re: E-fatura?

Mesaj gönderen doctorfunks »

Eğer özel entegratör ile anlaşma yapıyorsanız mali mühür işleminide onlara devredin. Siz direkt xml yada en uygun hangisi olursa istedikleri formata uygun verileri gönderin bence.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: E-fatura?

Mesaj gönderen mussimsek »

Bu konu yeni olduğu için şu ana kadar öğrendiklerimi paylaşayım.

* UBL TR dosyası UBL formatının özelleştirilmiş hali, kısaca bir XML dosyası diyebiliriz. Faturanızı şu adresteki

http://efatura.gov.tr/efaturamevzuat.html

Kılavuzlar kısmındaki "Ek-4 UBL-TR Kılavuzları_V-1.2" isimli dosyadan çıkan kılavuzlara göre oluşturabilirsiniz. Dosya formatı ile alakalı her türlü bilgi var. Diğer kılavuzları da incelemenizde fayda var.

* Mali mühür denilen şey bir sertifika. Bu sertifika ile dosyanızı mühürlemeniz (imzalamanız) lazım. Bu dosyayı sizin gönderdiğinizi anlamak için. Bunun için en güzeli @doctorfunks'ın dediği gibi anlaştığınız entegratörün programını kullanmak. Bu programlar mühürlemeyi, entegratöre göndermeyi ve gelen faturaları almayı yapıyor. Detayları entegratör ile konuşursunuz. Ben kendim mali mühür yapmam lazım diyorsanız :

- https://yazilim.kamusm.gov.tr/?q=tr/node/14/surum : burda bir activeX çözümü var. Üye olup indirebilirsiniz, sanırım ücretli. Üyelik 1-2 güne açılıyor.
- http://www.chilkatsoft.com/ : Burda da delphi için bir activeX ve dll çözümü var.
- https://www.eldos.com/sbb/ : burda da secure black box isimli bir component seti var.

Bunlardan hiçbirisini denemedim.

Kolay gelsin.
erceskar
Üye
Mesajlar: 7
Kayıt: 02 Eki 2012 01:25

Re: E-fatura?

Mesaj gönderen erceskar »

Selamlar,

Öncelikle 1. yöntem olan Portal'dan kullanmak isteyenler için XML(zip) oluşturma kısmını yaptım. Bunun için dediğiniz gibi UBL-TR formatına göre xml hazırlandıktan sonra USB aygıtındaki kart vasıtasıyla şifrelemek(mühürlemek) gerekiyor. Ben verdiğiniz linklerdeki gibi araşlar yerine .NET de bulunan örneği dll e çevirip Delphi içinden kullandım. Örnek kamusm sitesinde var. Delphi'den COM visible kullanma de yine anlatılıyor diye hatırlıyorum. regasm ile register etmeyi unutmayın yeter. Elbetteki e-fatura.gov tr sitesindeki klavuzları satır satır okuyup xml leri buna göre hazırlamak gerekiyor, sonrasında şifreleme ve şifre kontrolü ayrı bir bela ama eğer 3 yöntemi de desteklemek istiyorsanız (GIB sitesine direk bağlantı) şifreleme işlemini eninde sonunda yapmanız gerekiyor. Yok ben işin kolayına kaçayım derseniz hiç bunlarla uğraşmayın, direk özel entegratörle anlaşın. Aslında müşterinin gerçekten büyük bir firma değilse ve ben arşivimi kendi server'ımda tutmak istiyorum diye ayak diretmiyorsa onun için de en doğrusu özel entegratör olacaktır. Çünkü bu işin arşivleme loglama 7/24 online olma vs zorunlulukları çok sert. Adeta herkes özel entegratörle çalışsın diye yapmışlar.
Gelelim özel entegratör çözümüne; entegratörler farklı şekillerde çalışıyorlar. Kimi kendi tanımladığı Fatura nesnesinin propertylerini doldurmanızı istiyor, kimi direk sizin hazırladığınız xml i alıyor. Her halükarda imzalamayı onlar yapıyor ki bunun da pek çok avantajı var. Bu aşamada nesne doldurmanın da faydaları bulunmakla beraber xml oluşturup xsd şema kontrolünü siz yaparsanız entegratöre göndermeden hataları kullanıcının karşısına çıkarabilirsiniz.

Özetle tavsiyem entegratörlerdir. Diğer 2 yöntemden birine mecbur değilseniz şifreleme ile vakit kaybetmeyin. Hatta bu tarihten sorna yetiştirmek istiyorsanız xml ile bile vakit kaybetmetin. Direk entegratörün nesnesini doldurun gönderin.

Önemli Not: Delphi'nin eski versiyonunu kullananlar entegratörün servisine bağlanamayacaklar (Ör: Delphi 7) Yeni tip nesneler hep sorun çıkarıyor. Bununla da zaman kaybetmeyin. Delphi'nin yeni versiyonunu alıp gönderme/kontrol etme vs fonksiyonlarını onda yazıp dll vb bir çözümle ana progamınız üzerinden kullanın. Ben bunlarla çok vakit kaybettim, siz etmeyin.
Mercag
Üye
Mesajlar: 1
Kayıt: 05 Oca 2016 10:29

Re: E-fatura?

Mesaj gönderen Mercag »

Merhaba;
e fatura,xml ve ile ilgili araştırma yaparken UBL TR formatında araştırma yaparken forumunuza rastladım. Biz entegratörle anlaştık. Anlaştığımız entegratör bize sözleşme aşamasında onlara herhangi bir xml formatı sağladığımızda faturalarımız toplu olarak sisteme yükleyebileceğimizi söylemişlerdi. Ancak distribütörlüğünü yaptığımız firma başka bir entegratör ile çalıştığından bu geliştirme işini onlara bıraktılar. Özetle bu firmanın bize sağladığı xml formatı birtek kendi portalında çalışıyor. Bizim anlaştığımız entegratör firmada çalışmıyor. Anlaştığımız firma daha dönüş yapmadı ancak bizim kendi çabalarımızla bu xml i GİB formatına sanırım UBL TR formatına dönüştürüp kendi entegratörümüzün portalına yüklememiz mümkün müdür?
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: E-fatura?

Mesaj gönderen thelvaci »

Tüm Delphi'cilerin (daha doğru bir ifade ile C# kullanmayanların) sıkıntılarını bertaraf edecek bir çözüm yakında sunulacak arkadaşlar. Bir firma ile yaptığımız görüşmelerin neticesinde artık C# ile uğraşmak zorunda kalmayacaksınız. Json formatında basitçe faturalarınızı gönderip alabileceksiniz. Neticeyi yakın bir zamanda paylaşacağım sizler ile.
3ddark
Üye
Mesajlar: 89
Kayıt: 14 Eyl 2010 10:55
Konum: İstanbul

Re: E-fatura?

Mesaj gönderen 3ddark »

Ben logo entegratör üzerine E-Fatura ile ilgilendim ve şu anda sorunsuz olarak çalışıyoruz. UBL-TR dedikleri dosya XML dosyadan farksız.
İmza ile hiç ilgilenecek vaktim olmadı fakat burada
https://yazilim.kamusm.gov.tr/?q=tr/node/14/surum
delphi ile ilgili örnek dokümanlar da eklenmiş. Daha önce girdiğimde bu sayfada delphi için böyle ayrıntılı örnek yoktu.
PostgreSQL - Delphi - Linux :!:
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: E-fatura?

Mesaj gönderen mkysoft »

UBL oluşturmak için basit bir örnek: http://delphiturkiye.com/forum/viewtopi ... 19&t=35265
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: E-fatura?

Mesaj gönderen mkysoft »

Bu alanda çalıştığım için bildiklerimi paylaşmak isterim.
Öncelikle bir çok yerde xml'in şifrelenmesinden bahsedilmiş, aslında yapılan şifreleme değil imzalamadır, sadece xml'in değişmediğini garanti altına alır.
Eğer GİB ile direk entegrasyon yapacaksanız sizi uğraştıracak konular:
  • İmzalama (xades, adı geçen kütüphaneler xades'in tüm özelliklerini desteklemiyor, Esya dışında)
    Doğrulama (Esya dışında doğrulama yapmak çok zor)
    Zip algoritmaları (standartlara uymayan çok firma var, gelen zarfları açmakta zorlanacaksınız)
    Sınırsız alanlar (sayısal alanlar dışında her yer sınırsız metin, bunları saklamak, saklamaya çalışmak sıkıntı)
    USB Token
    7/24 canlı sistem
Yinede bu yolda ilerlemek isterseniz imzalama, doğrulama ve zip kısımları için java kütüphanalerinden yararlanın.

USB tokenların performansı çok kötü, bir imza atmanız 13~17 saniye sürebilir okuyucunun modeline göre. USB aygıtları olduğu için çok fazla sorun çıkarmaktadır, tak-çıkar ihtiyacı duyar zaman zaman.

7/24 canlı kalmak çok zor, haber vermeksiniz 48 saatten falz süre erişilemezseniz GİB sisteminizi kapatır, açmak için testleri yeniden yapmanızı isteyebilir.

Özel entegratör ile çalışmak:
Özel entegratörün xml formatını kullanmak sizin esnekliğinizi kısıtlar, özel entegratöre bağımlı kalırsınız, desteklemediği UBL-TR alanlarını kullanamazsınız. Tavsiyem UBL-TR oluşturmaya çalışın.
Faturaları özel entegratörün imzalaması performan açısından kolaylık sağlar, çoğu firmada UPS/yedek sıkıntı olduğundan datalarını saklarlar (opsiyenel olabiliyor, kontrol etmek lazım). Veri çok kritik denetçi istediğinde sunulmak zorunda, elektrik kesilmiş, disk bozulmuş, v.s. bahaneleri işe yaramaz. Fatura üzerindeki vergileri indirim konusu yapmanıza izin vermezler.
Bazı özel entegratörler sorumlulukları olmadığından tüm datayı saklamazlar, ayrılırken alamazsınız yada denetçiye sunamayabilirsiniz. İletişim için kullanılan tüm datanın (fatura zarfı, ticari cevap zarfı, sistem yanıtı) saklandığından emin olun.
İşin ucunda devlet olduğu için hiç beklemediğiniz sorunlar yaşayacaksınız, bunları GİB'e iletmek sıkıntı, ancak özel entegratörlerin ulaşması daha kolay.

Ben ISIS Bilişim Teknolojilerinde çalışıyorum, Delphi XE8 ile SOAP üzerinden çalışan test uygulaması mevcut, Delphi 7 ile de HTTP POST/GET üzerinden ilerleyebiliyoruz. Örnek uygualama UBL-TR oluşturma örnekleri de içermektedir. Bunun dışında SFTP, JSON, excel, csv gibi bir çok teknik ile bağlanmanız mümkün. Ancak hepsi ile yapabilecekleriniz aynı değil, projeye göre seçmekte yarar olabiliyor.
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: E-fatura?

Mesaj gönderen cengaver »

Arkadaşlar, ben e-fatura XML dosyasını üretebiliyorum. bunun için bir nesne yazdım. kamusm'nin .NET DLL'leriyle imza da atırabiliyorum. GİB'in E-Belge görüntüleyicisinde evrakı da görüntüleyebiliyorum fakat o programda "Doğrula" butonuna bastığımda "Matematiksel doğrulama HATALI, imza doğrulama durumu: GEÇERLİ, referans[0] doğrulama durumu: GEÇERLİ, referans[1] doğrulama durumu: GEÇERSİZ" diyor...

Yani yüzdük yüzdük kuyruğuna geldik kafamda saç kalmadı, Bu matematiksel doğrulama ile ilgili bi öneriniz var mı, bunu nasıl aşabiliriz?
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: E-fatura?

Mesaj gönderen mkysoft »

@cengaver sorun imza attıktan sonra doyada değişiklik yapıyorsunuz anlamında. matematiksel doğrulama xml'in hash'inin tutmadığı anlamına gelir. İmza sonrasında dosyayı kaydederken kullandığınız yöntem dosyayı bozuyor. Encoding problemi olabilir, yanlış hash alogirtması kullanımı olabilir, xml hizalama yapıyor olabilirsiniz, new line işaretleriniz (esya \n kullanıyor, delphi \r\n olarak değiştiriyor olabilir) değişiyor olabilir. Çok emek isteyen bir iş, arkadaşlara tavsiyem esya'nın java kütüphanelerini kullanmaları. Son dönemde GİB'in yayınlamış olduğu imzala aracını da kullanabilirsiniz, web socket kullandığı için arka planda çalıştırıp çağırabilirsiniz. Delphi için UBL-TR oluşturan örnek uygulamalarımız için: https://github.com/isisedonusum
XE8 örneği baya kapsamlı oldu, destek veren olursa seviniriz.
Admin arkadaşlar mesaja link eklemek kurallara uygun değil biliyorum ancak verdiğim link sadece örnek içeriyor.
En son mkysoft tarafından 14 Ağu 2018 02:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
cengaver
Üye
Mesajlar: 111
Kayıt: 01 Nis 2014 05:02
Konum: İstanbul

Re: E-fatura?

Mesaj gönderen cengaver »

Merhaba mkysoft, iyi niyetin için teşekkürler, XE8 ile ilgili örneği inceledim. Ben zaten XE8 ile ilgili projedekiin çoğunu yapıyorum, yukarıdaki iletimde de bahsettiğim gibi, ben zaten ubl-tr 2.1 standardında e-fatura xml dosyası üretebiliyorum. Bu noktada bir sorunum yok. Bunun için sıfırdan bir nesne yazdım.

Benim sorunum .NET api'leri ile imza attığımda matematiksel doğrulama hatası alıyor olmamdan kaynaklanıyor. iletinde bahsetti,ğin konuları inceledim, evet, orjinal xml dosyasını değiştirdiğini fark ettim. Hatta <cbc:UUID> tagındaki GUID verisini de değiştiriyor, bu kısmı anlamak mümkün değil. imza atan C# kodu aşağıda paylaşıyorum, umarım bir çözüm yolu bulabiliriz;

imzayı "createEnvelopedBes" yordamı atıyor, alıcı gözüyle bir inceleyebilir misiniz?

Kod: Tümünü seç

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using NUnit.Framework;
using log4net;
using iaik.pkcs.pkcs11.wrapper;
using tr.gov.tubitak.uekae.esya.api.smartcard.gui;
using tr.gov.tubitak.uekae.esya.api.common.util.bag;
using System.Xml;
using tr.gov.tubitak.uekae.esya.api.common;
using tr.gov.tubitak.uekae.esya.api.xmlsignature;
using tr.gov.tubitak.uekae.esya.api.asn.x509;
using tr.gov.tubitak.uekae.esya.api.cmssignature.example.util;
using tr.gov.tubitak.uekae.esya.api.common.crypto;
using tr.gov.tubitak.uekae.esya.api.smartcard.pkcs11;
using tr.gov.tubitak.uekae.esya.api.common.util;
using tr.gov.tubitak.uekae.esya.api.xmlsignature.config;
using tr.gov.tubitak.uekae.esya.api.xmlsignature.transforms;

using TransformType = tr.gov.tubitak.uekae.esya.api.xmlsignature.TransformType;
using Transform = tr.gov.tubitak.uekae.esya.api.xmlsignature.model.Transform;
using Transforms = tr.gov.tubitak.uekae.esya.api.xmlsignature.model.Transforms;
using tr.gov.tubitak.uekae.esya.api.xmlsignature.document;

namespace ma3api_xmlsignature_test
{
	[ComVisible(true)]
	public interface arayuz
    {
		void Set_SMART_CARD_PIN(String aSMART_CARD_PIN);
		void createEnvelopedBes(String aLisansYol, String aConfigXmlYol, String aPinNo, bool aNitelik, string aSignatureID, String aXML, string aSignedXmlFilePath);
	}
    public class DelphiComx: arayuz
    {
        protected IBaseSmartCard				bsc;
        protected BaseSigner					mSigner;
        public static string					DETACHED_SIGNATURE_FILENAME = "sig_bes_detached.xsig";
        public const System.String				FILENAME_BES_ENVELOPED_SIGNATURE = "sig_bes_enveloped.xsig";
        public const System.String				FILENAME_BES_ENVELOPED_TRANSFORM_SIGNATURE = "sig_bes_envelopedTransform.xsig";
        public const System.String				FILENAME_BES_ENVELOPING_SIGNATURE = "sig_bes_enveloping.xsig";
        public static string					FILENAME_PARALLEL_DETACHED = "sig_parallel_detached.xsig";
        public static string					FILENAME_PARALLEL_ENVELOPED = "sig_parallel_enveloped.xsig";
        public static string					FILENAME_COUNTER_EXISTING = "sig_detached_counter.xsig";
        public static string					FILENAME_PARALLEL_COUNTER_EXISTING = "sig_parallel_counter.xsig";
        public static string					SIGNATURE_FILENAME_P1 = "profile_p1_bes.xsig";
        public static string					SIGNATURE_FILENAME_P2 = "profile_p2_t.xsig";
        public static string					SIGNATURE_FILENAME_P3 = "profile_p3_xl_crl.xsig";
        public static string					SIGNATURE_FILENAME_P4 = "profile_p4_xl_ocsp.xsig";
        public static string					SIGNATURE_FILENAME_A = "profile_p4_a.xsig";
        public static string					SIGNATURE_FILENAME_AA = "profile_p4_aa.xsig";
        internal static readonly bool			WORK_ONLY_WITH_QUALIFIED_CERTS = false;
        public static String					SMART_CARD_PIN = ""; /* createEnvelopedBes veya Set_SMART_CARD_PIN prosedüründen değerini alacak... */
		public static readonly String			TEST_PROJECT_FOLDER = Application.StartupPath; /* EXE'nin çalıştığı klasör kastediliyor... */
        public static int askOption(Control aParent, Icon aIcon, String[] aSecenekList, String aBaslik, String[] aOptions)
        {
            SlotList      sl     = new SlotList(null, aIcon, aSecenekList, aBaslik);
            DialogResult  result = sl.ShowDialog();
            if (result != DialogResult.OK)
                return -1;
            return sl.getSelectedIndex();
        }
        private ECertificate selectCertificate(bool checkIsQualified, bool checkBeingNonQualified, List<byte[]> aCerts)
        {
            if (aCerts != null && aCerts.Count == 0) throw new ESYAException("Kartta sertifika yok");
            if (checkIsQualified && checkBeingNonQualified) throw new ESYAException("Bir sertifika ya niteliklidir ya da niteliksizdir. Aynı anda hem nitelikli hem de niteliksiz sertifika olmaz");
            List<ECertificate> certs = new List<ECertificate>();
            foreach (byte[] bs in aCerts)
            {
                ECertificate cert = new ECertificate(bs);
                if (checkIsQualified)         { if (cert.isQualifiedCertificate()) certs.Add(cert);  } else
                if (checkBeingNonQualified)   { if (!cert.isQualifiedCertificate()) certs.Add(cert); } else
                { certs.Add(cert); }
            }
            ECertificate selectedCert = null;
            if (certs.Count == 0)
            {
                if (checkIsQualified)       throw new ESYAException("Kartta nitelikli sertifika yok");  else
                if (checkBeingNonQualified) throw new ESYAException("Kartta niteliksiz sertifika yok");
            } else
            if (certs.Count == 1)
            {
                selectedCert = certs[0];
            } else
            {
                String[] optionList = new String[certs.Count];
                for (int i = 0; i < certs.Count; i++) { optionList[i] = certs[i].getSubject().getCommonNameAttribute(); }
                int result = askOption(null, null, optionList, "Sertifika Listesi", new[] { "Tamam" });
                if (result < 0) selectedCert = null; else selectedCert = certs[result];
            }
            return selectedCert;
        }
		private XmlDocument newEnvelope2(String aXML)
		{
			try
			{
				XmlDocument xmlDocument = new XmlDocument();
				xmlDocument.LoadXml(aXML);
				return xmlDocument;
			}
			catch (System.Exception x)
			{
				SupportClass.WriteStackTrace(x, Console.Error);
			}
			throw new ESYAException("XML verisinde hata var. İmza üretilemedi.");
		}
		public static void EnvelopedSignatureInitialize(string lisansFilePath)
		{
			LicenseUtil.setLicenseXml(new FileStream(lisansFilePath, FileMode.Open));
		}
	public void Set_SMART_CARD_PIN(String aSMART_CARD_PIN)
	{
		SMART_CARD_PIN = aSMART_CARD_PIN;
	}
	[b]public void createEnvelopedBes(String aLisansFile, String aConfigXmlYol, String aPinNo, bool aNitelik, string aSignatureID, String aXML, string aSignedXmlFilePath)
		{
			EnvelopedSignatureInitialize(aLisansFile);
			Set_SMART_CARD_PIN(aPinNo);
			String aConfigXmlFile = aConfigXmlYol + @"xmlsignature-config.xml";

			// here is our custom envelope xml
			XmlDocument envelopeDoc = newEnvelope2(aXML);

			// create context with working dir
			Context context	= new Context(aConfigXmlYol);
			context.Config	= new Config(aConfigXmlFile);
			
			// define where signature belongs to
			context.Document = envelopeDoc;

			// create signature according to context,
			// with default type (XADES_BES)
			XMLSignature signature = new XMLSignature(context, false);
			signature.SigningTime = DateTime.Now;

			// attach signature to envelope
			envelopeDoc.DocumentElement.GetElementsByTagName("ext:ExtensionContent").Item(0).AppendChild(signature.Element); // NORMALDE BU SATIRI KULLANIYORDUK AMA BİZE ARADA BİR YERDE KULLANMAK GEREKİYOR...

			// add document as reference,
			Transforms transforms = new Transforms(context);
			transforms.addTransform(new Transform(context, TransformType.ENVELOPED.Url));

			// add whole document(="") with envelope transform, with SHA256
			// and don't include it into signature(false)
			signature.addDocument("", "text/xml", transforms, DigestMethod.SHA_256, false);

			String[] terminals = SmartOp.getCardTerminals();
			String terminal;
			if (terminals == null || terminals.Length == 0) throw new SmartCardException("Kart takılı bir e-imza/e-mühür kartı yok");

			int index = 0;
			if (terminals.Length == 1) terminal = terminals[index];
			else
			{
				index = askOption(null, null, terminals, "Okuyucu Listesi", new String[] { "Tamam" });
				terminal = terminals[index];
			}
			Pair<long, CardType> slotAndCardType = SmartOp.getSlotAndCardType(terminal);
			bsc = new P11SmartCard(slotAndCardType.getmObj2());
			bsc.openSession(slotAndCardType.getmObj1());
			List<byte[]> allCerts = bsc.getSignatureCertificates();
			ECertificate signingCert = selectCertificate(aNitelik, false, allCerts);
			
			signature.addKeyInfo(signingCert);
			bsc.login(aPinNo);
			mSigner = bsc.getSigner(signingCert, Algorithms.SIGNATURE_RSA_SHA256);

			signature.sign(mSigner);
			envelopeDoc.Save(aSignedXmlFilePath);
			// MessageBox.Show("XML imzası atıldı, dosya (3): " + aSignedXmlFilePath);
		}
	}[/b]
}
Cevapla