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
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "soap"
|
5
|
+
require "pago_pa"
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
require "pry"
|
12
|
+
Pry.start
|
13
|
+
|
14
|
+
# require "irb"
|
15
|
+
# IRB.start(__FILE__)
|
data/bin/setup
ADDED
Binary file
|
Binary file
|
Binary file
|
data/lib/pago_pa.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "nori"
|
4
|
+
require "gyoku"
|
5
|
+
require "soap"
|
6
|
+
|
7
|
+
require "pago_pa/soap"
|
8
|
+
require "pago_pa/soap/version"
|
9
|
+
require "pago_pa/soap/configurable"
|
10
|
+
require "pago_pa/soap/wsdl_loader"
|
11
|
+
require "pago_pa/soap/message/rpt"
|
12
|
+
require "pago_pa/soap/message/rt"
|
13
|
+
|
14
|
+
module PagoPA; end
|
data/lib/pago_pa/soap.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PagoPA; end
|
4
|
+
|
5
|
+
module PagoPA::SOAP
|
6
|
+
class << self
|
7
|
+
def options
|
8
|
+
Hash[PagoPA::SOAP.keys.map { |key| [key, config.send(key)] }]
|
9
|
+
end
|
10
|
+
|
11
|
+
# API client based on configured options {Configurable}
|
12
|
+
def build
|
13
|
+
return @build if defined?(@build)
|
14
|
+
@build = PagoPA::SOAP::WSDLLoader.new(options)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PagoPA::SOAP
|
4
|
+
class << self
|
5
|
+
# List of configurable keys for {Pagoparb::Client}
|
6
|
+
# @return [Array] of option keys
|
7
|
+
def keys
|
8
|
+
@keys ||= %i[
|
9
|
+
namespace wsdl_base wsdl_notify endpoint_base endpoint_notify
|
10
|
+
]
|
11
|
+
end
|
12
|
+
|
13
|
+
def config
|
14
|
+
@config ||= Configurable.new
|
15
|
+
end
|
16
|
+
|
17
|
+
# Set configuration options using a block
|
18
|
+
def configure
|
19
|
+
yield(config)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Configurable
|
24
|
+
attr_accessor :namespace
|
25
|
+
attr_accessor :wsdl_base
|
26
|
+
attr_accessor :wsdl_notify
|
27
|
+
attr_accessor :endpoint_base
|
28
|
+
attr_accessor :endpoint_notify
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
@namespace ||= "PagoPA"
|
32
|
+
@wsdl_base ||=
|
33
|
+
File.expand_path("../../../resources/pagopa_base.wsdl", __dir__)
|
34
|
+
@wsdl_notify ||=
|
35
|
+
File.expand_path("../../../resources/pagopa_avvisi.wsdl", __dir__)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PagoPA; end
|
4
|
+
module PagoPA::SOAP; end
|
5
|
+
module PagoPA::SOAP::Message; end
|
6
|
+
|
7
|
+
class PagoPA::SOAP::Message::Domain
|
8
|
+
REQUIRED_ATTRIBUTES = %i[
|
9
|
+
identificativo_dominio identificativo_stazione_richiedente
|
10
|
+
].freeze
|
11
|
+
|
12
|
+
attr_reader :attributes
|
13
|
+
|
14
|
+
def initialize(attributes)
|
15
|
+
@attributes = attributes
|
16
|
+
validate_attrs!
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_params
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def validate_attrs!
|
25
|
+
attributes.each_key do |at|
|
26
|
+
if !REQUIRED_ATTRIBUTES.include?(at)
|
27
|
+
raise "Attribute #{at} must be present"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PagoPA; end
|
4
|
+
module PagoPA::SOAP; end
|
5
|
+
module PagoPA::SOAP::Message; end
|
6
|
+
|
7
|
+
class PagoPA::SOAP::Message::Institution
|
8
|
+
REQUIRED_ATTRIBUTES = %i[
|
9
|
+
denominazione_beneficiario identificativo_univoco_beneficiario
|
10
|
+
].freeze
|
11
|
+
REQUIRED_IUB = %i[
|
12
|
+
tipo_identificativo_univoco codice_identificativo_univoco
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
attr_reader :attributes
|
16
|
+
attr_reader :iub
|
17
|
+
|
18
|
+
def initialize(attributes)
|
19
|
+
@attributes = attributes
|
20
|
+
@iub = attributes[:identificativo_univoco_beneficiario]
|
21
|
+
validate_attrs!
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_params
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def validate_attrs!
|
30
|
+
attributes.each_key do |at|
|
31
|
+
if !REQUIRED_ATTRIBUTES.include?(at)
|
32
|
+
raise "Attribute #{at} must be present"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
iub.each_key do |at|
|
37
|
+
if !REQUIRED_IUB.include?(at)
|
38
|
+
raise "Attribute Identifier #{at} must be present"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PagoPA; end
|
4
|
+
module PagoPA::SOAP; end
|
5
|
+
module PagoPA::SOAP::Message; end
|
6
|
+
|
7
|
+
class PagoPA::SOAP::Message::Payer
|
8
|
+
REQUIRED_ATTRIBUTES = %i[
|
9
|
+
anagrafica_pagatore identificativo_univoco_pagatore
|
10
|
+
].freeze
|
11
|
+
REQUIRED_IUP = %i[
|
12
|
+
tipo_identificativo_univoco codice_identificativo_univoco
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
attr_reader :attributes
|
16
|
+
attr_reader :iup
|
17
|
+
|
18
|
+
def initialize(attributes = {})
|
19
|
+
@attributes = attributes
|
20
|
+
@iup = attributes[:identificativo_univoco_pagatore]
|
21
|
+
validate_attrs!
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_params
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def validate_attrs!
|
30
|
+
attributes.each_key do |at|
|
31
|
+
if !REQUIRED_ATTRIBUTES.include?(at)
|
32
|
+
raise "Attribute #{at} must be present"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
iup.each_key do |at|
|
37
|
+
if !REQUIRED_IUP.include?(at)
|
38
|
+
raise "Attribute Identifier #{at} must be present"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pago_pa/soap/message/single_payment"
|
4
|
+
|
5
|
+
module PagoPA; end
|
6
|
+
module PagoPA::SOAP; end
|
7
|
+
module PagoPA::SOAP::Message; end
|
8
|
+
|
9
|
+
class PagoPA::SOAP::Message::Payment
|
10
|
+
REQUIRED_ATTRIBUTES = %i[
|
11
|
+
data_esecuzione_pagamento importo_totale_da_versare tipo_versamento
|
12
|
+
identificativo_univoco_versamento codice_contesto_pagamento
|
13
|
+
firma_ricevuta dati_singolo_versamento
|
14
|
+
].freeze
|
15
|
+
|
16
|
+
attr_reader :attributes
|
17
|
+
attr_reader :date
|
18
|
+
attr_reader :amount
|
19
|
+
attr_reader :type
|
20
|
+
attr_reader :iuv
|
21
|
+
attr_reader :contest
|
22
|
+
attr_reader :signature
|
23
|
+
|
24
|
+
def initialize(**args)
|
25
|
+
@attributes = args
|
26
|
+
validate_attrs!
|
27
|
+
|
28
|
+
@date = attributes.delete(:data_esecuzione_pagamento)
|
29
|
+
@amount = attributes.delete(:importo_totale_da_versare)
|
30
|
+
@type = attributes.delete(:tipo_versamento)
|
31
|
+
@iuv = attributes.delete(:identificativo_univoco_versamento)
|
32
|
+
@contest = attributes.delete(:codice_contesto_pagamento)
|
33
|
+
@signature = attributes.delete(:firma_ricevuta)
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_params
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def validate_attrs!
|
42
|
+
attributes.each_key do |at|
|
43
|
+
if !REQUIRED_ATTRIBUTES.include?(at)
|
44
|
+
raise "Attribute #{at} must be present"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
if attributes[:dati_singolo_versamento].count >= 1
|
49
|
+
raise "Single payment must be exist"
|
50
|
+
end
|
51
|
+
if attributes[:dati_singolo_versamento].count > 5
|
52
|
+
raise "Single payment can contain up to 5 occurrences"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def single_payments
|
57
|
+
@single_payments ||= attributes[:dati_singolo_versamento].map do |single|
|
58
|
+
PagoPA::SOAP::Message::SinglePayment.new(single).perform!
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pago_pa/soap/message/domain"
|
4
|
+
require "pago_pa/soap/message/payer"
|
5
|
+
require "pago_pa/soap/message/institution"
|
6
|
+
require "pago_pa/soap/message/payment"
|
7
|
+
|
8
|
+
module PagoPA::SOAP; end
|
9
|
+
module PagoPA::SOAP::Message; end
|
10
|
+
|
11
|
+
class PagoPA::SOAP::Message::Rpt
|
12
|
+
class << self
|
13
|
+
def decode(string)
|
14
|
+
nori = Nori.new(
|
15
|
+
advanced_typecasting: false,
|
16
|
+
convert_tags_to: lambda do |tag|
|
17
|
+
Soap.to_snakecase(tag.split(":").last).to_sym
|
18
|
+
end
|
19
|
+
)
|
20
|
+
xml = Base64.decode64(string)
|
21
|
+
nori.parse(xml)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
REQUIRED_ATTRIBUTES = %i[
|
26
|
+
versione_oggetto dominio identificativo_messaggio_richiesta
|
27
|
+
data_ora_messaggio_richiesta autenticazione_soggetto
|
28
|
+
soggetto_pagatore ente_beneficiario dati_versamento
|
29
|
+
].freeze
|
30
|
+
|
31
|
+
attr_reader :attributes
|
32
|
+
attr_reader :version
|
33
|
+
attr_reader :request_id
|
34
|
+
attr_reader :date_request
|
35
|
+
attr_reader :auth
|
36
|
+
attr_reader :base_64
|
37
|
+
|
38
|
+
def initialize(decode = false, **args)
|
39
|
+
if decode && args.key?(:base_64)
|
40
|
+
args = self.decode(args[:base_64] || "")
|
41
|
+
end
|
42
|
+
|
43
|
+
@attributes = args
|
44
|
+
@version = attributes.delete(:versione_oggetto)
|
45
|
+
@request_id = attributes.delete(:identificativo_messaggio_richiesta)
|
46
|
+
@date_request = attributes.delete(:data_ora_messaggio_richiesta)
|
47
|
+
@auth = attributes.delete(:autenticazione_soggetto)
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_params
|
51
|
+
{
|
52
|
+
"RPT" => {}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
def encode
|
57
|
+
Base64.encode64(to_xml)
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_xml
|
61
|
+
Gyoku.xml(to_params)
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def domain
|
67
|
+
@domain ||= PagoPA::SOAP::Message::Domain.new(attributes[:dominio]).perform!
|
68
|
+
end
|
69
|
+
|
70
|
+
def payer
|
71
|
+
@payer ||=
|
72
|
+
PagoPA::SOAP::Message::Payer.new(attributes[:soggetto_pagatore]).perform!
|
73
|
+
end
|
74
|
+
|
75
|
+
def institution
|
76
|
+
@institution ||=
|
77
|
+
PagoPA::SOAP::Message::Institution.new(
|
78
|
+
attributes[:ente_beneficiario]
|
79
|
+
).perform!
|
80
|
+
end
|
81
|
+
|
82
|
+
def payment
|
83
|
+
@payment ||=
|
84
|
+
PagoPA::SOAP::Message::Payment.new(attributes[:dati_versamento]).perform!
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PagoPA; end
|
4
|
+
module PagoPA::SOAP; end
|
5
|
+
module PagoPA::SOAP::Message; end
|
6
|
+
|
7
|
+
class PagoPA::SOAP::Message::Rt
|
8
|
+
class << self
|
9
|
+
def decode(string)
|
10
|
+
Base64.decode64(string)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
REQUIRED_ATTRIBUTES = %i[
|
15
|
+
versione_oggetto dominio identificativo_messaggio_ricevuta
|
16
|
+
data_ora_messaggio_richiesta riferimento_messaggio_richiesta
|
17
|
+
riferimento_data_richiesta istituto_attestante ente_beneficiario
|
18
|
+
soggetto_pagatore dati_pagamento
|
19
|
+
].freeze
|
20
|
+
|
21
|
+
attr_reader :attributes
|
22
|
+
|
23
|
+
def initialize(attributes = {}, decode = false)
|
24
|
+
if decode && attributes.key?(:base_64)
|
25
|
+
parser = Nori.new(
|
26
|
+
advanced_typecasting: false,
|
27
|
+
convert_tags_to: lambda { |tag| Soap.to_nakecase(tag).to_sym }
|
28
|
+
)
|
29
|
+
attrs = parser.parse(self.decode(attributes[:base_64] || ""))
|
30
|
+
@attributes = attrs || {}
|
31
|
+
else
|
32
|
+
@attributes = attributes
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def encode
|
37
|
+
Base64.encode64(to_xml)
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_xml
|
41
|
+
Gyoku.xml(to_params)
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PagoPA; end
|
4
|
+
module PagoPA::SOAP; end
|
5
|
+
module PagoPA::SOAP::Message; end
|
6
|
+
|
7
|
+
class PagoPA::SOAP::Message::SinglePayment
|
8
|
+
REQUIRED_ATTRIBUTES = %i[].freeze
|
9
|
+
|
10
|
+
attr_reader :attributes
|
11
|
+
|
12
|
+
def initialize(attributes = {})
|
13
|
+
@attributes = attributes
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_params
|
17
|
+
end
|
18
|
+
end
|