pagopa-soap 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rubocop.yml +137 -0
  4. data/.travis.yml +14 -0
  5. data/CODE_OF_CONDUCT.md +75 -0
  6. data/Gemfile +9 -0
  7. data/LICENSE.txt +29 -0
  8. data/README.md +229 -0
  9. data/Rakefile +13 -0
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/diagrams/diagrammi-psp.jpg +0 -0
  13. data/diagrams/diagrammi-revoca.jpg +0 -0
  14. data/diagrams/diagrammi-wisp.jpg +0 -0
  15. data/lib/pago_pa.rb +14 -0
  16. data/lib/pago_pa/soap.rb +17 -0
  17. data/lib/pago_pa/soap/configurable.rb +38 -0
  18. data/lib/pago_pa/soap/message/domain.rb +31 -0
  19. data/lib/pago_pa/soap/message/institution.rb +42 -0
  20. data/lib/pago_pa/soap/message/payer.rb +42 -0
  21. data/lib/pago_pa/soap/message/payment.rb +61 -0
  22. data/lib/pago_pa/soap/message/rpt.rb +86 -0
  23. data/lib/pago_pa/soap/message/rt.rb +43 -0
  24. data/lib/pago_pa/soap/message/single_payment.rb +18 -0
  25. data/lib/pago_pa/soap/version.rb +8 -0
  26. data/lib/pago_pa/soap/wsdl_loader.rb +66 -0
  27. data/lib/soap.rb +126 -0
  28. data/lib/soap/parser.rb +74 -0
  29. data/lib/soap/parser/binding.rb +53 -0
  30. data/lib/soap/parser/message.rb +27 -0
  31. data/lib/soap/parser/port_type.rb +42 -0
  32. data/lib/soap/parser/service.rb +25 -0
  33. data/lib/soap/parser/types.rb +97 -0
  34. data/lib/soap/string.rb +33 -0
  35. data/lib/soap/webservice.rb +4 -0
  36. data/lib/soap/webservice/client.rb +37 -0
  37. data/lib/soap/webservice/error.rb +17 -0
  38. data/lib/soap/webservice/fault_error.rb +12 -0
  39. data/lib/soap/webservice/request.rb +118 -0
  40. data/lib/soap/webservice/response.rb +88 -0
  41. data/pagopa-soap.gemspec +45 -0
  42. data/resources/PaPerNodo.wsdl +214 -0
  43. data/resources/PaPerNodoChiediElencoAvvisiDigitali.wsdl +93 -0
  44. data/resources/PaPerNodoPagamentoPsp.wsdl +241 -0
  45. data/resources/PaPerNodoRichiestaAvvisi.wsdl +202 -0
  46. data/resources/pagopa_avvisi.wsdl +98 -0
  47. data/resources/pagopa_base.wsdl +869 -0
  48. metadata +245 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 685a0aa55b0125bebaa5f77408aec0994fbcbdc4
