شباب
السلام عليكم
عندى مشكلة فى هذا الكود حيث استخدمه فى رفع فاتورة مبيعات ولكن عندما اقوم برفع الفاتورة يتم رفعها بصورة صحيحه ولكن عند الانتقال الى فاتورة اخرى يعطى رسالة الخطاء الموجودة بالكود ولا يقوم برفعها الا بعد اقفال البرنامج بالكامل وفتحه مره اخرى بعهدها يرفع فاتورة واحدة فقط ثم يعطى رسالة خطا وهكذا عشان ارفع فاتورة لازم اقفل البرنامج بشكل تام ثم افتحه مره اخرى ... وهذا هو الكود
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
Exit Sub
End Try
يرجى التفضل بايجاد حل
الاخ المحترم هذا الكود كاملا
وقد استخدمت الكود الموضوع من حضرتك وهو ساعدنى حيث حل جذء كبير من المشكلة حيث المشكلة السابق قبل استخدام الكود كانت تتمثل فى لابد من اقفال البرنامج بشكل كامل بعد ارسال كل فاتورة على حدة ولكن بعد استخدام التعديل الزى قمت مشكورا برفعه اصبحت ارفع الفاتورة ثم اختار فاتورة اخرى دون اقفال البرنامج ياتى بنفس الرسالة ثم يكمل ويرسل الفاتورة
فاريد حل تلك الجزئية وهذا هو الكود
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
الف شكر على الاهتمام جارى التجربة
للاسف الكود لا يعمل الاخ Kamil