25-02-24, 01:46 AM
طيب جرب هذا الكود
PHP كود :
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()
Dim session As ISession = 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() ' لا تقوم بعمل 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()
'##################
'##################
' حلقة For Each لإرسال الفواتير
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
' بعد انتهاء الحلقة، قم بإغلاق الجلسة
session.Logout()
End Using
MessageBox.Show("done")
Return
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
