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,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>