تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة فى رفع الفاتورة
#1
شباب 
السلام عليكم
عندى مشكلة فى هذا الكود حيث استخدمه فى رفع فاتورة مبيعات ولكن عندما اقوم برفع الفاتورة يتم رفعها بصورة صحيحه ولكن عند الانتقال الى فاتورة اخرى يعطى رسالة الخطاء الموجودة بالكود ولا يقوم برفعها الا بعد اقفال البرنامج بالكامل وفتحه مره اخرى بعهدها يرفع فاتورة واحدة فقط ثم يعطى رسالة خطا وهكذا عشان ارفع فاتورة لازم اقفل البرنامج بشكل تام ثم افتحه مره اخرى ... وهذا هو الكود

 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
يرجى التفضل بايجاد حل
الرد }}}
تم الشكر بواسطة:
#2
جرب هذا الكود

PHP كود :
Dim tokenInfo As ITokenInfo slot.GetTokenInfo()
Dim slotInfo As ISlotInfo slot.GetSlotInfo()

Using session slot.OpenSession(SessionType.ReadWrite)
 
   Try
        session
.Login(CKU.CKU_USEREncoding.UTF8.GetBytes(Config_class.token_pin))

 
       ' قم بعمل عمليات رفع الفاتورة هنا

    Catch ex As Exception
        MessageBox.Show("pin_token is not correct")
        Return
    Finally
        ' 
قم بإغلاق الجلسة بشكل صحيح بغض النظر عن نجاح أو فشل العمليات
        session
.Logout()
 
   End Try
End Using 
الرد }}}
تم الشكر بواسطة:
#3
الاخ المحترم هذا الكود كاملا
وقد استخدمت الكود الموضوع من حضرتك وهو ساعدنى حيث حل جذء كبير من المشكلة حيث المشكلة السابق قبل استخدام الكود كانت تتمثل فى لابد من اقفال البرنامج بشكل كامل بعد ارسال كل فاتورة على حدة ولكن بعد استخدام التعديل الزى قمت مشكورا برفعه اصبحت ارفع الفاتورة ثم اختار فاتورة اخرى دون اقفال البرنامج ياتى بنفس الرسالة ثم يكمل ويرسل الفاتورة
فاريد حل تلك الجزئية وهذا هو الكود
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
الرد }}}
تم الشكر بواسطة:
#4
طيب جرب هذا الكود

PHP كود :
Private Async Sub Send()
 
   Try
        Dim factories 
As Pkcs11InteropFactories = New Pkcs11InteropFactories()
 
       Using pkcs11Library As IPkcs11Library factories.Pkcs11LibraryFactory.LoadPkcs11Library(factoriesConfig_class.DllLibPathAppType.MultiThreaded)
 
           Dim slot As ISlot pkcs11Library.GetSlotList(SlotsType.WithTokenPresent).FirstOrDefault()
 
           If (slot Is NothingThen
                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_USEREncoding.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_CLASSCKO.CKO_CERTIFICATE),
 
               session.Factories.ObjectAttributeFactory.Create(CKA.CKA_TOKENTrue),
 
               session.Factories.ObjectAttributeFactory.Create(CKA.CKA_CERTIFICATE_TYPECKC.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.MyStoreLocation.CurrentUser)
 
           store.Open(OpenFlags.MaxAllowed)
 
           Dim foundCerts store.Certificates.Find(X509FindType.FindByIssuerNameConfig_class.token_typeFalse)
 
           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 
الرد }}}
تم الشكر بواسطة:
#5
الف شكر على الاهتمام جارى التجربة
الرد }}}
تم الشكر بواسطة:
#6
للاسف الكود لا يعمل الاخ Kamil
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم