Κατηγορίες

Αρχείο

Web service της Γ.Γ.Π.Σ με τα Βασικά Στοιχεία Φορολογουμένου για Νομικά Πρόσωπα (2)

Η δημοσίευση αυτή αποτελεί συνέχεια  του προηγούμενου post σχετικά με το web service  της Γ.Γ.Π.Σ  που επιτρέπει αναζήτηση στην βάση δεδομένων με τα βασικά στοιχεία των φορολογουμένων. Στα πλαίσια της πρόσκλησης για την κατάθεση παραδειγμάτων κλήσης του service ,  συμμετείχα με ένα παράδειγμα κώδικα σε περιβάλλον ASP. NET που στόχο έχει να δείξει τον τρόπο κλήσης της υπηρεσίας. Το σημερινό post έχει ως σκοπό να παρουσιάσει συνοπτικά τα βήματα για την υλοποίηση του client , μέσα από το περιβάλλον του visual studio 2010.

 

1. Προσθήκη Service Reference προς την υπηρεσία της Γ.Γ.Π.Σ.

Το πρώτο βήμα αφορά την δημιουργία της Proxy κλάσης , ουσιαστικά μιας τοπικής αναπαράστασης του web service .Η Proxy κλάση  χρησιμεύσει ως ενδιάμεσο στάδιο μεταξύ του client και την πραγματική υπηρεσία στο διακομιστή της Γ.Γ.Π.Σ . Ουσιαστικά επιτρέπει στον client να γνωρίζει : α) πού βρίσκεται το web service , β) Πώς γίνεται η κλήση των μεθόδων του , και γ) ποια η δομή των  SOAP μηνυμάτων.
Για την δημιουργία της ενδιάμεσης αυτής κλάσης proxy , υπάρχουν διαφορετικές μέθοδοι.  Δεδομένου ότι υπάρχει διαθέσιμο το wsdl αρχείο για την υπηρεσία που μας ενδιαφέρει , ο ευκολότερος τρόπος παραγωγής της proxy class στην συγκεκριμένη περίπτωση είναι μέσα από το περιβάλλον του visual studio. Έχοντας δημιουργήσει ένα νέο project ή webSite , με δεξί κλίκ πάνω στο Solution επιλέγουμε Add Service Reference , και στην οθόνη διαλόγου εισάγουμε την διεύθυνση του wsdl που περιγράφει την υπηρεσία (στην περίπτωση μας  https://www1.gsis.gr/wsgsis/RgWsBasStoixN/RgWsBasStoixNSoapHttpPort?wsdl ). Επιλέγουμε την υπηρεσία RhWsBasStoixN και δίνουμε ένα κατάλληλο namespace. Μετά την διαδικασία αυτή το Visual Studio κατεβάζει την περιγραφή των υπηρεσιών και δημιουργεί την proxy κλάση για τη διεπαφή μεταξύ της εφαρμογής και της υπηρεσίας.

 

Προσθήκη Service Reference

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Διαμόρφωση του web.config

Συνήθως με την προσθήκη του Service Reference , το visual studio προσθέτει αυτόματα τα αναγκαία στοιχεία στο αρχείο web.config (ή app.config αν πρόκειται για desktop εφαρμογή). Επειδή όμως αυτό δεν λειτουργεί πάντα , παραθέτω στη συνέχεια το web.config όπως χρησιμοποιείται στο συγκεκριμένο παράδειγμα. Στα bindings θα πρέπει να προσέξουμε ώστε το security mode να είναι σε Transport , ενώ στο EndPoint πρέπει να μπει η διεύθυνσή  https://www1.gsis.gr/wsgsis/RgWsBasStoixN/RgWsBasStoixNSoapHttpPort.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="RgWsBasStoixNSoapHttp" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536"
        maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="UserName" algorithmSuite="Default"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://www1.gsis.gr/wsgsis/RgWsBasStoixN/RgWsBasStoixNSoapHttpPort "
     binding="basicHttpBinding" bindingConfiguration="RgWsBasStoixNSoapHttp" contract="ggpsService.RgWsBasStoixN" name="RgWsBasStoixNSoapHttpPort"/>
    </client>
  </system.serviceModel>

 

 
3. Κώδικας κλήσης της Web Service Proxy class

Ο κώδικας που χρησιμοποιεί την proxy class που δημιουργήθηκε για να πραγματοποιήσει την κλήση της μεθόδου rgWsBasStoixN είναι αρκετά απλός και ουσιαστικά επιλέγουμε να τον κρατήσουμε σε ξεχωριστό αρχείο (ServiceInvoker.cs) μόνο για λόγους επαναχρησιμοποίησης. Σημειώνω ξανά ότι η συγκεκριμένη υλοποίηση σκοπό έχει να αναδείξει τον τρόπο κλήσης μιας τέτοιας υπηρεσίας  και συνεπώς απουσιάζουν στοιχεία όπως ο έλεγχος λαθών μέσω του αντικειμένου GenWsErrorRtUser.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using ggpsService;

/// Summary description for ServiceInvoker

public static class ServiceInvoker
{
/// Call the gsis web service and returns info about a legal entity
///string : a valid vat number for a legal entity /// RgWsBasStoixNRtUser : record with the entity info
public static RgWsBasStoixNRtUser InvokeggpsService(string afm)
{
decimal transid = 0;

RgWsBasStoixNClient client = new RgWsBasStoixNClient();
RgWsBasStoixNRtUser res = new RgWsBasStoixNRtUser();
GenWsErrorRtUser reserror = new GenWsErrorRtUser();

//Invoke service client
client.rgWsBasStoixN(afm, ref res, ref transid, ref reserror);

//TODO : check error status
if (reserror != null &amp;&amp; !string.IsNullOrEmpty(reserror.errorCode))
{
//handle error code

//reserror.errorCode
//reserror.errorDescr

}

return res;
}

} //end class

 

4. Κλήση της κλάσης ServiceInvoker μέσα από σελίδα ASPX

Το τελευταίο βήμα περιλαμβάνει την κλήση της μεθόδου InvokeggpsService  που δημιουργήσαμε στο προηγούμενο βήμα μέσα από μια σελίδα ASPX.  Το markup της σελίδας   και ο server-side κώδικας εμφανίζονται στη συνέχεια.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div>
    <p>Παρακαλώ δώστε ένα ΑΦΜ Νομικού προσώπου και πατήστε Αναζήτηση</p>
        <br />
        <asp:TextBox ID="txtAfm" runat="server" MaxLength="10"></asp:TextBox>
        <asp:Button ID="btnSearch" runat="server" Text="Αναζήτηση"
            onclick="btnSearch_Click" />
    </div>

     <div id="divresults" style="width:100% ; text-align:center">
     <br />
    <b>Επωνυμία :</b> <asp:Label ID="lblResultsOnomasia" runat="server" />
     <br />
    <b>Δραστητιότητα:</b> <asp:Label ID="lblResultsActLongDescr" runat="server" />

    </div>

 

1
2
3
4
5
6
7
8
9
10
<summary> /// Handle search button click
/// Get results from webservice and display certain properties
/// </summary>

protected void btnSearch_Click(object sender, EventArgs e)
{
RgWsBasStoixNRtUser result=ServiceInvoker.InvokeggpsService(txtAfm.Text.Trim());
lblResultsOnomasia.Text = result.onomasia;
lblResultsActLongDescr.Text = result.actLongDescr;
}

 

Ολοκληρώνοντας αυτή τη σύντομη τεκμηρίωση του παραδείγματος  κλήσης  να θυμίσω ότι ο  κώδικας  , διαθέσιμος με άδεια Apache 2.0 ,  βρίσκεται εδώ : http://code.google.com/p/wsnp-gsis-gr/.  Τα παραδείγματα βρίσκονται επίσης διαθέσιμα για δοκιμές στην διεύθυνσή http://projects.thodoris.net/wsnp/

13 comments to Web service της Γ.Γ.Π.Σ με τα Βασικά Στοιχεία Φορολογουμένου για Νομικά Πρόσωπα (2)

  • Καλησπέρα σας μπορώ παρακαλώ να έχω μία ενημέρωση εάν υπάρσχει η δυνατότητα ώστε το παραπάνω web service μπορεί να ενσωματωθεί σε vb6 project, υπάρχει μήπως κάποιο παράδειγμα

    Σας ευχαριστώ εκ των προτέρων

  • Δεν έχω δοκιμάσει ποτέ να συνδεθώ με WS χρησιμοποιώντας VB6 , αλλά δεν βλέπω κάποιο λόγο για να μην μπορεί να γίνει. Θα πρότεινα να ρίξεις μια ματιά στο pocketSOAP (http://www.pocketsoap.com/pocketsoap/). Υπάρχει και ένα παράδειγμα σε VB6 εδώ : http://www.pocketsoap.com/samples/psquotevb.zip. Φαντάζομαι ότι οι μόνες αλλαγές που χρειάζονται είναι αυτές στο URI και στις κλήσεις των μεθόδων.

  • Κόγκας Κωνσταντίνος

    Η εφαρμογή για τα βασικά στοιχεία φορολογουμένου για μη φυσικά πρόσωπα δεν τρέχει στα δίκτυο ΣΥΖΕΥΞΙΣ του δημοσίου. Μετά την πληκτρολόγηση του ΑΦΜ σταματά στο 10%.

    Τι χρειάζεται να κάνουμε σε συτή την περίπτωση;

  • γεοργε

    Θα μπορούσες να ανεβάσεις ένα ολοκληρωμένο visual studio project με τον κώδικα, γιατί παρόλο που τα έχει γράψει αρκετα αναλυτικά, όσοι δεν είμαστε γνώστες από visual studio, δεν καταλαβουμε και πολλα;

    Ευχαριστώ

  • Ζητάει κωδικούς πρόσβασής για την συγκεκριμένη ιστοσελίδα.

    Ευχαριστώ

  • sorry λάθος Link , το διόρθωσα

  • GEORGE

    Υπάρχει περίπτωση να μου φτείαξεις με χρέωση κάτι αντίστοιχο και σε windows form;

    Εάν μπορείς επικοινώνισε μαζί μου στα email μου.

    Ευχαριστώ

  • Nikos

    Καλησπέρα,
    υπάρχει περίπτωση να μας δώσεις και κώδικα για delphi?

  • John

    Υπάρχει περίπτωση να μου εξηγήσεις αν μπορείς σχετικά με το άλλο web service της φορολογικής ενημερώτητας? Τι αλλάζει εκεί μιας και έχουμε security mode? Αν έχεις και κάποιο sample θα ήταν επιθυμητό

  • Vagelis

    Γεια σας παιδιά,
    προσπάθησα να κάνω το ίδιο παράδειγμα και μου πετάει μηνυμα λάθους “The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8)…”

    και σταματάει εδώ: client.rgWsBasStoixN(afm, ref res, ref transid, ref reserror);

    Μπορει κάποιος να με βοηθήσει;

  • Hara

    Καλημέρα. Θέλω να χρηστιμοποιήσω το web service από javascript και χρησιμοποιώ το αντικείμενο XMLHttpRequest χτίζοντας το soap envelope σε ένα string. Παίρνω λάθος: NS_error_failure.
    To namespace που πρέπει να βάλω ποιό είναι; και στις παραμέτρους πρέπει να έχω μόνο το ΑΦΜ ή και τα pBasStoixNRec_out, pCallSeqId_out, pErrorRec_out; Το έχω δουλέψει σε php μια χαρά. Ευχαριστώ εκ των προτέρων!

  • Alexandros Androulakis

    Kωδικας vb.net .net 1.1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim xmlhttp

    xmlhttp = CreateObject(“MSXML2.XMLHTTP.3.0″)

    xmlhttp.Open(“POST”, “https://www1.gsis.gr/wsgsis/RgWsBasStoixN/RgWsBasStoixNSoapHttpPort”, False)
    xmlhttp.setRequestHeader(“Content-Type”, “text/xml; charset=utf-8″)

    xmlhttp.send(” ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” 998473647 ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” 0 ” & vbCrLf & _
    ” 2011-01-01 ” & vbCrLf & ” 2011-01-01 ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” 1 ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” 0 ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” ” & vbCrLf & _
    ” ” & vbCrLf & ” “)

    Try

    Dim XMLDoc As New XmlDocument

    XMLDoc.LoadXml(xmlhttp.responsexml.xml)

    Console.WriteLine(“ΑΦΜ ” + XMLDoc.GetElementsByTagName(“ns1:afm”).Item(0).InnerText)

    Console.WriteLine(“ΟΝΟΜΑΣΙΑ ” + XMLDoc.GetElementsByTagName(“ns1:onomasia”).Item(0).InnerText)

    Catch ex As Exception
    MessageBox.Show(ex.ToString)
    End Try

    End Sub

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>