pagopa-soap 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Soap; end
4
+
5
+ module Soap::String
6
+ def self.snakecase(str)
7
+ str = str.dup
8
+ str.gsub!(/::/, "/")
9
+ str.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
10
+ str.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
11
+ str.tr!(".", "_")
12
+ str.tr!("-", "_")
13
+ str.downcase!
14
+ str
15
+ end
16
+
17
+ def self.camelcase(str)
18
+ str.split("_").collect(&:capitalize).join
19
+ end
20
+
21
+ def self.wsdl_camelcase(str)
22
+ str_split = str.split("_")
23
+ return str_split.first if str_split.count == 1
24
+ first_split = str_split.delete_at(0)
25
+ last_split = str_split.delete_at(str_split.count - 1)
26
+ if last_split.length <= 3
27
+ last_split.upcase!
28
+ else
29
+ last_split.capitalize!
30
+ end
31
+ "#{first_split}#{str_split.collect(&:capitalize).join}#{last_split}"
32
+ end
33
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Soap; end
4
+ module Soap::Webservice; end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "savon"
4
+
5
+ module Soap; end
6
+ module Soap::Webservice; end
7
+
8
+ class Soap::Webservice::Client
9
+ class << self
10
+ def endpoint
11
+ "#{namespace}#{action}"
12
+ end
13
+ end
14
+
15
+ def client
16
+ @client ||=
17
+ Savon.client(
18
+ endpoint: self.class.endpoint,
19
+ namespace: self.class.namespace,
20
+ convert_request_keys_to: :none,
21
+ pretty_print_xml: true,
22
+ follow_redirects: true,
23
+ headers: {
24
+ "User-Agent" =>
25
+ "Ruby Wrapper for pagoPA (#{PagoPA::SOAP::VERSION})",
26
+ "Cache-Control" => "no-cache",
27
+ "Accept-Encoding" => "gzip, deflate"
28
+ }
29
+ )
30
+ end
31
+
32
+ def send(request)
33
+ response.new(
34
+ client.call(Soap.to_snakecase(self.class.action), request.to_message)
35
+ )
36
+ end
37
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Soap; end
4
+ module Soap::Webservice; end
5
+
6
+ class Soap::Webservice::Error < StandardError
7
+ attr_reader :response
8
+
9
+ def initialize(response)
10
+ @reseponse = response
11
+ end
12
+ end
13
+
14
+ class Soap::Webservice::GenericError < StandardError
15
+ def initialize
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Soap; end
4
+ module Soap::Webservice; end
5
+
6
+ class Soap::Webservice::FaultError
7
+ attr_reader :response
8
+
9
+ def initialize(response)
10
+ @response = response
11
+ end
12
+ end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Soap; end
4
+ module Soap::Webservice; end
5
+
6
+ class Soap::Webservice::Request
7
+ class << self
8
+ def header_attributes; {} end
9
+
10
+ def body_attributes; {} end
11
+ end
12
+
13
+ attr_reader :attributes
14
+
15
+ def initialize(attributes = {})
16
+ @attributes = attributes
17
+ validate_header_attrs!
18
+ validate_body_attrs!
19
+ end
20
+
21
+ def validate_header_attrs!
22
+ return if required_header.empty?
23
+ if !required_header.empty? && attributes.empty?
24
+ raise "Required attributes are missing: #{required_header}"
25
+ end
26
+
27
+ if !(required_header - attributes.keys).empty?
28
+ raise "Attribute #{required_header - attributes.keys} must be present"
29
+ end
30
+ end
31
+
32
+ def validate_body_attrs!
33
+ return if required_body.empty?
34
+ if !required_body.empty? && attributes.empty?
35
+ raise "Required attributes are missing: #{required_body}"
36
+ end
37
+
38
+ if !(required_body - attributes.keys).empty?
39
+ raise "Attribute #{required_body - attributes.keys} must be present"
40
+ end
41
+ end
42
+
43
+ def body_params
44
+ return {} if self.class.body_attributes.nil?
45
+ self.class.body_attributes.each.with_object({}) do |attr, attrs|
46
+ name = Soap.to_snakecase(attr[:name]).to_sym
47
+ value = attributes[name]
48
+ attrs[name] = value if value
49
+ end
50
+ end
51
+
52
+ def header_params
53
+ return {} if self.class.header_attributes.nil?
54
+ self.class.header_attributes.each.with_object({}) do |attr, attrs|
55
+ name = Soap.to_snakecase(attr[:name]).to_sym
56
+ value = attributes[name]
57
+ attrs[name] = value if value
58
+ end
59
+ end
60
+
61
+ def to_message
62
+ {
63
+ soap_header: header_params,
64
+ message: body_params
65
+ }
66
+ end
67
+
68
+ def to_xml
69
+ Gyoku.xml(
70
+ to_message,
71
+ key_converter: lambda { |key| Soap.to_camelcase(key) }
72
+ )
73
+ end
74
+
75
+ private
76
+
77
+ def list_header_attrs
78
+ return {} if self.class.header_attributes.nil?
79
+ self.class.header_attributes.each.with_object(
80
+ required: [],
81
+ optional: []
82
+ ) do |attr, attrs|
83
+ name = Soap.to_snakecase(attr[:name]).to_sym
84
+ if attr[:attributes].empty?
85
+ attrs[:required] << name
86
+ else
87
+ attrs[:optional] << name
88
+ end
89
+ end
90
+ end
91
+
92
+ def list_body_attrs
93
+ return {} if self.class.body_attributes.nil?
94
+ self.class.body_attributes.each.with_object(
95
+ required: [],
96
+ optional: []
97
+ ) do |attr, attrs|
98
+ name = Soap.to_snakecase(attr[:name]).to_sym
99
+ if attr[:attributes].empty?
100
+ attrs[:required] << name
101
+ else
102
+ attrs[:optional] << name
103
+ end
104
+ end
105
+ end
106
+
107
+ def required_header
108
+ list_header_attrs[:required] || []
109
+ end
110
+
111
+ def required_body
112
+ list_body_attrs[:required] || []
113
+ end
114
+
115
+ def required_attrs
116
+ required_header + required_body
117
+ end
118
+ end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Soap; end
4
+ module Soap::Webservice; end
5
+
6
+ class Soap::Webservice::Response
7
+ class << self
8
+ def header_attributes; {} end
9
+
10
+ def body_attributes; {} end
11
+ end
12
+
13
+ attr_reader :response
14
+ attr_reader :errors
15
+
16
+ def initialize(response)
17
+ @response = response
18
+ @errors = []
19
+
20
+ validate_errors!
21
+ validate_body_attrs!
22
+ end
23
+
24
+ # rubocop:disable all
25
+ def validate_errors!
26
+ case response.http.code
27
+ when 200
28
+ errors << Soap::Webservice::FaultError.new(response)
29
+ when 500
30
+ errors << Soap::Webservice::Error.new(response)
31
+ else
32
+ errors << Soap::Webservice::GenericError.new(response)
33
+ end
34
+ end
35
+ # rubocop:enable all
36
+
37
+ def validate_body_attrs!
38
+ return if required_body.empty?
39
+ if !required_body.empty? && attributes.empty?
40
+ raise "Required attributes are missing #{required_body}"
41
+ end
42
+
43
+ if !(required_body - attributes.keys).empty?
44
+ raise "Attribute #{required_body - attributes.keys} must be present"
45
+ end
46
+ end
47
+
48
+ def header
49
+ response.header
50
+ end
51
+
52
+ def body
53
+ response.body
54
+ end
55
+
56
+ def decoded_body
57
+ response.body
58
+ end
59
+
60
+ def to_xml
61
+ response.to_xml
62
+ end
63
+
64
+ private
65
+
66
+ def list_body_attrs
67
+ return {} if self.class.body_attributes.nil?
68
+ self.class.body_attributes.each.with_object(
69
+ required: [],
70
+ optional: []
71
+ ) do |attr, attrs|
72
+ name = Soap.to_snakecase(attr[:name]).to_sym
73
+ if attr[:attributes].empty?
74
+ attrs[:required] << name
75
+ else
76
+ attrs[:optional] << name
77
+ end
78
+ end
79
+ end
80
+
81
+ def required_body
82
+ list_body_attrs[:required] || []
83
+ end
84
+
85
+ def required_attrs
86
+ required_body
87
+ end
88
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "pago_pa/soap/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "pagopa-soap"
9
+ spec.version = PagoPA::SOAP::VERSION
10
+ spec.authors = ["Damiano Giacomello"]
11
+ spec.email = ["giacomello.damiano@gmail.com"]
12
+
13
+ spec.summary = "Ruby Wrapper for pagoPA SOAP API"
14
+ spec.description = "Ruby Wrapper for pagoPA SOAP API based on Savon"
15
+ spec.homepage = "https://github.com/italia/pagopa-soap-ruby"
16
+ spec.license = "MIT"
17
+
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against " \
22
+ "public gem pushes."
23
+ end
24
+
25
+ spec.required_ruby_version = ">= 2.3.0"
26
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
27
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_dependency "gyoku", "~> 1.3.1"
34
+ spec.add_dependency "nori", "~> 2.6"
35
+ spec.add_dependency "savon", "~> 2.12.0"
36
+
37
+ spec.add_development_dependency "bundler", "~> 1.16"
38
+ spec.add_development_dependency "coveralls", "~> 0"
39
+ spec.add_development_dependency "pry", "~> 0"
40
+ spec.add_development_dependency "rake", "~> 10.0"
41
+ spec.add_development_dependency "rspec", "~> 3.0"
42
+ spec.add_development_dependency "rubocop", "0.57.2"
43
+ spec.add_development_dependency "rubocop-rspec", "1.27.0"
44
+ spec.add_development_dependency "webmock", ">= 3.4.2"
45
+ end
@@ -0,0 +1,214 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ Questo WSDL rappresenta l'interfaccia esposta dalla PAA
4
+ per la ricezione delle Ricevute Telematiche
5
+ -->
6
+ <wsdl:definitions
7
+ xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
8
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
9
+ xmlns:ppt="http://ws.pagamenti.telematici.gov/"
10
+ xmlns:ppthead="http://ws.pagamenti.telematici.gov/ppthead"
11
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
12
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
13
+ xmlns:tns="http://NodoPagamentiSPC.spcoop.gov.it/servizi/PagamentiTelematiciRT"
14
+ name="PPT"
15
+ targetNamespace="http://NodoPagamentiSPC.spcoop.gov.it/servizi/PagamentiTelematiciRT">
16
+ <wsdl:types>
17
+ <xsd:schema version="2.1" targetNamespace="http://ws.pagamenti.telematici.gov/ppthead">
18
+ <xsd:simpleType name="stText35">
19
+ <xsd:restriction base="xsd:string">
20
+ <xsd:minLength value="1" />
21
+ <xsd:maxLength value="35" />
22
+ </xsd:restriction>
23
+ </xsd:simpleType>
24
+ <xsd:element name="intestazionePPT">
25
+ <xsd:complexType>
26
+ <xsd:sequence>
27
+ <xsd:element name="identificativoIntermediarioPA" type="ppthead:stText35" />
28
+ <xsd:element name="identificativoStazioneIntermediarioPA" type="ppthead:stText35" />
29
+ <xsd:element name="identificativoDominio" type="ppthead:stText35" />
30
+ <xsd:element name="identificativoUnivocoVersamento" type="ppthead:stText35" />
31
+ <xsd:element name="codiceContestoPagamento" type="ppthead:stText35" />
32
+ </xsd:sequence>
33
+ </xsd:complexType>
34
+ </xsd:element>
35
+ </xsd:schema>
36
+ <xsd:schema version="1.0" targetNamespace="http://ws.pagamenti.telematici.gov/">
37
+ <xsd:simpleType name="stText35">
38
+ <xsd:restriction base="xsd:string">
39
+ <xsd:minLength value="1" />
40
+ <xsd:maxLength value="35" />
41
+ </xsd:restriction>
42
+ </xsd:simpleType>
43
+ <!-- Wrapper Elements -->
44
+ <xsd:element name="paaInviaRT" type="ppt:paaInviaRT" />
45
+ <xsd:element name="paaInviaRTRisposta" type="ppt:paaInviaRTRisposta" />
46
+
47
+ <xsd:element name="paaInviaEsitoStorno" type="ppt:paaInviaEsitoStorno" />
48
+ <xsd:element name="paaInviaEsitoStornoRisposta" type="ppt:paaInviaEsitoStornoRisposta" />
49
+
50
+ <xsd:element name="paaInviaRichiestaRevoca" type="ppt:paaInviaRichiestaRevoca" />
51
+ <xsd:element name="paaInviaRichiestaRevocaRisposta" type="ppt:paaInviaRichiestaRevocaRisposta" />
52
+
53
+ <!-- Element Definition -->
54
+ <xsd:complexType name="paaInviaRT">
55
+ <xsd:sequence>
56
+ <xsd:element name="tipoFirma" type="xsd:string" />
57
+ <xsd:element name="rt" type="xsd:base64Binary" />
58
+ </xsd:sequence>
59
+ </xsd:complexType>
60
+ <xsd:complexType name="paaInviaRTRisposta">
61
+ <xsd:sequence>
62
+ <xsd:element name="paaInviaRTRisposta" type="ppt:esitoPaaInviaRT" />
63
+ </xsd:sequence>
64
+ </xsd:complexType>
65
+ <xsd:complexType name="esitoPaaInviaRT">
66
+ <xsd:complexContent>
67
+ <xsd:extension base="ppt:risposta">
68
+ <xsd:sequence>
69
+ <xsd:element name="esito" type="xsd:string" minOccurs="0" />
70
+ </xsd:sequence>
71
+ </xsd:extension>
72
+ </xsd:complexContent>
73
+ </xsd:complexType>
74
+ <xsd:complexType name="risposta">
75
+ <xsd:sequence>
76
+ <xsd:element name="fault" type="ppt:faultBean" minOccurs="0" />
77
+ </xsd:sequence>
78
+ </xsd:complexType>
79
+ <xsd:complexType name="faultBean">
80
+ <xsd:sequence>
81
+ <xsd:element name="faultCode" type="xsd:string" />
82
+ <xsd:element name="faultString" type="xsd:string" />
83
+ <xsd:element name="id" type="xsd:string" />
84
+ <xsd:element name="description" type="xsd:string" minOccurs="0" />
85
+ <xsd:element name="serial" type="xsd:int" minOccurs="0" />
86
+ <xsd:element name="originalFaultCode" type="xsd:string" minOccurs="0" />
87
+ <xsd:element name="originalFaultString" type="xsd:string" minOccurs="0" />
88
+ <xsd:element name="originalDescription" type="xsd:string" minOccurs="0" />
89
+ </xsd:sequence>
90
+ </xsd:complexType>
91
+
92
+ <xsd:complexType name="paaInviaEsitoStorno">
93
+ <xsd:sequence>
94
+ <xsd:element name="identificativoIntermediarioPA" type="ppt:stText35" />
95
+ <xsd:element name="identificativoStazioneIntermediarioPA" type="ppt:stText35" />
96
+ <xsd:element name="identificativoDominio" type="ppt:stText35" />
97
+ <xsd:element name="identificativoUnivocoVersamento" type="ppt:stText35" />
98
+ <xsd:element name="codiceContestoPagamento" type="ppt:stText35" />
99
+ <xsd:element name="er" type="xsd:base64Binary" />
100
+ </xsd:sequence>
101
+ </xsd:complexType>
102
+
103
+ <xsd:complexType name="paaInviaEsitoStornoRisposta">
104
+ <xsd:sequence>
105
+ <xsd:element name="paaInviaEsitoStornoRisposta" type="ppt:tipoInviaEsitoStornoRisposta" />
106
+ </xsd:sequence>
107
+ </xsd:complexType>
108
+
109
+ <xsd:complexType name="tipoInviaEsitoStornoRisposta">
110
+ <xsd:complexContent>
111
+ <xsd:extension base="ppt:risposta">
112
+ <xsd:sequence>
113
+ <xsd:element name="esito" type="xsd:string" minOccurs="0" />
114
+ </xsd:sequence>
115
+ </xsd:extension>
116
+ </xsd:complexContent>
117
+ </xsd:complexType>
118
+
119
+ <xsd:complexType name="paaInviaRichiestaRevoca">
120
+ <xsd:sequence>
121
+ <xsd:element name="identificativoDominio" type="ppt:stText35" />
122
+ <xsd:element name="identificativoUnivocoVersamento" type="ppt:stText35" />
123
+ <xsd:element name="codiceContestoPagamento" type="ppt:stText35" />
124
+ <xsd:element name="rr" type="xsd:base64Binary" />
125
+ </xsd:sequence>
126
+ </xsd:complexType>
127
+
128
+ <xsd:complexType name="paaInviaRichiestaRevocaRisposta">
129
+ <xsd:sequence>
130
+ <xsd:element name="paaInviaRichiestaRevocaRisposta" type="ppt:tipoInviaRichiestaRevocaRisposta" />
131
+ </xsd:sequence>
132
+ </xsd:complexType>
133
+
134
+ <xsd:complexType name="tipoInviaRichiestaRevocaRisposta">
135
+ <xsd:complexContent>
136
+ <xsd:extension base="ppt:risposta">
137
+ <xsd:sequence>
138
+ <xsd:element name="esito" type="xsd:string" minOccurs="0" />
139
+ </xsd:sequence>
140
+ </xsd:extension>
141
+ </xsd:complexContent>
142
+ </xsd:complexType>
143
+ </xsd:schema>
144
+ </wsdl:types>
145
+ <wsdl:message name="paaInviaRT">
146
+ <wsdl:part name="bodyrichiesta" element="ppt:paaInviaRT" />
147
+ <wsdl:part name="header" element="ppthead:intestazionePPT" />
148
+ </wsdl:message>
149
+ <wsdl:message name="paaInviaRTResponse">
150
+ <wsdl:part name="bodyrisposta" element="ppt:paaInviaRTRisposta" />
151
+ </wsdl:message>
152
+ <wsdl:message name="paaInviaEsitoStorno">
153
+ <wsdl:part name="bodyrichiesta" element="ppt:paaInviaEsitoStorno" />
154
+ </wsdl:message>
155
+ <wsdl:message name="paaInviaEsitoStornoResponse">
156
+ <wsdl:part name="bodyrisposta" element="ppt:paaInviaEsitoStornoRisposta" />
157
+ </wsdl:message>
158
+ <wsdl:message name="paaInviaRichiestaRevoca">
159
+ <wsdl:part name="bodyrichiesta" element="ppt:paaInviaRichiestaRevoca" />
160
+ </wsdl:message>
161
+ <wsdl:message name="paaInviaRichiestaRevocaResponse">
162
+ <wsdl:part name="bodyrisposta" element="ppt:paaInviaRichiestaRevocaRisposta" />
163
+ </wsdl:message>
164
+ <wsdl:portType name="PagamentiTelematiciRT">
165
+ <wsdl:operation name="paaInviaRT">
166
+ <wsdl:input message="tns:paaInviaRT" wsam:Action="http://ws.pagamenti.telematici.gov/PPT/paaInviaRTRichiesta" />
167
+ <wsdl:output message="tns:paaInviaRTResponse" wsam:Action="http://ws.pagamenti.telematici.gov/PPT/paaInviaRTRisposta" />
168
+ </wsdl:operation>
169
+ <wsdl:operation name="paaInviaEsitoStorno">
170
+ <wsdl:input message="tns:paaInviaEsitoStorno" wsam:Action="http://ws.pagamenti.telematici.gov/PPT/paaInviaEsitoStornoRichiesta" />
171
+ <wsdl:output message="tns:paaInviaEsitoStornoResponse" wsam:Action="http://ws.pagamenti.telematici.gov/PPT/paaInviaEsitoStornoRisposta" />
172
+ </wsdl:operation>
173
+ <wsdl:operation name="paaInviaRichiestaRevoca">
174
+ <wsdl:input message="tns:paaInviaRichiestaRevoca" wsam:Action="http://ws.pagamenti.telematici.gov/PPT/paaInviaRichiestaRevocaRichiesta" />
175
+ <wsdl:output message="tns:paaInviaRichiestaRevocaResponse" wsam:Action="http://ws.pagamenti.telematici.gov/PPT/paaInviaRichiestaRevocaRisposta" />
176
+ </wsdl:operation>
177
+ </wsdl:portType>
178
+ <wsdl:binding name="PagamentiTelematiciRTbinding" type="tns:PagamentiTelematiciRT">
179
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
180
+ <wsdl:operation name="paaInviaRT">
181
+ <soap:operation soapAction="paaInviaRT" />
182
+ <wsdl:input>
183
+ <soap:body parts="bodyrichiesta" use="literal" />
184
+ <soap:header message="tns:paaInviaRT" part="header" use="literal" />
185
+ </wsdl:input>
186
+ <wsdl:output>
187
+ <soap:body use="literal" />
188
+ </wsdl:output>
189
+ </wsdl:operation>
190
+ <wsdl:operation name="paaInviaEsitoStorno">
191
+ <soap:operation soapAction="paaInviaEsitoStorno" />
192
+ <wsdl:input>
193
+ <soap:body use="literal" />
194
+ </wsdl:input>
195
+ <wsdl:output>
196
+ <soap:body use="literal" />
197
+ </wsdl:output>
198
+ </wsdl:operation>
199
+ <wsdl:operation name="paaInviaRichiestaRevoca">
200
+ <soap:operation soapAction="paaInviaRichiestaRevoca" />
201
+ <wsdl:input>
202
+ <soap:body use="literal" />
203
+ </wsdl:input>
204
+ <wsdl:output>
205
+ <soap:body use="literal" />
206
+ </wsdl:output>
207
+ </wsdl:operation>
208
+ </wsdl:binding>
209
+ <wsdl:service name="PagamentiTelematiciRTservice">
210
+ <wsdl:port name="PPTPort" binding="tns:PagamentiTelematiciRTbinding">
211
+ <soap:address location="http://NodoPagamentiSPC.spcoop.gov.it/" />
212
+ </wsdl:port>
213
+ </wsdl:service>
214
+ </wsdl:definitions>