24-02-24, 03:48 PM
الاخ المحترم هذا الكود كاملا
وقد استخدمت الكود الموضوع من حضرتك وهو ساعدنى حيث حل جذء كبير من المشكلة حيث المشكلة السابق قبل استخدام الكود كانت تتمثل فى لابد من اقفال البرنامج بشكل كامل بعد ارسال كل فاتورة على حدة ولكن بعد استخدام التعديل الزى قمت مشكورا برفعه اصبحت ارفع الفاتورة ثم اختار فاتورة اخرى دون اقفال البرنامج ياتى بنفس الرسالة ثم يكمل ويرسل الفاتورة
فاريد حل تلك الجزئية وهذا هو الكود
Private Async Sub Send()
Try
Dim factories As Pkcs11InteropFactories = New Pkcs11InteropFactories()
Using pkcs11Library As IPkcs11Library = factories.Pkcs11LibraryFactory.LoadPkcs11Library(factories, Config_class.DllLibPath, AppType.MultiThreaded)
Dim slot As ISlot = pkcs11Library.GetSlotList(SlotsType.WithTokenPresent).FirstOrDefault()
If (slot Is Nothing) Then
MessageBox.Show("No slots found - DllLibPath Erro")
Return
Exit Sub
End If
'##################
'##################
Dim tokenInfo As ITokenInfo = slot.GetTokenInfo()
Dim slotInfo As ISlotInfo = slot.GetSlotInfo()
Using session = slot.OpenSession(SessionType.ReadWrite)
Try
session.Login(CKU.CKU_USER, Encoding.UTF8.GetBytes(Config_class.token_pin))
Catch ex As Exception
MessageBox.Show("pin_token is not correct")
Return
Finally
session.Logout()
End Try
'##################
'##################
Dim certificateSearchAttributes = New List(Of IObjectAttribute)() From {
session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CLASS, CKO.CKO_CERTIFICATE),
session.Factories.ObjectAttributeFactory.Create(CKA.CKA_TOKEN, True),
session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CERTIFICATE_TYPE, CKC.CKC_X_509)
}
Dim certificate As IObjectHandle = session.FindAllObjects(certificateSearchAttributes).FirstOrDefault()
If certificate Is Nothing Then
MessageBox.Show("Certificate not found")
Return
Exit Sub
End If
'##################
'##################
Dim store As X509Store = New X509Store(StoreName.My, StoreLocation.CurrentUser)
store.Open(OpenFlags.MaxAllowed)
Dim foundCerts = store.Certificates.Find(X509FindType.FindByIssuerName, Config_class.token_type, False)
If foundCerts.Count = 0 Then
MessageBox.Show("no device detected - token_type Erro")
Return
Exit Sub
End If
'##################
'##################
Dim certForSigning = foundCerts(0)
store.Close()
End Using
End Using
'##################
'##################
Dim fileEntries() As String = Directory.GetFiles(path_send)
For Each fileName As String In fileEntries
Dim readText As String = File.ReadAllText(fileName)
Await Sendinvoice(readText)
Next fileName
MessageBox.Show("done")
Return
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
وقد استخدمت الكود الموضوع من حضرتك وهو ساعدنى حيث حل جذء كبير من المشكلة حيث المشكلة السابق قبل استخدام الكود كانت تتمثل فى لابد من اقفال البرنامج بشكل كامل بعد ارسال كل فاتورة على حدة ولكن بعد استخدام التعديل الزى قمت مشكورا برفعه اصبحت ارفع الفاتورة ثم اختار فاتورة اخرى دون اقفال البرنامج ياتى بنفس الرسالة ثم يكمل ويرسل الفاتورة
فاريد حل تلك الجزئية وهذا هو الكود
Private Async Sub Send()
Try
Dim factories As Pkcs11InteropFactories = New Pkcs11InteropFactories()
Using pkcs11Library As IPkcs11Library = factories.Pkcs11LibraryFactory.LoadPkcs11Library(factories, Config_class.DllLibPath, AppType.MultiThreaded)
Dim slot As ISlot = pkcs11Library.GetSlotList(SlotsType.WithTokenPresent).FirstOrDefault()
If (slot Is Nothing) Then
MessageBox.Show("No slots found - DllLibPath Erro")
Return
Exit Sub
End If
'##################
'##################
Dim tokenInfo As ITokenInfo = slot.GetTokenInfo()
Dim slotInfo As ISlotInfo = slot.GetSlotInfo()
Using session = slot.OpenSession(SessionType.ReadWrite)
Try
session.Login(CKU.CKU_USER, Encoding.UTF8.GetBytes(Config_class.token_pin))
Catch ex As Exception
MessageBox.Show("pin_token is not correct")
Return
Finally
session.Logout()
End Try
'##################
'##################
Dim certificateSearchAttributes = New List(Of IObjectAttribute)() From {
session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CLASS, CKO.CKO_CERTIFICATE),
session.Factories.ObjectAttributeFactory.Create(CKA.CKA_TOKEN, True),
session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CERTIFICATE_TYPE, CKC.CKC_X_509)
}
Dim certificate As IObjectHandle = session.FindAllObjects(certificateSearchAttributes).FirstOrDefault()
If certificate Is Nothing Then
MessageBox.Show("Certificate not found")
Return
Exit Sub
End If
'##################
'##################
Dim store As X509Store = New X509Store(StoreName.My, StoreLocation.CurrentUser)
store.Open(OpenFlags.MaxAllowed)
Dim foundCerts = store.Certificates.Find(X509FindType.FindByIssuerName, Config_class.token_type, False)
If foundCerts.Count = 0 Then
MessageBox.Show("no device detected - token_type Erro")
Return
Exit Sub
End If
'##################
'##################
Dim certForSigning = foundCerts(0)
store.Close()
End Using
End Using
'##################
'##################
Dim fileEntries() As String = Directory.GetFiles(path_send)
For Each fileName As String In fileEntries
Dim readText As String = File.ReadAllText(fileName)
Await Sendinvoice(readText)
Next fileName
MessageBox.Show("done")
Return
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub

