pagopa-soap 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.rubocop.yml +137 -0
- data/.travis.yml +14 -0
- data/CODE_OF_CONDUCT.md +75 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +29 -0
- data/README.md +229 -0
- data/Rakefile +13 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/diagrams/diagrammi-psp.jpg +0 -0
- data/diagrams/diagrammi-revoca.jpg +0 -0
- data/diagrams/diagrammi-wisp.jpg +0 -0
- data/lib/pago_pa.rb +14 -0
- data/lib/pago_pa/soap.rb +17 -0
- data/lib/pago_pa/soap/configurable.rb +38 -0
- data/lib/pago_pa/soap/message/domain.rb +31 -0
- data/lib/pago_pa/soap/message/institution.rb +42 -0
- data/lib/pago_pa/soap/message/payer.rb +42 -0
- data/lib/pago_pa/soap/message/payment.rb +61 -0
- data/lib/pago_pa/soap/message/rpt.rb +86 -0
- data/lib/pago_pa/soap/message/rt.rb +43 -0
- data/lib/pago_pa/soap/message/single_payment.rb +18 -0
- data/lib/pago_pa/soap/version.rb +8 -0
- data/lib/pago_pa/soap/wsdl_loader.rb +66 -0
- data/lib/soap.rb +126 -0
- data/lib/soap/parser.rb +74 -0
- data/lib/soap/parser/binding.rb +53 -0
- data/lib/soap/parser/message.rb +27 -0
- data/lib/soap/parser/port_type.rb +42 -0
- data/lib/soap/parser/service.rb +25 -0
- data/lib/soap/parser/types.rb +97 -0
- data/lib/soap/string.rb +33 -0
- data/lib/soap/webservice.rb +4 -0
- data/lib/soap/webservice/client.rb +37 -0
- data/lib/soap/webservice/error.rb +17 -0
- data/lib/soap/webservice/fault_error.rb +12 -0
- data/lib/soap/webservice/request.rb +118 -0
- data/lib/soap/webservice/response.rb +88 -0
- data/pagopa-soap.gemspec +45 -0
- data/resources/PaPerNodo.wsdl +214 -0
- data/resources/PaPerNodoChiediElencoAvvisiDigitali.wsdl +93 -0
- data/resources/PaPerNodoPagamentoPsp.wsdl +241 -0
- data/resources/PaPerNodoRichiestaAvvisi.wsdl +202 -0
- data/resources/pagopa_avvisi.wsdl +98 -0
- data/resources/pagopa_base.wsdl +869 -0
- metadata +245 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -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
|
data/.travis.yml
ADDED
data/CODE_OF_CONDUCT.md
ADDED
@@ -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
data/LICENSE.txt
ADDED
@@ -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.
|
data/README.md
ADDED
@@ -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" />
|