4
+ data.tar.gz: 328b1918ba2de9139ed4fd56544e39ea21226f17
5
+ SHA512:
6
+ metadata.gz: c812b2890762500e6d6ac38b59424d7b5f4ba27a311cc467305d8741e863f4745392c71a59dd8c696724ce6297dfe26a3ce1817f9977377f3d3b68ef4cb0f2d9
7
+ data.tar.gz: c171be643fdf2caeddf0a0991c87a3a513290fa4f0ff03858bbb7c11842ac7bf53b4a95039ea9be6055f97eb831f7db0f1d7fed70802f68f13bf9e1470b33add
@@ -0,0 +1,8 @@
1
+ /.bundle/
2
+ /coverage/
3
+ /doc/
4
+ /Gemfile.lock
5
+ /pkg/
6
+ /.rspec_status
7
+ /spec/reports/
8
+ /tmp/
@@ -0,0 +1,137 @@
1
+ require: rubocop-rspec
2
+
3
+ AllCops:
4
+ Exclude:
5
+ - bin/stubs/*
6
+ - bin/console
7
+ TargetRubyVersion: 2.3
8
+
9
+ Layout/DotPosition:
10
+ EnforcedStyle: trailing
11
+
12
+ Layout/MultilineOperationIndentation:
13
+ Description: >-
14
+ Checks indentation of binary operations that span more than
15
+ one line.
16
+ Enabled: true
17
+ EnforcedStyle: indented
18
+
19
+ Lint/DeprecatedClassMethods:
20
+ Description: 'Check for deprecated class method calls.'
21
+ Enabled: false
22
+
23
+ Metrics/AbcSize:
24
+ Description: >-
25
+ A calculated magnitude based on number of assignments,
26
+ branches, and conditions.
27
+ Enabled: false
28
+
29
+ Metrics/BlockLength:
30
+ Exclude:
31
+ - spec/**/*.rb
32
+ - pagopa-soap.gemspec
33
+
34
+ Metrics/LineLength:
35
+ Exclude:
36
+ - pagopa_soap.gemspec
37
+
38
+ Metrics/MethodLength:
39
+ Description: 'Avoid methods longer than 10 lines of code.'
40
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#short-methods'
41
+ Enabled: false
42
+
43
+ RSpec/NestedGroups:
44
+ Enabled: false
45
+
46
+ Style/ClassAndModuleChildren:
47
+ Description: 'Checks style of children classes and modules.'
48
+ Enabled: true
49
+ EnforcedStyle: compact
50
+
51
+ Style/Documentation:
52
+ Description: 'Document classes and non-namespace modules.'
53
+ Enabled: false
54
+
55
+ Style/EachWithObject:
56
+ Description: 'Prefer `each_with_object` over `inject` or `reduce`.'
57
+ Enabled: false
58
+
59
+ Style/EmptyMethod:
60
+ EnforcedStyle: expanded
61
+
62
+ Style/GuardClause:
63
+ Description: 'Check for conditionals that can be replaced with guard clauses'
64
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals'
65
+ Enabled: false
66
+
67
+ Style/IfUnlessModifier:
68
+ Description: >-
69
+ Favor modifier if/unless usage when you have a
70
+ single-line body.
71
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier'
72
+ Enabled: false
73
+
74
+ Style/Lambda:
75
+ Description: 'Use the new lambda literal syntax for single-line blocks.'
76
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#lambda-multi-line'
77
+ Enabled: false
78
+
79
+ Style/LambdaCall:
80
+ Description: 'Use lambda.call(...) instead of lambda.(...).'
81
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#proc-call'
82
+ Enabled: false
83
+
84
+ Style/NegatedIf:
85
+ Description: >-
86
+ Favor unless over if for negative conditions
87
+ (or control flow or).
88
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#unless-for-negatives'
89
+ Enabled: false
90
+
91
+ Style/NegatedWhile:
92
+ Description: 'Favor until over while for negative conditions.'
93
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#until-for-negatives'
94
+ Enabled: false
95
+
96
+ Style/Next:
97
+ Description: 'Use `next` to skip iteration instead of a condition at the end.'
98
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals'
99
+ Enabled: false
100
+
101
+ Style/NilComparison:
102
+ Description: 'Prefer x.nil? to x == nil.'
103
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#predicate-methods'
104
+ Enabled: false
105
+
106
+ Style/Not:
107
+ Description: 'Use ! instead of not.'
108
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#bang-not-not'
109
+ Enabled: false
110
+
111
+ Style/SingleLineMethods:
112
+ Description: 'Avoid single-line methods.'
113
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-single-line-methods'
114
+ Enabled: false
115
+
116
+ Style/StringLiterals:
117
+ EnforcedStyle: double_quotes
118
+
119
+ Style/TrailingCommaInArrayLiteral:
120
+ Description: 'Checks for trailing comma in array literals.'
121
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
122
+ EnforcedStyleForMultiline: no_comma
123
+ SupportedStylesForMultiline:
124
+ - comma
125
+ - consistent_comma
126
+ - no_comma
127
+ Enabled: true
128
+
129
+ Style/TrailingCommaInHashLiteral:
130
+ Description: 'Checks for trailing comma in hash literals.'
131
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
132
+ EnforcedStyleForMultiline: no_comma
133
+ SupportedStylesForMultiline:
134
+ - comma
135
+ - consistent_comma
136
+ - no_comma
137
+ Enabled: true
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.3
5
+ - 2.4
6
+ - 2.5
7
+
8
+ script:
9
+ - bundle exec rake
10
+
11
+ before_install: gem install bundler -v 1.16.2
12
+
13
+ install:
14
+ - bundle install
@@ -0,0 +1,75 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at giacomello.damiano@gmail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
75
+
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ # Specify your gem's dependencies in pagopa-soap.gemspec
8
+
9
+ gemspec
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2018, Developers Italia
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ * Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ * Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,229 @@
1
+ # PagoPA SOAP
2
+
3
+ Ruby Wrapper for pagoPA SOAP API based on Savon
4
+
5
+ | Project | PagoPa Soap Ruby |
6
+ | ---------------------- | ------------ |
7
+ | Gem name | pagopa-soap |
8
+ | License | [BSD 3](https://github.com/italia/pagopa-soap-ruby/blob/master/LICENSE) |
9
+ | Continuous integration | [![Build Status](https://secure.travis-ci.org/italia/pagopa-soap-ruby.svg?branch=master)](https://travis-ci.org/italia/pagopa-soap-ruby) |
10
+ | Test coverate | [![Coverage Status](https://coveralls.io/repos/github/italia/pagopa-soap-ruby/badge.svg?branch=master)](https://coveralls.io/github/italia/pagopa-soap-ruby?branch=master) |
11
+ | Credits | [Contributors](https://github.com/italia/pagopa-soap-ruby/graphs/contributors) |
12
+
13
+ ## Installation
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'pagopa-soap'
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install pagopa-soap
28
+
29
+ ## Usage
30
+
31
+ TODO: Write usage instructions here
32
+ Initialize the wrapper and generate dynamic class:
33
+
34
+ ```ruby
35
+ PagoPA::SOAP.build
36
+ ```
37
+
38
+ After this, the system generate new class in according with WSDL definitions
39
+ with namespace PagoPA
40
+
41
+ ```ruby
42
+ PagoPA::NodoChiediStatoRpt
43
+ PagoPA::NodoChiediListaPendentiRpt
44
+ PagoPA::NodoInviaRpt
45
+ PagoPA::NodoInviaCarrelloRpt
46
+ PagoPA::NodoChiediCopiaRt
47
+ PagoPA::NodoChiediInformativaPsp
48
+ PagoPA::NodoPaChiediInformativaPa
49
+ PagoPA::NodoChiediElencoQuadraturePa
50
+ PagoPA::NodoChiediQuadraturaPa
51
+ PagoPA::NodoChiediElencoFlussiRendicontazione
52
+ PagoPA::NodoChiediFlussoRendicontazione
53
+ PagoPA::NodoInviaRichiestaStorno
54
+ PagoPA::NodoInviaRispostaRevoca
55
+ PagoPA::NodoChiediSceltaWisp
56
+ PagoPA::NodoInviaAvvisoDigitale
57
+ ```
58
+
59
+ For pagoPA you can specify WSDL, endpoint and namespace in a configuration block
60
+
61
+ ```ruby
62
+ # config/initializers/pagopa_soap.rb
63
+ # This is your pagoPA Wrapper setting.
64
+ PagoPA::SOAP::Configurable.configure do |config|
65
+ config.namespace = "PagoPA"
66
+ config.wsdl_base = "WSDL with webservice specification"
67
+ config.wsdl_notify = "WSDL with webservice for PUSH notification"
68
+ config.endpoint_base = "https://host-nodo-spc/webservices/"
69
+ config.endpoint_notify = "https://host-nodo-spc-push/webservices/"
70
+ end
71
+ ```
72
+
73
+ ## Features
74
+ |:---|:---|
75
+ |**List:**||
76
+ |parsing of WSDL|✓|
77
+ |generate SOAP class base|✓|
78
+ |convert Base64 body message to HASH||
79
+ |create nodoSPC testenv||
80
+ |create nodoPSP testenv||
81
+ |generate IUV code||
82
+
83
+
84
+ ## License
85
+
86
+ The gem is available as open source under the terms of the [BSD 3-Clause License](https://opensource.org/licenses/BSD-3-Clause).
87
+
88
+ # Specifiche integrazione RUBY per pagoPA
89
+
90
+ <img src="https://dm2ue6l6q7ly2.cloudfront.net/wp-content/uploads/2018/03/20092024/pagopa1.png"/>
91
+
92
+ 1. [Premessa](#premessa)
93
+ 2. [Analisi Attuativa](#analisi-attuativa)
94
+ 3. [Esempi di connessione](#esempi-di-connessione)
95
+ 4. [Requisiti del sistema EC](#requisiti-del-sistem-ec)
96
+ 5. [Implementazioni Future](#implementazioni-future)
97
+ 6. [Ipotesi di integrazione](#ipotesi-di-integrazione)
98
+ 6.1. [Wrapper API Ruby](#wrapper-api-ruby)
99
+ 6.2. [Engine Rack](#engine-rack)
100
+ 7. [Appendice](#appendice)
101
+
102
+ ## Premessa
103
+ Secondo le linee guida emesse dall’**Agenzia per l’Italia Digitale** il **NODO dei pagamenti SPC** (pagoPA) vuole essere il sistema centralizzato di controllo e interoperabilità tra la Pubblica Amministrazione ed i Cittadini.
104
+
105
+ Il sistema comunica tramite **Web Service SOAP** con un Header di autenticazione e si aspetta un canale TLS con certificati x.509 v3 e che l’EC (Ente Creditore) che effettua le chiamate sia inserito in una white list di IP verificati.
106
+
107
+ Attraverso l’interfaccia **WISP** (Wizard interattivo di scelta dei PSP - Prestatori di Pagamento) viene demandato al sistema pagoPA l’attuazione delle linee guida in merito ai sistemi di pagamento e alla visualizzazione dei costi aggiuntivi degli stessi, richiedendo l’autenticazione tramite SPID al cittadino e quindi unificando l’UX del processo di pagamento.
108
+
109
+ <img src="https://raw.githubusercontent.com/cantierecreativo/pagoparb/master/diagrams/diagrammi-wisp.jpg" />
110
+ *a. Diagramma pagamento con WISP*
111
+
112
+ Il Nodo SPC inoltre lavora anche come server di chiamata in quanto anche i metodi normali (bollettino postale, bonifico, etc…) sono controllati e gestiti tramite il suo supporto, di conseguenza l’EC che intende collegarsi al sistema deve predisporre un ambiente anche di ricezione di Request SOAP.
113
+
114
+ <img src="https://raw.githubusercontent.com/cantierecreativo/pagoparb/master/diagrams/diagrammi-psp.jpg" />
115
+ *a. Diagramma pagamento da PSP*
116
+
117
+
118
+ ## Analisi attuativa
119
+
120
+ Attualmente un EC ha un sistema proprietario di gestione dati e rendicontazione di conseguenza si possono immaginare due scenari di integrazione:
121
+ - Integrazione tramite Canale di scambio delle informazioni e dei dati che poi dovranno essere gestiti direttamente nel gestionale del singolo EC
122
+ - Integrazione tramite Repository dati e quindi tramite sync da EC e successivamente gestore delle comunicazioni tra Cittadino e Pagamento
123
+
124
+ Il portale EC deve inoltre fornire al cittadino delle alternative al pagamento digitale tramite QRCode o bollettino postale di nuova generazione come da linee guida contenute nel documento [Avviso Analogico](https://www.agid.gov.it/sites/default/files/repository_files/guidatecnica_avvisoanalogico_v2.1_con_alleg.pdf)
125
+
126
+ In ultima analisi, visto che si vorrebbe lasciare la massima libertà di scelta del metodo di integrazione più ottimale direttamente agli EC si sono scorporati al massimo tutte le componenti richieste per collegarsi a pagoPA cosi da consentirne l’ utilizzo anche in maniera separata.
127
+
128
+
129
+ ## Esempi di connessione
130
+
131
+ Viene fornito uno [Startup Kit](https://www.agid.gov.it/it/piattaforme/pagopa/linee-guida-documentazione-tecnica) con cui è possibile visualizzare attraverso il software SOAP UI tutte le chiamate possibili effettuabili da un EC o dal Nodo SPC ed eventualmente scaricando i espositori presenti su GitHub si possono avere i WSDL ed XSD delle relative request sia in ingresso che in uscita.
132
+
133
+ I WebService attualmente disponibili sono:
134
+ - **nodoInviaCarrelloRPT**
135
+ - **nodoInviaAvvisoDigitali**
136
+ - **nodoChiediElencoFlussiRendicontazione**
137
+ - **nodoChiediFlussoRendicontazione**
138
+ - **nodoChiediListaPendentiRPT**
139
+ - **nodoChiediStatoRPT**
140
+ - **nodoInviaRichiestaStorno**
141
+ - **nodoChiediInformativaPSP**
142
+ - **nodoChiediElencoQuadraturePA**
143
+ - **nodoChiediQuadraturaPA**
144
+ - **paaVerificaRPT**
145
+ - **paaAllegaRPT**
146
+ - **paaChiudiNumeroAvviso**
147
+ - **paaChiediAvvisiDigitali**
148
+ - **paaInviaEsitoStorno**
149
+
150
+ Come supporto sono stati realizzati degli schemi di integrazione che illustrano i funzionamenti principali del sistema che sono visibili nella rispettiva appendice.
151
+
152
+
153
+ ## Requisiti del sistema EC
154
+
155
+ Per poter iniziare ad utilizzare il sistema pagoPA occorre accreditarsi presso lo stesso e condividere un certificato di autenticazione che dovrà poi essere presente negli Header di ogni request in maniera da permettere al portale di verificare l’attendibilità della fonte.
156
+
157
+ Visti i futuri sviluppi introdotti dall’Agenzia per l’Italia Digitale che vogliono introdurre una sessione permanente tramite il protocollo di autenticazione SPID (SAML 2.0) ogni EC dovrá permettere ai propri utenti (Cittadini) di poter accedere al sistema tramite l’Identità Unica cosi da velocizzare il processo di pagamento implementato tramite WISP.
158
+
159
+ Tutti i log delle richieste e relative risposte, anche gli errori, dovranno essere archiviati e mantenuti.
160
+
161
+
162
+ ## Implementazioni future
163
+
164
+ Dalle linee guida [File Transfer](http://pagopa-docs-specws.readthedocs.io/it/latest/interazione_EC_Nodo.html#interfacce-per-il-servizio-di-file-transfer-sicuro) si legge come in futuro il sistema di comunicazione tramite WebService SOAP sarà ridotto in merito al nuovo standard di comunicazione dati tramite SFTP cosi che le comunicazioni XML (risposte ai Web Service) siano depositate direttamente in un aree dedicata dell’EC che lo ha richiesto.
165
+
166
+ In preparazione di questa nuova metodologia di comunicazione il WRAPPER API dovrebbe permettere l’archiviazione della risposta anche in maniera non diretta e prevedere la posizione ed il nome del file da utilizzare per poter estrapolare tutte le informazioni necessarie all’EC.
167
+
168
+
169
+ ## Ipotesi di Integrazione
170
+
171
+ ### Wrapper API Ruby
172
+
173
+ Si tratta di una gemma che dovrebbe semplificare la gestione delle chiamate e relative risposte tra EC e sistema pagoPA.
174
+
175
+ Il wrapper dovrebbe gestire tutti i possibili messaggi di errore delle chiamate.
176
+ Il sistema dovrebbe automatizzare tutto il processo tramite WISP consentendo una configurazione rapida e di minimo impatto al sistema esistente.
177
+
178
+ Si rimanda al documento [Specifiche Attuative](https://pagopa-docs-specws.readthedocs.io/it/latest/index.html) in cui sono illustrati tutti i webservice dispomnibili e il loro funzionamento.
179
+
180
+ Per quanto riguarda i messaggi di errore si rimanda invece al documento [Errori webservice](http://pagopa-specifichepagamenti.readthedocs.io/it/latest/_docs/Capitolo10.html)
181
+ Per i codici di versamento [Codici versamento, riversamento e rendicontazione](http://pagopa-codici.readthedocs.io/it/latest/)
182
+
183
+ In sintesi cosa dovrebbe contenere la gemma:
184
+ - Generatore Header autenticato per inizializzare la request
185
+ - Validatore delle request e response SOAP
186
+ - Implementare tutte le request verso pagoPA
187
+ - Implementare la possibilità di creare degli endpoint per le request da pagoPA
188
+ - Generatore di IUV (Identificativo Univoco Versamento)
189
+ - Generatore di QRCode o Barcode
190
+
191
+ Per la generazione dello IUV devono essere ovviamente inseriti dei parametri di configurazione a livello di sistema in quanto, come da specifiche, deve essere univoco a livello di sistema e deve seguire delle specifiche chiare ().
192
+
193
+ ##### Come dovrebbe funzionare:
194
+ Il sistema dovrebbe contenere il WSDL base attraverso il quale poter effettuare tutte le chiamate e avere le specifiche di riferimento per ognuna di esse.
195
+
196
+ Deve essere presente un file di configurazione e di seguito un esempio dei parametri necessari:
197
+ - BASE_URI_PAGOPA
198
+ - DOMINIO_ID_EC
199
+ - CODICE_EC
200
+ - ENDPOINTS
201
+
202
+ Il sistema dovrebbe inoltre prevedere la possibilità tramite activerecord, di archiviare in DB le response sia delle varie richieste che di quelle generate automaticamente da pagoPA, cosi da avere un log e consentire anche in un secondo momento di poter prendere i dati ed utilizzarli.
203
+
204
+ Si pensava inoltre di poter prevedere che il modello sia configurabile in maniera tale da permettere di utilizzare una struttura e codice più adeguati al sistema a cui si aggiunge l’ integrazione.
205
+
206
+ ##### N.B.
207
+ Le chiamate verso i WebService devono prevedere uno User-Agent all'interno degli Header di chiamata altrimenti tornano come status code 302.
208
+
209
+ ### Engine Rack
210
+
211
+ Si tratta di un sistema completo che dovrebbe operare in supporto al sistema attuale integrato tramite WISP permettendo ad un EC di implementare la procedura completa integrandosi direttamente con i vari PSP supportati.
212
+
213
+ In questo caso il sistema conterrebbe la gemma precedente ed in più avrebbe la gestione centralizzata di tutto il traffico in uscita ed entrata dal relativo EC.
214
+
215
+ Come da linee guida dovrebbe inoltre contenere delle viste (di cui sarà possibile fare un override) che permettono la stampa a video di tutti i PSP con il relativo costo aggiuntivo e la gestione dei metodi di pagamento con i relativi redirect di completamento della procedura di pagamento.
216
+
217
+ In questo modo non servirebbe andare a creare tutto il sistema di controller nell’app principale ma la nuova gemma avrebbe tutte le configurazioni al suo interno comprensive di **ENDPOINT** di chiamata da pagoPA e gestione delle tabelle necessarie al suo corretto funzionamento.
218
+
219
+ Le tabelle necessarie dovrebbero essere:
220
+ - **responses** -> memorizza tutte le chiamate in ingresso
221
+ - **requests** -> memorizza tutte le chiamate in uscita
222
+
223
+ Inoltre dovrebbe essere possibile indicare al sistema i nomi delle tabelle o dei modelli che gestiscono le pendenze di pagamento e i dati utente cosi da permettere al sistema di prelevare le informazioni necessarie ad effettuare le transazioni.
224
+
225
+
226
+ #### Appendice:
227
+
228
+ Grafici di revoca dei pagamenti come da linee guida di AgID
229
+ <img src="https://raw.githubusercontent.com/cantierecreativo/pagoparb/master/diagrams/diagrammi-revoca.jpg" />