cielo-ws15 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/cielo/ws15.rb +214 -0
- data/lib/cielo/ws15/authentication.rb +16 -0
- data/lib/cielo/ws15/authorization.rb +20 -0
- data/lib/cielo/ws15/authorization_message.rb +28 -0
- data/lib/cielo/ws15/cancellation.rb +14 -0
- data/lib/cielo/ws15/cancellation_message.rb +32 -0
- data/lib/cielo/ws15/capture.rb +14 -0
- data/lib/cielo/ws15/capture_message.rb +32 -0
- data/lib/cielo/ws15/holder.rb +55 -0
- data/lib/cielo/ws15/merchant.rb +20 -0
- data/lib/cielo/ws15/message.rb +110 -0
- data/lib/cielo/ws15/order.rb +49 -0
- data/lib/cielo/ws15/payment_method.rb +64 -0
- data/lib/cielo/ws15/token.rb +12 -0
- data/lib/cielo/ws15/token_message.rb +35 -0
- data/lib/cielo/ws15/transaction.rb +90 -0
- data/lib/cielo/ws15/transaction_message.rb +68 -0
- metadata +118 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 14f65e9edcee6d1d490c57a751e224dafe60645f
|
4
|
+
data.tar.gz: 0adb601a95ed3140e120713a5311cf8b57abee6c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a88aab5616c3af7dc90b6f539065b82d30861454650d2af4db0d2bed8b67f61fd37b330181bc816ee676408ee7e83acd45c472ea6f3129727b9725823f65fb72
|
7
|
+
data.tar.gz: 25bf32a0b05a3b17968d4270280937ed39d484e46519cb5a915c0b0635a5b1af028b83e0d8a76cc0d1ddb393ab7d80e683077e66fa2390fd5dd7553c2789162a
|
data/lib/cielo/ws15.rb
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
require "cielo/ws15/holder"
|
2
|
+
require "cielo/ws15/merchant"
|
3
|
+
require "cielo/ws15/order"
|
4
|
+
require "cielo/ws15/payment_method"
|
5
|
+
require "cielo/ws15/transaction"
|
6
|
+
require "cielo/ws15/token"
|
7
|
+
|
8
|
+
require "cielo/ws15/authorization_message"
|
9
|
+
require "cielo/ws15/cancellation_message"
|
10
|
+
require "cielo/ws15/capture_message"
|
11
|
+
require "cielo/ws15/transaction_message"
|
12
|
+
require "cielo/ws15/token_message"
|
13
|
+
require "net/http"
|
14
|
+
|
15
|
+
# SDK de integração com o Webservice 1.5 da Cielo
|
16
|
+
module Cielo
|
17
|
+
# Integração com o Webservice 1.5; esse participante faz um papel de facilitador
|
18
|
+
# para a construção de todos os participantes importantes para a integração.
|
19
|
+
# Através de factory methods, é possível criar as instâncias pré-configuradas
|
20
|
+
# com os parâmetros mínimos necessários para a execução das operações.
|
21
|
+
class WS15
|
22
|
+
# Ambiente de produção da Cielo
|
23
|
+
PRODUCTION = "https://ecommerce.cielo.com.br/servicos/ecommwsec.do"
|
24
|
+
|
25
|
+
# Ambiente de testes da Cielo
|
26
|
+
TEST = "https://qasecommerce.cielo.com.br/servicos/ecommwsec.do"
|
27
|
+
|
28
|
+
# Namespace dos XML de requisição e resposta
|
29
|
+
NAMESPACE = "http://ecommerce.cbmp.com.br"
|
30
|
+
|
31
|
+
# Versão do XML utilizado na integração
|
32
|
+
VERSION = "1.3.0"
|
33
|
+
|
34
|
+
attr_accessor :merchant, :endpoint
|
35
|
+
private :merchant, :endpoint
|
36
|
+
|
37
|
+
# Inicializa uma nova instância de WS15 informando as credenciais e o ambiente
|
38
|
+
#
|
39
|
+
# @param affiliation_id [String] Número de afiliação na Cielo
|
40
|
+
# @param affiliation_key [String] Chave de afiliação
|
41
|
+
# @param endpoint [String] Ambiente onde será executada a integração
|
42
|
+
def initialize(
|
43
|
+
affiliation_id,
|
44
|
+
affiliation_key,
|
45
|
+
endpoint = WS15::PRODUCTION)
|
46
|
+
|
47
|
+
@merchant = Merchant.new(affiliation_id, affiliation_key)
|
48
|
+
@endpoint = endpoint
|
49
|
+
end
|
50
|
+
|
51
|
+
# Cria uma instância de Holder, que representa o portador de um cartão,
|
52
|
+
# definindo os dados do cartão ou apenas um token previamente gerado
|
53
|
+
#
|
54
|
+
# @param token_or_number [String] token ou o número do cartão do cliente
|
55
|
+
# @param expiration_year [String] ano de expiração do cartão
|
56
|
+
# @param expiration_month [String] mês de expiração do cartão
|
57
|
+
# @param indicator [Number] indicador de visibilidade do código de segurança
|
58
|
+
# @param cvv [String] Código de segurança do cartão
|
59
|
+
#
|
60
|
+
# @return [Holder] instância configurada com os dados informados
|
61
|
+
def holder(
|
62
|
+
token_or_number,
|
63
|
+
expiration_year = nil,
|
64
|
+
expiration_month = nil,
|
65
|
+
indicator = nil,
|
66
|
+
cvv = Holder::CVV_NOT_INFORMED)
|
67
|
+
|
68
|
+
if expiration_year == nil
|
69
|
+
return Holder.new(token_or_number)
|
70
|
+
end
|
71
|
+
|
72
|
+
return Holder.new(
|
73
|
+
token_or_number,
|
74
|
+
expiration_year,
|
75
|
+
expiration_month,
|
76
|
+
indicator,
|
77
|
+
cvv
|
78
|
+
)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Cria uma instância de Order, que representa um pedido, informando o número
|
82
|
+
# valor, moeda e data de criação.
|
83
|
+
#
|
84
|
+
# @param number [String] Número do pedido na plataforma da loja
|
85
|
+
# @param total [Number] Valor total do pedido em centavos
|
86
|
+
# @param currency [Number] Código ISO que representa a moeda; 986 para Real
|
87
|
+
# @param date_time [String] Data e hora do pedido na plataforma da loja
|
88
|
+
#
|
89
|
+
# @return [Order] instância de Order configurada com os dados informados
|
90
|
+
def order(
|
91
|
+
number,
|
92
|
+
total,
|
93
|
+
currency = 986,
|
94
|
+
date_time = nil)
|
95
|
+
|
96
|
+
return Order.new(number, total, currency, date_time)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Cria uma instância de PaymentMethod, que representa a forma de pagamento,
|
100
|
+
# informando o banco emissor do cartão, produto Cielo e número de parcelas.
|
101
|
+
#
|
102
|
+
# @param issuer [String] Banco emissor do cartão
|
103
|
+
# @param product [String] Produto Cielo que será utilizado
|
104
|
+
# @param installments [Number] Número de parcelas; 1 para transação à vista
|
105
|
+
#
|
106
|
+
# @return [PaymentMethod] instância de PaymentMethod configurada com os dados informados
|
107
|
+
def payment_method(
|
108
|
+
issuer,
|
109
|
+
product = PaymentMethod::CREDITO_A_VISTA,
|
110
|
+
installments = 1)
|
111
|
+
|
112
|
+
return PaymentMethod.new(issuer, product, installments)
|
113
|
+
end
|
114
|
+
|
115
|
+
# Cria uma instância de Transaction, que representa uma transação, informando
|
116
|
+
# o portador do cartão, pedido, forma de pagamento, URL de retorno, método
|
117
|
+
# de autorização e forma de captura.
|
118
|
+
#
|
119
|
+
# @param holder [Holder] Portador do cartão
|
120
|
+
# @param order [Order] Pedido
|
121
|
+
# @param payment_method [PaymentMethod] Forma de pagamento
|
122
|
+
# @param return_url [String] URL de retorno
|
123
|
+
# @param authorize [Number] Método de autorização
|
124
|
+
# @param capture [Boolean] Se a transação deve ser capturada automaticamente
|
125
|
+
#
|
126
|
+
# @return [Transaction] instância de Transaction configurada com os dados informados
|
127
|
+
def transaction(
|
128
|
+
holder,
|
129
|
+
order,
|
130
|
+
payment_method,
|
131
|
+
return_url,
|
132
|
+
authorize,
|
133
|
+
capture: true)
|
134
|
+
|
135
|
+
return Transaction.new(@merchant, holder, order, payment_method, return_url, authorize, capture:capture)
|
136
|
+
end
|
137
|
+
|
138
|
+
# Envia uma requisicao-autorizacao-tid para a Cielo
|
139
|
+
#
|
140
|
+
# @param transaction [Transaction] A transação que será enviada na requisição
|
141
|
+
#
|
142
|
+
# @return [Transaction] A transação com o retorno da Cielo
|
143
|
+
def authorization_request(transaction)
|
144
|
+
authorization_message = WS15Message::AuthorizationMessage.new
|
145
|
+
|
146
|
+
response = send_request(authorization_message.serialize(transaction))
|
147
|
+
|
148
|
+
return transaction
|
149
|
+
end
|
150
|
+
|
151
|
+
# Envia uma requisicao-cancelamento para a Cielo
|
152
|
+
#
|
153
|
+
# @param transaction [Transaction] A transação que será enviada na requisição
|
154
|
+
# @param total [Number] O valor que será cancelado; se não informado, o cancelamento será total
|
155
|
+
#
|
156
|
+
# @return [Transaction] A transação com o retorno da Cielo
|
157
|
+
def cancellation_request(transaction, total = nil)
|
158
|
+
cancellation_message = WS15Message::CancellationMessage.new
|
159
|
+
|
160
|
+
response = send_request(cancellation_message.serialize(transaction, total))
|
161
|
+
|
162
|
+
return cancellation_message.unserialize(response, transaction)
|
163
|
+
end
|
164
|
+
|
165
|
+
# Envia uma requisicao-captura para a Cielo
|
166
|
+
#
|
167
|
+
# @param transaction [Transaction] A transação que será enviada na requisição
|
168
|
+
# @param total [Number] O valor que será capturado; se não informado, a captura será total
|
169
|
+
#
|
170
|
+
# @return [Transaction] A transação com o retorno da Cielo
|
171
|
+
def capture_request(transaction, total = nil)
|
172
|
+
capture_message = WS15Message::CaptureMessage.new
|
173
|
+
|
174
|
+
response = send_request(capture_message.serialize(transaction, total))
|
175
|
+
|
176
|
+
return capture_message.unserialize(response, transaction)
|
177
|
+
end
|
178
|
+
|
179
|
+
# Envia uma requisicao-token para a Cielo
|
180
|
+
#
|
181
|
+
# @param holder [Holder] Dados do portador do cartão
|
182
|
+
#
|
183
|
+
# @return [Token] O token gerado para os dados do cartão
|
184
|
+
def token_request(holder)
|
185
|
+
token_message = WS15Message::TokenMessage.new
|
186
|
+
|
187
|
+
response = send_request(token_message.serialize(@merchant, holder))
|
188
|
+
|
189
|
+
return token_message.unserialize(response)
|
190
|
+
end
|
191
|
+
|
192
|
+
# Envia uma requisicao-transacao para a Cielo
|
193
|
+
#
|
194
|
+
# @param transaction [Transaction] A transação que será enviada na requisição
|
195
|
+
#
|
196
|
+
# @return [Transaction] A transação com o retorno da Cielo
|
197
|
+
def transaction_request(transaction)
|
198
|
+
transaction_message = WS15Message::TransactionMessage.new
|
199
|
+
|
200
|
+
response = send_request(transaction_message.serialize(transaction))
|
201
|
+
|
202
|
+
return transaction_message.unserialize(response, transaction)
|
203
|
+
end
|
204
|
+
|
205
|
+
private
|
206
|
+
def send_request(message)
|
207
|
+
uri = URI(@endpoint)
|
208
|
+
|
209
|
+
response = Net::HTTP.post_form(uri, {"mensagem" => message})
|
210
|
+
|
211
|
+
return response.body
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Em casos de autenticação, representa os dados da autenticação.
|
3
|
+
#
|
4
|
+
# @attr [String] code Código da autenticação
|
5
|
+
# @attr [String] message Mensagem da autenticação
|
6
|
+
# @attr [String] date_time Data e hora da autenticação
|
7
|
+
# @attr [Number] total Valor autenticado
|
8
|
+
# @attr [Number] eci Código ECI para a autenticação
|
9
|
+
class Authentication
|
10
|
+
attr_accessor :code,
|
11
|
+
:message,
|
12
|
+
:date_time,
|
13
|
+
:total,
|
14
|
+
:eci
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Dados da autorização
|
3
|
+
#
|
4
|
+
# @attr [String] code Código da autorização
|
5
|
+
# @attr [String] message Mensagem da autorização
|
6
|
+
# @attr [String] date_time Data e hora da autorização
|
7
|
+
# @attr [Number] total Valor autorização
|
8
|
+
# @attr [Number] lr Código LR da autorização
|
9
|
+
# @attr [Number] arp Código ARP da autorização
|
10
|
+
# @attr [Number] nsu Código NSU da autorização
|
11
|
+
class Authorization
|
12
|
+
attr_accessor :code,
|
13
|
+
:message,
|
14
|
+
:date_time,
|
15
|
+
:total,
|
16
|
+
:lr,
|
17
|
+
:arp,
|
18
|
+
:nsu
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
require "cielo/ws15/message"
|
3
|
+
|
4
|
+
module Cielo::WS15Message
|
5
|
+
class AuthorizationMessage
|
6
|
+
include Cielo::WS15Message
|
7
|
+
|
8
|
+
def serialize(transaction)
|
9
|
+
builder = Nokogiri::XML::Builder.new(:encoding => "ISO-8859-1") do |xml|
|
10
|
+
xml.send("requisicao-autorizacao-tid",
|
11
|
+
"xmlns" => Cielo::WS15::NAMESPACE,
|
12
|
+
"versao" => Cielo::WS15::VERSION,
|
13
|
+
"id" => transaction.order.number) {
|
14
|
+
|
15
|
+
xml.send("tid", transaction.tid)
|
16
|
+
|
17
|
+
Cielo::WS15Message.serialize_dados_ec(xml, transaction.merchant)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
return builder.to_xml
|
22
|
+
end
|
23
|
+
|
24
|
+
def unserialize(message, transaction)
|
25
|
+
return Cielo::WS15Message.unserialize_transaction(message, transaction)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Em casos de cancelamento, representa os dados do cancelamento
|
3
|
+
#
|
4
|
+
# @attr [String] code Código do cancelamento
|
5
|
+
# @attr [String] message Mensagem do cancelamento
|
6
|
+
# @attr [String] date_time Data e hora do cancelamento
|
7
|
+
# @attr [Number] total Valor cancelado
|
8
|
+
class Cancellation
|
9
|
+
attr_accessor :code,
|
10
|
+
:message,
|
11
|
+
:date_time,
|
12
|
+
:total
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
require "cielo/ws15/message"
|
3
|
+
|
4
|
+
module Cielo::WS15Message
|
5
|
+
class CancellationMessage
|
6
|
+
include Cielo::WS15Message
|
7
|
+
|
8
|
+
def serialize(transaction, total = nil)
|
9
|
+
builder = Nokogiri::XML::Builder.new(:encoding => "ISO-8859-1") do |xml|
|
10
|
+
xml.send("requisicao-cancelamento",
|
11
|
+
"xmlns" => Cielo::WS15::NAMESPACE,
|
12
|
+
"versao" => Cielo::WS15::VERSION,
|
13
|
+
"id" => transaction.order.number) {
|
14
|
+
|
15
|
+
xml.send("tid", transaction.tid)
|
16
|
+
|
17
|
+
Cielo::WS15Message.serialize_dados_ec(xml, transaction.merchant)
|
18
|
+
|
19
|
+
if total != nil
|
20
|
+
xml.send("valor", total)
|
21
|
+
end
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
return builder.to_xml
|
26
|
+
end
|
27
|
+
|
28
|
+
def unserialize(message, transaction)
|
29
|
+
return Cielo::WS15Message.unserialize_transaction(message, transaction)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Em casos de captura, representa os dados da captura.
|
3
|
+
#
|
4
|
+
# @attr [String] code Código da captura
|
5
|
+
# @attr [String] message Mensagem da captura
|
6
|
+
# @attr [String] date_time Data e hora da captura
|
7
|
+
# @attr [Number] total Valor capturado
|
8
|
+
class Capture
|
9
|
+
attr_accessor :code,
|
10
|
+
:message,
|
11
|
+
:date_time,
|
12
|
+
:total
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
require "cielo/ws15/message"
|
3
|
+
|
4
|
+
module Cielo::WS15Message
|
5
|
+
class CaptureMessage
|
6
|
+
include Cielo::WS15Message
|
7
|
+
|
8
|
+
def serialize(transaction, total = nil)
|
9
|
+
builder = Nokogiri::XML::Builder.new(:encoding => "ISO-8859-1") do |xml|
|
10
|
+
xml.send("requisicao-captura",
|
11
|
+
"xmlns" => Cielo::WS15::NAMESPACE,
|
12
|
+
"versao" => Cielo::WS15::VERSION,
|
13
|
+
"id" => transaction.order.number) {
|
14
|
+
|
15
|
+
xml.send("tid", transaction.tid)
|
16
|
+
|
17
|
+
Cielo::WS15Message.serialize_dados_ec(xml, transaction.merchant)
|
18
|
+
|
19
|
+
if total != nil
|
20
|
+
xml.send("valor", total)
|
21
|
+
end
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
return builder.to_xml
|
26
|
+
end
|
27
|
+
|
28
|
+
def unserialize(message, transaction)
|
29
|
+
return Cielo::WS15Message.unserialize_transaction(message, transaction)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Dados do portador
|
3
|
+
#
|
4
|
+
# @attr [String] token Token único do cartão
|
5
|
+
# @attr [String] number Número do cartão
|
6
|
+
# @attr [String] expiration Data de expiração do cartão
|
7
|
+
# @attr [Number] indicator Indicador do código de segurança do cartão
|
8
|
+
# @attr [String] cvv Código de segurança do cartão
|
9
|
+
# @attr [String] name Nome do portador do cartão
|
10
|
+
class Holder
|
11
|
+
# Indica que o CVV não foi informado
|
12
|
+
CVV_NOT_INFORMED = 0
|
13
|
+
|
14
|
+
# Indica que o CVV foi informado
|
15
|
+
CVV_INFORMED = 1
|
16
|
+
|
17
|
+
# Indica que o CVV não estava legível
|
18
|
+
CVV_UNREADABLE = 2
|
19
|
+
|
20
|
+
# Indica que existe um CVV
|
21
|
+
CVV_NONEXISTENT = 9
|
22
|
+
|
23
|
+
attr_accessor :token,
|
24
|
+
:number,
|
25
|
+
:expiration,
|
26
|
+
:indicator,
|
27
|
+
:cvv,
|
28
|
+
:name
|
29
|
+
|
30
|
+
# Inicializa uma nova instância de Holder, que representa o portador de um
|
31
|
+
# cartão, definindo os dados do cartão ou apenas um token previamente gerado
|
32
|
+
#
|
33
|
+
# @param token_or_number [String] token ou o número do cartão do cliente
|
34
|
+
# @param expiration_year [String] ano de expiração do cartão
|
35
|
+
# @param expiration_month [String] mês de expiração do cartão
|
36
|
+
# @param indicator [Number] indicador de visibilidade do código de segurança
|
37
|
+
# @param cvv [String] Código de segurança do cartão
|
38
|
+
def initialize(
|
39
|
+
token_or_number,
|
40
|
+
expiration_year = nil,
|
41
|
+
expiration_month = nil,
|
42
|
+
indicator = nil,
|
43
|
+
cvv = Holder::CVV_NOT_INFORMED)
|
44
|
+
|
45
|
+
if (expiration_year == nil)
|
46
|
+
@token = token_or_number
|
47
|
+
else
|
48
|
+
@number = token_or_number
|
49
|
+
@expiration = "#{expiration_year}#{expiration_month}"
|
50
|
+
@indicator = indicator
|
51
|
+
@cvv = cvv
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Dados do estabelecimento comercial
|
3
|
+
#
|
4
|
+
# @attr [String] affiliation_id Número de afiliação na Cielo
|
5
|
+
# @attr [String] affiliation_key Chave de afiliação
|
6
|
+
class Merchant
|
7
|
+
attr_accessor :affiliation_id,
|
8
|
+
:affiliation_key
|
9
|
+
|
10
|
+
|
11
|
+
# Inicializa uma nova instância de Merchat
|
12
|
+
#
|
13
|
+
# @param affiliation_id [String] Número de afiliação na Cielo
|
14
|
+
# @param affiliation_key [String] Chave de afiliação
|
15
|
+
def initialize(affiliation_id, affiliation_key)
|
16
|
+
@affiliation_id = affiliation_id
|
17
|
+
@affiliation_key = affiliation_key
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
require "cielo/ws15/authentication"
|
3
|
+
require "cielo/ws15/authorization"
|
4
|
+
require "cielo/ws15/capture"
|
5
|
+
require "cielo/ws15/cancellation"
|
6
|
+
require "cielo/ws15/token"
|
7
|
+
|
8
|
+
# Helper para serialização e deserialização dos XML de requisição e resposta
|
9
|
+
module Cielo::WS15Message
|
10
|
+
def self.serialize_dados_ec(xml, merchant)
|
11
|
+
xml.send("dados-ec") {
|
12
|
+
xml.send("numero", merchant.affiliation_id)
|
13
|
+
xml.send("chave", merchant.affiliation_key)
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.unserialize_transaction(message, transaction)
|
18
|
+
document = document = load_document(message)
|
19
|
+
|
20
|
+
check_error(document)
|
21
|
+
|
22
|
+
transaction.tid = document.xpath("//transacao/tid").text
|
23
|
+
transaction.pan = document.xpath("//transacao/pan").text
|
24
|
+
|
25
|
+
transaction.order = Cielo::Order.new(
|
26
|
+
document.xpath("//transacao/dados-pedido/numero").text,
|
27
|
+
document.xpath("//transacao/dados-pedido/valor").text.to_i,
|
28
|
+
document.xpath("//transacao/dados-pedido/moeda").text.to_i,
|
29
|
+
document.xpath("//transacao/dados-pedido/data-hora").text
|
30
|
+
)
|
31
|
+
|
32
|
+
transaction.order.description = document.xpath("//transacao/dados-pedido/descricao").text
|
33
|
+
transaction.order.language = document.xpath("//transacao/dados-pedido/idioma").text
|
34
|
+
transaction.order.shipping = document.xpath("//transacao/dados-pedido/taxa-embarque").text.to_i
|
35
|
+
|
36
|
+
transaction.payment_method = Cielo::PaymentMethod.new(
|
37
|
+
document.xpath("//transacao/forma-pagamento/bandeira").text,
|
38
|
+
document.xpath("//transacao/forma-pagamento/produto").text,
|
39
|
+
document.xpath("//transacao/forma-pagamento/parcelas").text.to_i
|
40
|
+
)
|
41
|
+
|
42
|
+
transaction.authentication = Cielo::Authentication.new
|
43
|
+
transaction.authentication.code = document.xpath("//transacao/autenticacao/codigo").text
|
44
|
+
transaction.authentication.message = document.xpath("//transacao/autenticacao/mensagem").text
|
45
|
+
transaction.authentication.date_time = document.xpath("//transacao/autenticacao/data-hora").text
|
46
|
+
transaction.authentication.total = document.xpath("//transacao/autenticacao/valor").text
|
47
|
+
transaction.authentication.eci = document.xpath("//transacao/autenticacao/eci").text
|
48
|
+
|
49
|
+
transaction.authorization = Cielo::Authorization.new
|
50
|
+
transaction.authorization.code = document.xpath("//transacao/autorizacao/codigo").text
|
51
|
+
transaction.authorization.message = document.xpath("//transacao/autorizacao/mensagem").text
|
52
|
+
transaction.authorization.date_time = document.xpath("//transacao/autorizacao/data-hora").text
|
53
|
+
transaction.authorization.total = document.xpath("//transacao/autorizacao/valor").text
|
54
|
+
transaction.authorization.lr = document.xpath("//transacao/autorizacao/lr").text
|
55
|
+
transaction.authorization.arp = document.xpath("//transacao/autorizacao/arp").text
|
56
|
+
transaction.authorization.nsu = document.xpath("//transacao/autorizacao/nsu").text
|
57
|
+
|
58
|
+
transaction.capture = Cielo::Capture.new
|
59
|
+
transaction.capture.code = document.xpath("//transacao/captura/codigo").text
|
60
|
+
transaction.capture.message = document.xpath("//transacao/captura/mensagem").text
|
61
|
+
transaction.capture.date_time = document.xpath("//transacao/captura/data-hora").text
|
62
|
+
transaction.capture.total = document.xpath("//transacao/captura/valor").text
|
63
|
+
|
64
|
+
transaction.cancellation = Array.new
|
65
|
+
|
66
|
+
document.xpath("//transacao/cancelamentos/cancelamento").each do |cancelamento|
|
67
|
+
cancellation = Cielo::Cancellation.new
|
68
|
+
|
69
|
+
cancellation.code = cancelamento.xpath('.//codigo').text
|
70
|
+
cancellation.message = cancelamento.xpath('.//mensagem').text
|
71
|
+
cancellation.date_time = cancelamento.xpath('.//data-hora').text
|
72
|
+
cancellation.total = cancelamento.xpath('.//valor').text
|
73
|
+
|
74
|
+
transaction.cancellation << cancellation
|
75
|
+
end
|
76
|
+
|
77
|
+
transaction.token = unserialize_token(message, document)
|
78
|
+
|
79
|
+
return transaction
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.unserialize_token(message, document = nil)
|
83
|
+
if document == nil
|
84
|
+
document = load_document(message)
|
85
|
+
end
|
86
|
+
|
87
|
+
token = Cielo::Token.new
|
88
|
+
|
89
|
+
token.code = document.xpath(".//token/dados-token/codigo-token").text
|
90
|
+
token.status = document.xpath(".//token/dados-token/status").text
|
91
|
+
token.number = document.xpath(".//token/dados-token/numero-cartao-truncado").text
|
92
|
+
|
93
|
+
return token
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
def self.check_error(document)
|
98
|
+
code = document.xpath(".//erro/codigo").text
|
99
|
+
message = document.xpath(".//erro/mensagem").text
|
100
|
+
|
101
|
+
raise "Erro[#{code}]: #{message}" unless code == ""
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.load_document(message)
|
105
|
+
document = Nokogiri::XML(message)
|
106
|
+
document.remove_namespaces!
|
107
|
+
|
108
|
+
return document
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Cielo
|
2
|
+
class Order
|
3
|
+
# Dados do estabelecimento comercial
|
4
|
+
#
|
5
|
+
# @attr [String] number Número do pedido na plataforma da loja
|
6
|
+
# @attr [Number] total Valor do pedido em centavos
|
7
|
+
# @attr [Number] Código ISO da moeda; 986 para Real
|
8
|
+
# @attr [String] date_time Data e hora do pedido
|
9
|
+
# @attr [String] description Descrição do pedido
|
10
|
+
# @attr [String] language Idioma do pedido; PT para português
|
11
|
+
# @attr [Number] shipping Valor do frete em centavos
|
12
|
+
# @attr [String] soft_descriptor Nome de exibição na fatura do cartão
|
13
|
+
attr_accessor :number,
|
14
|
+
:total,
|
15
|
+
:currency,
|
16
|
+
:date_time,
|
17
|
+
:description,
|
18
|
+
:language,
|
19
|
+
:shipping,
|
20
|
+
:soft_descriptor
|
21
|
+
|
22
|
+
# Inicializa uma instância de Order informando o número do pedido, valor,
|
23
|
+
# moeda e data de criação.
|
24
|
+
#
|
25
|
+
# @param number [String] Número do pedido na plataforma da loja
|
26
|
+
# @param total [Number] Valor total do pedido em centavos
|
27
|
+
# @param currency [Number] Código ISO que representa a moeda; 986 para Real
|
28
|
+
# @param date_time [String] Data e hora do pedido na plataforma da loja
|
29
|
+
def initialize(
|
30
|
+
number = 0,
|
31
|
+
total = 0,
|
32
|
+
currency = 986,
|
33
|
+
date_time = nil)
|
34
|
+
|
35
|
+
if (date_time == nil)
|
36
|
+
now = Time.now
|
37
|
+
|
38
|
+
date_time = now.strftime("%Y-%m-%dT%H:%M:%S")
|
39
|
+
end
|
40
|
+
|
41
|
+
@number = number
|
42
|
+
@total = total
|
43
|
+
@currency = currency
|
44
|
+
@language = "PT"
|
45
|
+
@date_time = date_time
|
46
|
+
@shipping = 0
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Forma de pagamento da transação
|
3
|
+
#
|
4
|
+
# @attr [String] issuer Banco emissor do cartão
|
5
|
+
# @attr [String] product Produto da Cielo utilizado
|
6
|
+
# @attr [Number] installments Número de parcelas
|
7
|
+
class PaymentMethod
|
8
|
+
# Cartão Visa
|
9
|
+
VISA = "visa"
|
10
|
+
|
11
|
+
# Cartão Mastercard
|
12
|
+
MASTERCARD = "mastercard"
|
13
|
+
|
14
|
+
# Cartão Diners
|
15
|
+
DINERS = "diners"
|
16
|
+
|
17
|
+
# Cartão Discover
|
18
|
+
DISCOVER = "discover"
|
19
|
+
|
20
|
+
# Cartão ELO
|
21
|
+
ELO = "elo"
|
22
|
+
|
23
|
+
# Cartão Amex
|
24
|
+
AMEX = "amex"
|
25
|
+
|
26
|
+
# Cartão JCB
|
27
|
+
JCB = "jcb"
|
28
|
+
|
29
|
+
# Cartão Aura
|
30
|
+
AURA = "aura"
|
31
|
+
|
32
|
+
# Pagamento com cartão de crédito à vista
|
33
|
+
CREDITO_A_VISTA = 1
|
34
|
+
|
35
|
+
# Pagamento com cartão de crédito parcelado pela loja
|
36
|
+
PARCELADO_LOJA = 2
|
37
|
+
|
38
|
+
# Pagamento com cartão de crédito parcelado pela administradora
|
39
|
+
PARCELADO_ADM = 3
|
40
|
+
|
41
|
+
# Pagamento com cartão de débito
|
42
|
+
DEBITO = "A"
|
43
|
+
|
44
|
+
attr_accessor :issuer,
|
45
|
+
:product,
|
46
|
+
:installments
|
47
|
+
|
48
|
+
# Inicializa uma instância de PaymentMethod informando o banco emissor do
|
49
|
+
# cartão, produto Cielo e número de parcelas.
|
50
|
+
#
|
51
|
+
# @param issuer [String] Banco emissor do cartão
|
52
|
+
# @param product [String] Produto Cielo que será utilizado
|
53
|
+
# @param installments [Number] Número de parcelas; 1 para transação à vista
|
54
|
+
def initialize(
|
55
|
+
issuer,
|
56
|
+
product = PaymentMethod::CREDITO_A_VISTA,
|
57
|
+
installments = 1)
|
58
|
+
|
59
|
+
@issuer = issuer
|
60
|
+
@product = product
|
61
|
+
@installments = installments
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Dados do token do cartão
|
3
|
+
#
|
4
|
+
# @attr [String] code Código do token para ser utilizado em outras transações
|
5
|
+
# @attr [Number] status Status do token
|
6
|
+
# @attr [String] Número do cartão truncado
|
7
|
+
class Token
|
8
|
+
attr_accessor :code,
|
9
|
+
:status,
|
10
|
+
:number
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
require "uuidtools"
|
3
|
+
require "cielo/ws15/message"
|
4
|
+
|
5
|
+
module Cielo::WS15Message
|
6
|
+
class TokenMessage
|
7
|
+
include Cielo::WS15Message
|
8
|
+
|
9
|
+
def serialize(merchant, holder)
|
10
|
+
builder = Nokogiri::XML::Builder.new(:encoding => "ISO-8859-1") do |xml|
|
11
|
+
xml.send("requisicao-token",
|
12
|
+
"xmlns" => Cielo::WS15::NAMESPACE,
|
13
|
+
"versao" => Cielo::WS15::VERSION,
|
14
|
+
"id" => UUIDTools::UUID.random_create) {
|
15
|
+
|
16
|
+
Cielo::WS15Message.serialize_dados_ec(xml, merchant)
|
17
|
+
|
18
|
+
xml.send("dados-portador") {
|
19
|
+
xml.send("numero", holder.number)
|
20
|
+
xml.send("validade", holder.expiration)
|
21
|
+
xml.send("indicador", holder.indicator)
|
22
|
+
xml.send("codigo-seguranca", holder.cvv)
|
23
|
+
xml.send("nome-portador", holder.name)
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
return builder.to_xml
|
29
|
+
end
|
30
|
+
|
31
|
+
def unserialize(message)
|
32
|
+
return Cielo::WS15Message.unserialize_token(message)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Cielo
|
2
|
+
# Representação de uma transação
|
3
|
+
#
|
4
|
+
# @attr [String] tid ID da transação
|
5
|
+
# @attr [String] pan Código PAN da transação
|
6
|
+
# @attr [Number] status Código de status da transação
|
7
|
+
# @attr [String] authentication_url URL de redirecionamento à Cielo
|
8
|
+
# @attr [Authentication] authentication Dados da autenticação
|
9
|
+
# @attr [Authorizarion] authorizarion Dados da autorização
|
10
|
+
# @attr [Merchant] merchant Dados do estabelecimento comercial
|
11
|
+
# @attr [Holder] holder Dados do portador do cartão
|
12
|
+
# @attr [Order] order Dados do pedido na plataforma da loja
|
13
|
+
# @attr [PaymentMethod] payment_method Dados da forma de pagamento
|
14
|
+
# @attr [String] return_url URL de redirecionamento da Cielo para a loja
|
15
|
+
# @attr [Number] authorize Método de autorização
|
16
|
+
# @attr [Boolean] do_capture Indica se a captura deve ser automática ou não
|
17
|
+
# @attr [Capture] capture Dados da captura
|
18
|
+
# @attr [String] free_field Campo livre
|
19
|
+
# @attr [String] bin Seis primeiros dígitos do cartão
|
20
|
+
# @attr [Boolean] generate_token Se um token deve ser gerado para o cartão
|
21
|
+
# @attr [String] avs Bloco XML contendo informações necessárias para realizar a consulta ao serviço
|
22
|
+
# @attr [Token] token Dados do token
|
23
|
+
# @attr [Array<Cancellation>] cancellation Lista de cancelamentos ocorridos
|
24
|
+
class Transaction
|
25
|
+
# Apenas autentica a transação
|
26
|
+
ONLY_AUTHENTICATE = 0
|
27
|
+
|
28
|
+
# Autoriza a transação apenas se tiver sido autenticada
|
29
|
+
AUTHORIZE_IF_AUTHENTICATED = 1
|
30
|
+
|
31
|
+
# Autoriza a transação
|
32
|
+
AUTHORIZE = 2
|
33
|
+
|
34
|
+
# Autorização direta, sem autenticação
|
35
|
+
AUTHORIZE_WITHOUT_AUTHENTICATION = 3
|
36
|
+
|
37
|
+
# Autorização para recorrência
|
38
|
+
RECURRENCE = 4
|
39
|
+
|
40
|
+
attr_accessor :tid,
|
41
|
+
:pan,
|
42
|
+
:status,
|
43
|
+
:authentication_url,
|
44
|
+
:authentication,
|
45
|
+
:authorization,
|
46
|
+
:merchant,
|
47
|
+
:holder,
|
48
|
+
:order,
|
49
|
+
:payment_method,
|
50
|
+
:return_url,
|
51
|
+
:authorize,
|
52
|
+
:do_capture,
|
53
|
+
:capture,
|
54
|
+
:free_field,
|
55
|
+
:bin,
|
56
|
+
:generate_token,
|
57
|
+
:avs,
|
58
|
+
:token,
|
59
|
+
:cancellation
|
60
|
+
|
61
|
+
# Inicializa uma instância de Transaction informando os dados do estabelecimento,
|
62
|
+
# portador do cartão, pedido, forma de pagamento, URL de retorno, método
|
63
|
+
# de autorização e forma de captura.
|
64
|
+
#
|
65
|
+
# @param merchant [Merchant] Dados do estabelecimento comercial
|
66
|
+
# @param holder [Holder] Portador do cartão
|
67
|
+
# @param order [Order] Dados do pedido
|
68
|
+
# @param payment_method [PaymentMethod] Forma de pagamento
|
69
|
+
# @param return_url [String] URL de retorno
|
70
|
+
# @param authorize [Number] Método de autorização
|
71
|
+
# @param capture [Boolean] Se a transação deve ser capturada automaticamente
|
72
|
+
def initialize(
|
73
|
+
merchant,
|
74
|
+
holder,
|
75
|
+
order,
|
76
|
+
payment_method,
|
77
|
+
return_url,
|
78
|
+
authorize,
|
79
|
+
capture: true)
|
80
|
+
|
81
|
+
@merchant = merchant
|
82
|
+
@holder = holder
|
83
|
+
@order = order
|
84
|
+
@payment_method = payment_method
|
85
|
+
@return_url = return_url
|
86
|
+
@authorize = authorize
|
87
|
+
@do_capture = capture
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
require "cielo/ws15/message"
|
3
|
+
|
4
|
+
module Cielo::WS15Message
|
5
|
+
class TransactionMessage
|
6
|
+
include Cielo::WS15Message
|
7
|
+
|
8
|
+
def serialize(transaction)
|
9
|
+
builder = Nokogiri::XML::Builder.new(:encoding => "ISO-8859-1") do |xml|
|
10
|
+
xml.send("requisicao-transacao",
|
11
|
+
"xmlns" => Cielo::WS15::NAMESPACE,
|
12
|
+
"versao" => Cielo::WS15::VERSION,
|
13
|
+
"id" => transaction.order.number) {
|
14
|
+
|
15
|
+
Cielo::WS15Message.serialize_dados_ec(xml, transaction.merchant)
|
16
|
+
|
17
|
+
xml.send("dados-portador") {
|
18
|
+
if transaction.holder.token != nil
|
19
|
+
xml.send("token", transaction.holder.token)
|
20
|
+
else
|
21
|
+
xml.send("numero", transaction.holder.number)
|
22
|
+
xml.send("validade", transaction.holder.expiration)
|
23
|
+
xml.send("indicador", transaction.holder.indicator)
|
24
|
+
xml.send("codigo-seguranca", transaction.holder.cvv)
|
25
|
+
xml.send("nome-portador", transaction.holder.name)
|
26
|
+
end
|
27
|
+
}
|
28
|
+
|
29
|
+
xml.send("dados-pedido") {
|
30
|
+
xml.send("numero", transaction.order.number)
|
31
|
+
xml.send("valor", transaction.order.total)
|
32
|
+
xml.send("moeda", transaction.order.currency)
|
33
|
+
xml.send("data-hora", transaction.order.date_time)
|
34
|
+
xml.send("descricao", transaction.order.description)
|
35
|
+
xml.send("idioma", transaction.order.language)
|
36
|
+
xml.send("taxa-embarque", transaction.order.shipping)
|
37
|
+
xml.send("soft-descriptor", transaction.order.soft_descriptor)
|
38
|
+
}
|
39
|
+
|
40
|
+
xml.send("forma-pagamento") {
|
41
|
+
xml.send("bandeira", transaction.payment_method.issuer)
|
42
|
+
xml.send("produto", transaction.payment_method.product)
|
43
|
+
xml.send("parcelas", transaction.payment_method.installments)
|
44
|
+
}
|
45
|
+
|
46
|
+
xml.send("url-retorno", transaction.return_url)
|
47
|
+
xml.send("autorizar", transaction.authorize)
|
48
|
+
xml.send("capturar", transaction.do_capture)
|
49
|
+
xml.send("campo-livre", transaction.free_field)
|
50
|
+
|
51
|
+
if transaction.bin != nil
|
52
|
+
xml.send("bin", transaction.bin)
|
53
|
+
end
|
54
|
+
|
55
|
+
if transaction.generate_token != nil
|
56
|
+
xml.send("gerar-token", transaction.generate_token)
|
57
|
+
end
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
return builder.to_xml
|
62
|
+
end
|
63
|
+
|
64
|
+
def unserialize(message, transaction)
|
65
|
+
return Cielo::WS15Message.unserialize_transaction(message, transaction)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cielo-ws15
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Cielo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: uuidtools
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.8'
|
69
|
+
description: Integração com o webservice 1.5 da Cielo
|
70
|
+
email:
|
71
|
+
- cieloecommerce@cielo.com.br
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- lib/cielo/ws15.rb
|
77
|
+
- lib/cielo/ws15/authentication.rb
|
78
|
+
- lib/cielo/ws15/authorization.rb
|
79
|
+
- lib/cielo/ws15/authorization_message.rb
|
80
|
+
- lib/cielo/ws15/cancellation.rb
|
81
|
+
- lib/cielo/ws15/cancellation_message.rb
|
82
|
+
- lib/cielo/ws15/capture.rb
|
83
|
+
- lib/cielo/ws15/capture_message.rb
|
84
|
+
- lib/cielo/ws15/holder.rb
|
85
|
+
- lib/cielo/ws15/merchant.rb
|
86
|
+
- lib/cielo/ws15/message.rb
|
87
|
+
- lib/cielo/ws15/order.rb
|
88
|
+
- lib/cielo/ws15/payment_method.rb
|
89
|
+
- lib/cielo/ws15/token.rb
|
90
|
+
- lib/cielo/ws15/token_message.rb
|
91
|
+
- lib/cielo/ws15/transaction.rb
|
92
|
+
- lib/cielo/ws15/transaction_message.rb
|
93
|
+
homepage: https://github.com/DeveloperCielo/Webservice-1.5-ruby
|
94
|
+
licenses:
|
95
|
+
- MIT
|
96
|
+
metadata: {}
|
97
|
+
post_install_message:
|
98
|
+
rdoc_options: []
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: 2.0.0
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 2.2.5
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: SDK Webservice 1.5
|
117
|
+
test_files: []
|
118
|
+
has_rdoc: yard
|