pag_seguro 0.1.6 → 0.1.7
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.
- data/.gitignore +1 -1
- data/README.md +40 -6
- data/lib/pag_seguro/checkout.xml.haml +1 -1
- data/lib/pag_seguro/notification.rb +108 -13
- data/lib/pag_seguro/payment.rb +2 -2
- data/lib/pag_seguro/payment_method.rb +72 -0
- data/lib/pag_seguro/shipping.rb +17 -1
- data/lib/pag_seguro/version.rb +1 -1
- data/lib/pag_seguro.rb +1 -0
- data/spec/fixtures/notification.xml +55 -0
- data/spec/pag_seguro/checkout_xml_spec.rb +1 -1
- data/spec/pag_seguro/integration/checkout_spec.rb +55 -49
- data/spec/pag_seguro/integration/config.yml +2 -1
- data/spec/pag_seguro/integration/notification_spec.rb +44 -0
- data/spec/pag_seguro/notification_spec.rb +123 -8
- data/spec/pag_seguro/payment_method_spec.rb +76 -0
- data/spec/pag_seguro/payment_spec.rb +19 -11
- data/spec/pag_seguro/shipping_spec.rb +17 -0
- data/spec/spec_helper.rb +5 -0
- metadata +16 -11
- data/spec/pag_seguro/notification_data_mock.rb +0 -64
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -18,16 +18,17 @@ Além disso, é necessário que tenha uma conta no pag seguro, e que habilite as
|
|
18
18
|
Em Integrações -> Pagamentos via API é necessário ativar a opção "Quero receber somente pagamentos via API."
|
19
19
|
Em Integrações -> Notificação de transações é necessário ativar a notificação de transações e definir a url de retorno
|
20
20
|
|
21
|
-
## Documentação
|
21
|
+
## Documentação
|
22
|
+
### Classes e Atributos
|
22
23
|
|
23
|
-
A nomenclatura dos atributos esperados pelo PagSeguro foram mantidas porém
|
24
|
+
A nomenclatura dos atributos e recursos (classes) esperados pelo PagSeguro foram mantidas porém usando o padrão de nomenclatura do ruby (ao invés do camelcase utilizado pelo pagseguro). Seguem os links das documentações dos atributos no pagseguro:
|
24
25
|
|
25
26
|
* [API de pagamentos](https://pagseguro.uol.com.br/v2/guia-de-integracao/api-de-pagamentos.html#v2-item-api-de-pagamentos-parametros-api)
|
26
27
|
* [API de notificação](https://pagseguro.uol.com.br/v2/guia-de-integracao/api-de-notificacoes.html)
|
27
28
|
|
28
|
-
|
29
|
+
### API de Pagamento
|
29
30
|
|
30
|
-
Segue um exemplo de uso
|
31
|
+
Segue um exemplo de uso para criação de um pagamento no PagSeguro:
|
31
32
|
|
32
33
|
payment = PagSeguro::Payment.new(EMAIL, TOKEN)
|
33
34
|
|
@@ -38,7 +39,40 @@ Segue um exemplo de uso desta gem (para mais exemplos, olhe o arquivo spec/integ
|
|
38
39
|
|
39
40
|
redirect_to_url = payment.checkout_payment_url
|
40
41
|
|
41
|
-
|
42
|
+
O método checkout_payment_url envia as informações de `payment` ao PagSeguro e em caso de sucesso gera a url do PagSeguro para qual o comprador deverá ser redirecionado para efetuar a compra.
|
43
|
+
|
44
|
+
Além dos items presentes no exemplo acima, é possível configurar `payment.sender` (com informações do usuário que está efetuando a compra), `payment.shipping` ( com as informações de endereço ), entre outras opções (para mais exemplos, olhe o arquivo spec/integration/checkout_spec.rb). Em especial, o attributo `payment.id` deve ser utilizado para referenciar um pagamento único no seu sistema.
|
45
|
+
|
46
|
+
Com exceção do atributo response (que é utilizado para armazenar a resposta enviada pelo PagSeguro), todos os outros atributos podem ser inicialidos em formato hash na inicialização do `PagSeguro::Payment`:
|
47
|
+
|
48
|
+
payment = PagSeguro::Payment.new(EMAIL, TOKEN, id: 2, items: [ PagSeguro::Item.new(id: 17, description: "A pipe", amount: "3.00", quantity: "89") ], extra_amount: '1.00' )
|
49
|
+
|
50
|
+
### API de Notificação
|
51
|
+
|
52
|
+
As notificações de alteração no status da compra no PagSeguro serão enviadas para a URL que tiver configurado na Notificação de transações (vide Instalação). Obs.: Até o momento o PagSeguro não permite configurar uma url dinâmica para envio das notificação ( e apenas permite uma url por conta ), então provavelemente será necessário que crie uma conta diferente no PagSeguro para cada sistema que desenvolver.
|
53
|
+
|
54
|
+
O código da notificação é enviado pelo PagSeguro através do parâmentro `notificationCode` em uma requisição do tipo POST ( lembre-se de adicionar uma rota post respectiva ). Segue um exemplo de uso da notificação em uma aplicação rails:
|
55
|
+
|
56
|
+
class PagSeguroNotificationController < ApplicationController
|
57
|
+
def parse_notification
|
58
|
+
EMAIL = "seu_email_cadastrado@nopagseguro.com.br"
|
59
|
+
TOKEN = "SEU_TOKEN_GERADO_NO_PAG_SEGURO"
|
60
|
+
NOTIFICATION_CODE = params(:notificationCode)
|
61
|
+
|
62
|
+
notification = PagSeguro::Notification.new(EMAIL, TOKEN, NOTIFICATION_CODE)
|
63
|
+
|
64
|
+
if notification.approved?
|
65
|
+
# Idealmente faça alguns testes de sanidade, como notification.gross_amount, notification.item_count, etc
|
66
|
+
# notification.id referencia o id do payment, caso tenha sido configurado
|
67
|
+
# transacation_id identifica o código da transação no pag seguro
|
68
|
+
Invoice.find(notification.id).approve!(notification.transaction_id)
|
69
|
+
end
|
70
|
+
|
71
|
+
if notification.cancelled? || notification.returned?
|
72
|
+
Invoice.find(notification.id).void!
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
42
76
|
|
43
77
|
## Validações
|
44
78
|
|
@@ -46,7 +80,7 @@ Os modelos utilizados nesta gem utilizam as validações do ActiveModel (semelha
|
|
46
80
|
|
47
81
|
## Testes
|
48
82
|
|
49
|
-
Esta gem possui testes extensivos utilizando Rspec. Para rodar os
|
83
|
+
Esta gem possui testes extensivos utilizando Rspec. Para rodar os testes, altere o arquivo spec/pag_seguro/integration/config.yml com seus dados no pag_seguro, entre na pasta onde a gem está instalada e execute:
|
50
84
|
|
51
85
|
bundle
|
52
86
|
guard
|
@@ -1,10 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'net/https'
|
2
3
|
|
3
4
|
module PagSeguro
|
4
5
|
class Notification
|
5
6
|
attr_accessor :data
|
6
|
-
|
7
|
-
|
7
|
+
|
8
|
+
# possible status values
|
9
|
+
PAGSEGURO_PROCESSING = 1
|
10
|
+
PAGSEGURO_IN_ANALYSIS = 2
|
11
|
+
PAGSEGURO_APPROVED = 3
|
12
|
+
PAGSEGURO_AVAILABLE = 4
|
13
|
+
PAGSEGURO_DISPUTED = 5
|
14
|
+
PAGSEGURO_RETURNED = 6
|
15
|
+
PAGSEGURO_CANCELLED = 7
|
16
|
+
|
17
|
+
# possible type values
|
18
|
+
PAGSEGURO_PAYMENT = 1
|
19
|
+
PAGSEGURO_TRANSFER = 2
|
20
|
+
PAGSEGURO_ADDITION_OF_FUNDS = 3
|
21
|
+
PAGSEGURO_CHARGE = 4
|
22
|
+
PAGSEGURO_BONUS = 5
|
8
23
|
|
9
24
|
def initialize(email = nil, token = nil, notification_code=nil)
|
10
25
|
raise "Needs a notification code" if notification_code.blank?
|
@@ -13,25 +28,45 @@ module PagSeguro
|
|
13
28
|
@data = Nokogiri::XML(notification_data(email, token, notification_code))
|
14
29
|
end
|
15
30
|
|
16
|
-
def
|
17
|
-
@data.css("
|
18
|
-
end
|
19
|
-
|
20
|
-
def approved?
|
21
|
-
PAGSEGURO_APPROVED == status
|
31
|
+
def id
|
32
|
+
@data.css("reference").first.content
|
22
33
|
end
|
23
34
|
|
24
|
-
def
|
25
|
-
|
35
|
+
def gross_amount
|
36
|
+
@data.css("grossAmount").first.content
|
26
37
|
end
|
27
|
-
|
28
|
-
def
|
29
|
-
@data.css("
|
38
|
+
|
39
|
+
def discount_amount
|
40
|
+
@data.css("discountAmount").first.content
|
41
|
+
end
|
42
|
+
|
43
|
+
def fee_amount
|
44
|
+
@data.css("feeAmount").first.content
|
45
|
+
end
|
46
|
+
|
47
|
+
def net_amount
|
48
|
+
@data.css("feeAmount").first.content
|
49
|
+
end
|
50
|
+
|
51
|
+
def extra_amount
|
52
|
+
@data.css("feeAmount").first.content
|
53
|
+
end
|
54
|
+
|
55
|
+
def installment_count
|
56
|
+
@data.css("itemCount").first.content.to_i
|
57
|
+
end
|
58
|
+
|
59
|
+
def item_count
|
60
|
+
@data.css("itemCount").first.content.to_i
|
30
61
|
end
|
31
62
|
|
32
63
|
def transaction_id
|
33
64
|
@data.css("code").first.content
|
34
65
|
end
|
66
|
+
|
67
|
+
def date
|
68
|
+
@data.css("date").first.content
|
69
|
+
end
|
35
70
|
|
36
71
|
def items
|
37
72
|
@data.css("items item").map do |i|
|
@@ -39,6 +74,10 @@ module PagSeguro
|
|
39
74
|
end
|
40
75
|
end
|
41
76
|
|
77
|
+
def payment_method
|
78
|
+
pm = PaymentMethod.new(code: parse_css("paymentMethod code"), type: parse_css("paymentMethod type"))
|
79
|
+
end
|
80
|
+
|
42
81
|
def sender
|
43
82
|
sn = Sender.new
|
44
83
|
sn.name = parse_css("sender name")
|
@@ -62,6 +101,62 @@ module PagSeguro
|
|
62
101
|
sh
|
63
102
|
end
|
64
103
|
|
104
|
+
def status
|
105
|
+
@data.css("status").first.content.to_i
|
106
|
+
end
|
107
|
+
|
108
|
+
def type
|
109
|
+
@data.css("type").first.content.to_i
|
110
|
+
end
|
111
|
+
|
112
|
+
def processing?
|
113
|
+
PAGSEGURO_PROCESSING == status
|
114
|
+
end
|
115
|
+
|
116
|
+
def in_analysis?
|
117
|
+
PAGSEGURO_IN_ANALYSIS == status
|
118
|
+
end
|
119
|
+
|
120
|
+
def approved?
|
121
|
+
PAGSEGURO_APPROVED == status
|
122
|
+
end
|
123
|
+
|
124
|
+
def available?
|
125
|
+
PAGSEGURO_AVAILABLE == status
|
126
|
+
end
|
127
|
+
|
128
|
+
def disputed?
|
129
|
+
PAGSEGURO_DISPUTED == status
|
130
|
+
end
|
131
|
+
|
132
|
+
def returned?
|
133
|
+
PAGSEGURO_RETURNED == status
|
134
|
+
end
|
135
|
+
|
136
|
+
def cancelled?
|
137
|
+
PAGSEGURO_CANCELLED == status
|
138
|
+
end
|
139
|
+
|
140
|
+
def payment?
|
141
|
+
PAGSEGURO_PAYMENT == type
|
142
|
+
end
|
143
|
+
|
144
|
+
def transfer?
|
145
|
+
PAGSEGURO_TRANSFER == type
|
146
|
+
end
|
147
|
+
|
148
|
+
def addition_of_funds?
|
149
|
+
PAGSEGURO_ADDITION_OF_FUNDS == type
|
150
|
+
end
|
151
|
+
|
152
|
+
def charge?
|
153
|
+
PAGSEGURO_CHARGE == type
|
154
|
+
end
|
155
|
+
|
156
|
+
def bonus?
|
157
|
+
PAGSEGURO_BONUS == type
|
158
|
+
end
|
159
|
+
|
65
160
|
private
|
66
161
|
def notification_data(email, token, notification_code)
|
67
162
|
RestClient.get("https://ws.pagseguro.uol.com.br/v2/transactions/notifications/#{notification_code}?email=#{email}&token=#{token}")
|
data/lib/pag_seguro/payment.rb
CHANGED
@@ -63,7 +63,7 @@ module PagSeguro
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def send_checkout
|
66
|
-
RestClient.post(checkout_url_with_params, checkout_xml, content_type: "application/xml"){|
|
66
|
+
RestClient.post(checkout_url_with_params, checkout_xml, content_type: "application/xml"){|resp, request, result| resp }
|
67
67
|
end
|
68
68
|
|
69
69
|
def parse_checkout_response
|
@@ -76,7 +76,7 @@ module PagSeguro
|
|
76
76
|
raise Errors::InvalidData.new(response.body)
|
77
77
|
else
|
78
78
|
raise Errors::UnknownError.new(response)
|
79
|
-
end
|
79
|
+
end
|
80
80
|
end
|
81
81
|
|
82
82
|
def parse_date
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module PagSeguro
|
3
|
+
class PaymentMethod
|
4
|
+
attr_accessor :code, :type
|
5
|
+
|
6
|
+
# Payment Method types
|
7
|
+
CREDIT_CARD = 1
|
8
|
+
BANK_BILL = 2
|
9
|
+
ONLINE_DEBIT = 3
|
10
|
+
PAG_SEGURO_BALANCE = 4
|
11
|
+
OI_PAGGO = 5
|
12
|
+
|
13
|
+
def initialize(options = {})
|
14
|
+
@code = options[:code]
|
15
|
+
@type = options[:type]
|
16
|
+
end
|
17
|
+
|
18
|
+
def code
|
19
|
+
@code.to_i
|
20
|
+
end
|
21
|
+
|
22
|
+
def type
|
23
|
+
@type.to_i
|
24
|
+
end
|
25
|
+
|
26
|
+
def credit_card?
|
27
|
+
CREDIT_CARD == type
|
28
|
+
end
|
29
|
+
|
30
|
+
def bank_bill?
|
31
|
+
BANK_BILL == type
|
32
|
+
end
|
33
|
+
|
34
|
+
def online_debit?
|
35
|
+
ONLINE_DEBIT == type
|
36
|
+
end
|
37
|
+
|
38
|
+
def pag_seguro_balance?
|
39
|
+
PAG_SEGURO_BALANCE == type
|
40
|
+
end
|
41
|
+
|
42
|
+
def oi_paggo?
|
43
|
+
OI_PAGGO == type
|
44
|
+
end
|
45
|
+
|
46
|
+
def name
|
47
|
+
case code
|
48
|
+
when 101 then "Cartão de crédito Visa"
|
49
|
+
when 102 then "Cartão de crédito MasterCard"
|
50
|
+
when 103 then "Cartão de crédito American Express"
|
51
|
+
when 104 then "Cartão de crédito Diners"
|
52
|
+
when 105 then "Cartão de crédito Hipercard"
|
53
|
+
when 106 then "Cartão de crédito Aura"
|
54
|
+
when 107 then "Cartão de crédito Elo"
|
55
|
+
when 108 then "Cartão de crédito PLENOCard"
|
56
|
+
when 109 then "Cartão de crédito PersonalCard"
|
57
|
+
when 201 then "Boleto Bradesco"
|
58
|
+
when 202 then "Boleto Santander"
|
59
|
+
when 301 then "Débito online Bradesco"
|
60
|
+
when 302 then "Débito online Itaú"
|
61
|
+
when 303 then "Débito online Unibanco"
|
62
|
+
when 304 then "Débito online Banco do Brasil"
|
63
|
+
when 305 then "Débito online Banco Real"
|
64
|
+
when 306 then "Débito online Banrisul"
|
65
|
+
when 307 then "Débito online HSBC"
|
66
|
+
when 401 then "Saldo PagSeguro"
|
67
|
+
when 501 then "Oi Paggo"
|
68
|
+
else "Desconhecido"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/pag_seguro/shipping.rb
CHANGED
@@ -4,7 +4,7 @@ module PagSeguro
|
|
4
4
|
|
5
5
|
PAC = 1
|
6
6
|
SEDEX = 2
|
7
|
-
|
7
|
+
UNIDENTIFIED = 3
|
8
8
|
|
9
9
|
validates_format_of :postal_code, with: /^\d{8}$/, message: " must be an integer with 8 digits", allow_blank: true
|
10
10
|
|
@@ -25,5 +25,21 @@ module PagSeguro
|
|
25
25
|
def postal_code
|
26
26
|
@postal_code if @postal_code.present? && @postal_code.to_s.size == 8
|
27
27
|
end
|
28
|
+
|
29
|
+
def type
|
30
|
+
@type.to_i
|
31
|
+
end
|
32
|
+
|
33
|
+
def pac?
|
34
|
+
PAC == type
|
35
|
+
end
|
36
|
+
|
37
|
+
def sedex?
|
38
|
+
SEDEX == type
|
39
|
+
end
|
40
|
+
|
41
|
+
def unidentified?
|
42
|
+
UNIDENTIFIED == type
|
43
|
+
end
|
28
44
|
end
|
29
45
|
end
|
data/lib/pag_seguro/version.rb
CHANGED
data/lib/pag_seguro.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
|
2
|
+
<transaction>
|
3
|
+
<date>2011-02-10T16:13:41.000-03:00</date>
|
4
|
+
<code>9E884542-81B3-4419-9A75-BCC6FB495EF1</code>
|
5
|
+
<reference>REF1234</reference>
|
6
|
+
<type>1</type>
|
7
|
+
<status>3</status>
|
8
|
+
<paymentMethod>
|
9
|
+
<type>1</type>
|
10
|
+
<code>101</code>
|
11
|
+
</paymentMethod>
|
12
|
+
<grossAmount>49900.00</grossAmount>
|
13
|
+
<discountAmount>0.00</discountAmount>
|
14
|
+
<feeAmount>0.00</feeAmount>
|
15
|
+
<netAmount>49900.00</netAmount>
|
16
|
+
<extraAmount>0.00</extraAmount>
|
17
|
+
<installmentCount>1</installmentCount>
|
18
|
+
<itemCount>2</itemCount>
|
19
|
+
<items>
|
20
|
+
<item>
|
21
|
+
<id>0001</id>
|
22
|
+
<description>Notebook Prata</description>
|
23
|
+
<quantity>1</quantity>
|
24
|
+
<amount>24300.00</amount>
|
25
|
+
</item>
|
26
|
+
<item>
|
27
|
+
<id>0002</id>
|
28
|
+
<description>Notebook Rosa</description>
|
29
|
+
<quantity>1</quantity>
|
30
|
+
<amount>25600.00</amount>
|
31
|
+
</item>
|
32
|
+
</items>
|
33
|
+
<sender>
|
34
|
+
<name>Jos� Comprador</name>
|
35
|
+
<email>comprador@uol.com.br</email>
|
36
|
+
<phone>
|
37
|
+
<areaCode>11</areaCode>
|
38
|
+
<number>56273440</number>
|
39
|
+
</phone>
|
40
|
+
</sender>
|
41
|
+
<shipping>
|
42
|
+
<address>
|
43
|
+
<street>Av. Brig. Faria Lima</street>
|
44
|
+
<number>1384</number>
|
45
|
+
<complement>5o andar</complement>
|
46
|
+
<district>Jardim Paulistano</district>
|
47
|
+
<postalCode>01452002</postalCode>
|
48
|
+
<city>Sao Paulo</city>
|
49
|
+
<state>SP</state>
|
50
|
+
<country>BRA</country>
|
51
|
+
</address>
|
52
|
+
<type>1</type>
|
53
|
+
<cost>21.50</cost>
|
54
|
+
</shipping>
|
55
|
+
</transaction>
|
@@ -102,7 +102,7 @@ describe PagSeguro::Payment do
|
|
102
102
|
|
103
103
|
it "should have shipping type" do
|
104
104
|
@xml_without_shipping_info.css("checkout shipping type").should be_empty
|
105
|
-
@xml.css("checkout shipping type").first.content.to_i.should ==
|
105
|
+
@xml.css("checkout shipping type").first.content.to_i.should == 2
|
106
106
|
end
|
107
107
|
|
108
108
|
it "should have state" do
|
@@ -1,10 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
config = YAML.load_file(File.dirname(__FILE__) + "/config.yml")
|
5
|
-
EMAIL = config["email"]
|
6
|
-
TOKEN = config["token"]
|
7
|
-
|
8
4
|
def create_valid_payment
|
9
5
|
payment = PagSeguro::Payment.new(EMAIL, TOKEN)
|
10
6
|
payment.items = [
|
@@ -18,63 +14,73 @@ def create_valid_payment
|
|
18
14
|
payment
|
19
15
|
end
|
20
16
|
|
21
|
-
describe
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
describe PagSeguro::Payment do
|
18
|
+
before do
|
19
|
+
if EMAIL == "seu_email_cadastrado@nopagseguro.com.br"
|
20
|
+
pending "You need to set your email for your PagSeguro account in spec/pag_seguro/integration/config.yml in order to run this spec"
|
21
|
+
elsif TOKEN == "SEU_TOKEN_GERADO_NO_PAG_SEGURO"
|
22
|
+
pending "You need to set your token for your PagSeguro account in spec/pag_seguro/integration/config.yml in order to run this spec"
|
23
|
+
end
|
25
24
|
end
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
describe "#code" do
|
27
|
+
it "should send a request to pagseguro" do
|
28
|
+
payment = create_valid_payment
|
29
|
+
payment.code.size.should == 32
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should be valid even without a sender and shipping information" do
|
33
|
+
payment = create_valid_payment
|
34
|
+
payment.sender = nil
|
35
|
+
payment.shipping = nil
|
36
|
+
payment.code.size.should == 32
|
37
|
+
end
|
33
38
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
39
|
+
it "should tell me when the email and token are invalid" do
|
40
|
+
payment = PagSeguro::Payment.new("not_a_user@not_an_email.com", "NOTATOKEN7F048A09A8AEFDD1E5A7B91")
|
41
|
+
lambda { payment.code }.should raise_error(PagSeguro::Errors::Unauthorized)
|
42
|
+
end
|
38
43
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
44
|
+
it "should list errors given by pagseguro" do
|
45
|
+
payment = PagSeguro::Payment.new(EMAIL, TOKEN)
|
46
|
+
lambda { payment.code }.should raise_error(PagSeguro::Errors::InvalidData)
|
47
|
+
end
|
43
48
|
|
44
|
-
|
45
|
-
|
46
|
-
|
49
|
+
it "should give a response code of 200 for the user pagseguro url" do
|
50
|
+
payment = create_valid_payment
|
51
|
+
RestClient.get(payment.checkout_payment_url).code.should == 200
|
52
|
+
end
|
47
53
|
end
|
48
|
-
end
|
49
54
|
|
50
|
-
describe "
|
51
|
-
|
52
|
-
|
53
|
-
|
55
|
+
describe "#date" do
|
56
|
+
it "should send a request to pagseguro" do
|
57
|
+
payment = create_valid_payment
|
58
|
+
payment.date.should match(/^\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}[-+]\d{2}:\d{2}$/)
|
59
|
+
end
|
54
60
|
end
|
55
|
-
end
|
56
61
|
|
57
|
-
describe "
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
62
|
+
describe "#parse_checkout_response" do
|
63
|
+
before do
|
64
|
+
@payment = create_valid_payment
|
65
|
+
@payment.stub(:parse_code)
|
66
|
+
@payment.stub(:parse_date)
|
67
|
+
@payment.stub(:parse_checkout_response){ "some response" }
|
68
|
+
end
|
64
69
|
|
65
|
-
|
66
|
-
|
70
|
+
it "should not make a request to pagseguro more than once" do
|
71
|
+
@payment.should_receive(:parse_checkout_response).exactly(1).times
|
67
72
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
73
|
+
@payment.code
|
74
|
+
@payment.code
|
75
|
+
@payment.date
|
76
|
+
end
|
72
77
|
|
73
|
-
|
74
|
-
|
78
|
+
it "should make more than one request to pag seguro if the payment is reset" do
|
79
|
+
@payment.should_receive(:parse_checkout_response).exactly(2).times
|
75
80
|
|
76
|
-
|
77
|
-
|
78
|
-
|
81
|
+
@payment.code
|
82
|
+
@payment.reset!
|
83
|
+
@payment.date
|
84
|
+
end
|
79
85
|
end
|
80
86
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe PagSeguro::Notification do
|
5
|
+
before :all do
|
6
|
+
if EMAIL == "seu_email_cadastrado@nopagseguro.com.br"
|
7
|
+
pending "You need to set your email for your PagSeguro account in spec/pag_seguro/integration/config.yml in order to run this spec"
|
8
|
+
elsif TOKEN == "SEU_TOKEN_GERADO_NO_PAG_SEGURO"
|
9
|
+
pending "You need to set your token for your PagSeguro account in spec/pag_seguro/integration/config.yml in order to run this spec"
|
10
|
+
elsif NOTIFICATION_CODE == "SEU_CODIGO_DE_NOTIFICACAO"
|
11
|
+
pending "You need to set your notification token for your PagSeguro account in spec/pag_seguro/integration/config.yml in order to run this spec"
|
12
|
+
else
|
13
|
+
@notification = PagSeguro::Notification.new(EMAIL, TOKEN, NOTIFICATION_CODE)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it { @notification.transaction_id.should be_present }
|
18
|
+
it { @notification.date.should be_present }
|
19
|
+
it { @notification.id.should be_present }
|
20
|
+
it { @notification.type.should be_present }
|
21
|
+
it { @notification.status.should be_present }
|
22
|
+
it { @notification.payment_method.type.should be_present }
|
23
|
+
it { @notification.payment_method.code.should be_present }
|
24
|
+
it { @notification.gross_amount.should be_present }
|
25
|
+
it { @notification.discount_amount.should be_present }
|
26
|
+
it { @notification.fee_amount.should be_present }
|
27
|
+
it { @notification.net_amount.should be_present }
|
28
|
+
it { @notification.extra_amount.should be_present }
|
29
|
+
it { @notification.installment_count.should be_present }
|
30
|
+
it { @notification.item_count.should be_present }
|
31
|
+
it { @notification.items.should be_present }
|
32
|
+
|
33
|
+
it "should have all required item attributes" do
|
34
|
+
@notification.items.each do |item|
|
35
|
+
item.id.should be_present
|
36
|
+
item.description.should be_present
|
37
|
+
item.amount.should be_present
|
38
|
+
item.quantity.should be_present
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it { @notification.sender.email.should be_present }
|
43
|
+
it { @notification.shipping.type.should be_present }
|
44
|
+
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
|
-
require_relative 'notification_data_mock'
|
5
4
|
|
6
5
|
describe PagSeguro::Notification do
|
7
6
|
before do
|
7
|
+
notification_xml_mock = File.open( File.expand_path( File.dirname(__FILE__) + '/../fixtures/notification.xml') )
|
8
|
+
PagSeguro::Notification.any_instance.stub(:notification_data){ notification_xml_mock }
|
8
9
|
@notification = PagSeguro::Notification.new("mail", "token", "not_code")
|
9
10
|
end
|
10
11
|
|
@@ -16,6 +17,42 @@ describe PagSeguro::Notification do
|
|
16
17
|
@notification.transaction_id.should == "9E884542-81B3-4419-9A75-BCC6FB495EF1"
|
17
18
|
end
|
18
19
|
|
20
|
+
it "should have a gross amount" do
|
21
|
+
@notification.gross_amount.should be_present
|
22
|
+
@notification.gross_amount.should match(/^\d+\.\d{2}$/)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a discount amount" do
|
26
|
+
@notification.discount_amount.should be_present
|
27
|
+
@notification.discount_amount.should match(/^\d+\.\d{2}$/)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should have a fee amount" do
|
31
|
+
@notification.fee_amount.should be_present
|
32
|
+
@notification.fee_amount.should match(/^\d+\.\d{2}$/)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should have a net amount" do
|
36
|
+
@notification.net_amount.should be_present
|
37
|
+
@notification.net_amount.should match(/^\d+\.\d{2}$/)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should have an extra amount" do
|
41
|
+
@notification.extra_amount.should be_present
|
42
|
+
@notification.extra_amount.should match(/^\d+\.\d{2}$/)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should have an installment count" do
|
46
|
+
@notification.installment_count.should be_present
|
47
|
+
@notification.installment_count.should be_an_integer
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should have an item count" do
|
51
|
+
@notification.item_count.should be_present
|
52
|
+
@notification.item_count.should be_an_integer
|
53
|
+
@notification.item_count.should == @notification.items.count
|
54
|
+
end
|
55
|
+
|
19
56
|
it "should be approved in this case" do
|
20
57
|
@notification.should be_approved
|
21
58
|
end
|
@@ -28,9 +65,14 @@ describe PagSeguro::Notification do
|
|
28
65
|
@sender.phone_number == "56273440"
|
29
66
|
end
|
30
67
|
|
68
|
+
it "should have a date" do
|
69
|
+
@notification.date.should be_present
|
70
|
+
@notification.date.should match(/^\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}[-+]\d{2}:\d{2}$/)
|
71
|
+
end
|
72
|
+
|
31
73
|
it "should have a shipping" do
|
32
74
|
@shipping = @notification.shipping
|
33
|
-
@shipping.type.should ==
|
75
|
+
@shipping.type.should == 1
|
34
76
|
@shipping.cost.should == "21.50"
|
35
77
|
@shipping.state.should == "SP"
|
36
78
|
@shipping.city.should == "Sao Paulo"
|
@@ -41,6 +83,12 @@ describe PagSeguro::Notification do
|
|
41
83
|
@shipping.complement.should == "5o andar"
|
42
84
|
end
|
43
85
|
|
86
|
+
it "should have a payment method" do
|
87
|
+
@payment_method = @notification.payment_method
|
88
|
+
@payment_method.code.should == 101
|
89
|
+
@payment_method.type.should == 1
|
90
|
+
end
|
91
|
+
|
44
92
|
it "should have items" do
|
45
93
|
@items = @notification.items
|
46
94
|
@items.size.should == 2
|
@@ -56,13 +104,80 @@ describe PagSeguro::Notification do
|
|
56
104
|
@items[1].amount.should == "25600.00"
|
57
105
|
end
|
58
106
|
|
59
|
-
|
60
|
-
|
61
|
-
|
107
|
+
describe "status" do
|
108
|
+
it "should have a status" do
|
109
|
+
@notification.status.should == 3
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should be processing if its status is 1" do
|
113
|
+
@notification.stub(:status){ 1 }
|
114
|
+
@notification.should be_processing
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should be in analysis if its status is 2" do
|
118
|
+
@notification.stub(:status){ 2 }
|
119
|
+
@notification.should be_in_analysis
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should be approved if its status is 3" do
|
123
|
+
@notification.stub(:status){ 3 }
|
124
|
+
@notification.should be_approved
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should be available if its status is 4" do
|
128
|
+
@notification.stub(:status){ 4 }
|
129
|
+
@notification.should be_available
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should be disputed if its status is 5" do
|
133
|
+
@notification.stub(:status){ 5 }
|
134
|
+
@notification.should be_disputed
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should be disputed if its status is 5" do
|
138
|
+
@notification.stub(:status){ 5 }
|
139
|
+
@notification.should be_disputed
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should be returned if its status is 6" do
|
143
|
+
@notification.stub(:status){ 6 }
|
144
|
+
@notification.should be_returned
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should be cancelled if its status is 7" do
|
148
|
+
@notification.stub(:status){ 7 }
|
149
|
+
@notification.should be_cancelled
|
150
|
+
end
|
62
151
|
end
|
63
152
|
|
64
|
-
|
65
|
-
|
66
|
-
|
153
|
+
describe "type" do
|
154
|
+
it "should have a type" do
|
155
|
+
@notification.type.should == 1
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should be payment if type is 1" do
|
159
|
+
@notification.stub(:type){ 1 }
|
160
|
+
@notification.should be_payment
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should be transfer if type is 2" do
|
164
|
+
@notification.stub(:type){ 2 }
|
165
|
+
@notification.should be_transfer
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should be addition of funds if type is 3" do
|
169
|
+
@notification.stub(:type){ 3 }
|
170
|
+
@notification.should be_addition_of_funds
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should be charge if type is 4" do
|
174
|
+
@notification.stub(:type){ 4 }
|
175
|
+
@notification.should be_charge
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should be bonus if type is 5" do
|
179
|
+
@notification.stub(:type){ 5 }
|
180
|
+
@notification.should be_bonus
|
181
|
+
end
|
67
182
|
end
|
68
183
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe PagSeguro::PaymentMethod do
|
5
|
+
context "instance" do
|
6
|
+
context "accessors" do
|
7
|
+
before { @payment_method = PagSeguro::PaymentMethod.new }
|
8
|
+
|
9
|
+
it { @payment_method.should have_attribute_accessor(:code) }
|
10
|
+
it { @payment_method.should have_attribute_accessor(:type) }
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should be able to initialize with all attributes" do
|
14
|
+
payment_method = PagSeguro::PaymentMethod.new(code: "101", type: "1")
|
15
|
+
payment_method.code.should == 101
|
16
|
+
payment_method.type.should == 1
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "types" do
|
20
|
+
before { @payment_method = PagSeguro::PaymentMethod.new }
|
21
|
+
|
22
|
+
it "should be credit card if type is 1" do
|
23
|
+
@payment_method.stub(:type){ 1 }
|
24
|
+
@payment_method.should be_credit_card
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should be bank bill if type is 2" do
|
28
|
+
@payment_method.stub(:type){ 2 }
|
29
|
+
@payment_method.should be_bank_bill
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should be online debit if type is 3" do
|
33
|
+
@payment_method.stub(:type){ 3 }
|
34
|
+
@payment_method.should be_online_debit
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should be PagSeguro balance if type is 4" do
|
38
|
+
@payment_method.stub(:type){ 4 }
|
39
|
+
@payment_method.should be_pag_seguro_balance
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should be oi paggo if type is 5" do
|
43
|
+
@payment_method.stub(:type){ 5 }
|
44
|
+
@payment_method.should be_oi_paggo
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "codes" do
|
49
|
+
def should_have_meaning_for_code(meaning, code)
|
50
|
+
PagSeguro::PaymentMethod.new(code: code).name.should == meaning
|
51
|
+
end
|
52
|
+
|
53
|
+
it { should_have_meaning_for_code("Cartão de crédito Visa", 101) }
|
54
|
+
it { should_have_meaning_for_code("Cartão de crédito MasterCard", 102) }
|
55
|
+
it { should_have_meaning_for_code("Cartão de crédito American Express", 103) }
|
56
|
+
it { should_have_meaning_for_code("Cartão de crédito Diners", 104) }
|
57
|
+
it { should_have_meaning_for_code("Cartão de crédito Hipercard", 105) }
|
58
|
+
it { should_have_meaning_for_code("Cartão de crédito Aura", 106) }
|
59
|
+
it { should_have_meaning_for_code("Cartão de crédito Elo", 107) }
|
60
|
+
it { should_have_meaning_for_code("Cartão de crédito PLENOCard", 108) }
|
61
|
+
it { should_have_meaning_for_code("Cartão de crédito PersonalCard", 109) }
|
62
|
+
it { should_have_meaning_for_code("Boleto Bradesco", 201) }
|
63
|
+
it { should_have_meaning_for_code("Boleto Santander", 202) }
|
64
|
+
it { should_have_meaning_for_code("Débito online Bradesco", 301) }
|
65
|
+
it { should_have_meaning_for_code("Débito online Itaú", 302) }
|
66
|
+
it { should_have_meaning_for_code("Débito online Unibanco", 303) }
|
67
|
+
it { should_have_meaning_for_code("Débito online Banco do Brasil", 304) }
|
68
|
+
it { should_have_meaning_for_code("Débito online Banco Real", 305) }
|
69
|
+
it { should_have_meaning_for_code("Débito online Banrisul", 306) }
|
70
|
+
it { should_have_meaning_for_code("Débito online HSBC", 307) }
|
71
|
+
it { should_have_meaning_for_code("Saldo PagSeguro", 401) }
|
72
|
+
it { should_have_meaning_for_code("Oi Paggo", 501) }
|
73
|
+
it { should_have_meaning_for_code("Desconhecido", 0) }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -107,29 +107,37 @@ describe PagSeguro::Payment do
|
|
107
107
|
describe "parse_checkout_response" do
|
108
108
|
before do
|
109
109
|
@payment = PagSeguro::Payment.new("mymail", "mytoken")
|
110
|
-
|
111
|
-
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should not raise errors if response code is 200" do
|
113
|
+
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :code){ 200 }
|
114
|
+
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :body){ "some body info" }
|
115
|
+
lambda { @payment.send(:parse_checkout_response) }.should_not raise_error
|
112
116
|
end
|
113
117
|
|
114
118
|
it "should raise PagSeguro::Errors::InvalidData if response code is 400" do
|
115
|
-
|
119
|
+
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :code){ 400 }
|
120
|
+
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :body){ "some error description" }
|
116
121
|
lambda { @payment.send(:parse_checkout_response) }.should raise_error(PagSeguro::Errors::InvalidData)
|
117
122
|
end
|
118
123
|
|
119
124
|
it "should raise PagSeguro::Errors::Unauthorized if response code is 400" do
|
120
|
-
|
125
|
+
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :code){ 401 }
|
121
126
|
lambda { @payment.send(:parse_checkout_response) }.should raise_error(PagSeguro::Errors::Unauthorized)
|
122
127
|
end
|
123
|
-
|
124
|
-
it "should not raise errors if response code is 200" do
|
125
|
-
@response.stub(code: 200, body: "some response body")
|
126
|
-
lambda { @payment.send(:parse_checkout_response) }.should_not raise_error
|
127
|
-
end
|
128
|
-
|
128
|
+
|
129
129
|
it "should raise PagSeguro::Errors::UnknownError if response code is not 200, 400 or 401" do
|
130
|
-
|
130
|
+
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :code){ 300 }
|
131
|
+
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :body){ "some response body" }
|
131
132
|
lambda { @payment.send(:parse_checkout_response) }.should raise_error(PagSeguro::Errors::UnknownError)
|
132
133
|
end
|
134
|
+
|
135
|
+
it "should be able to reset response" do
|
136
|
+
@payment.response = "something"
|
137
|
+
@payment.response.should be_present
|
138
|
+
@payment.reset!
|
139
|
+
@payment.response.should be_nil
|
140
|
+
end
|
133
141
|
end
|
134
142
|
|
135
143
|
end
|
@@ -23,6 +23,23 @@ describe PagSeguro::Shipping do
|
|
23
23
|
it { @shipping.should have_attribute_accessor(:street) }
|
24
24
|
it { @shipping.should have_attribute_accessor(:number) }
|
25
25
|
it { @shipping.should have_attribute_accessor(:complement) }
|
26
|
+
|
27
|
+
describe "types" do
|
28
|
+
it "should be pac if type is 1" do
|
29
|
+
@shipping.stub( :type ){ 1 }
|
30
|
+
@shipping.should be_pac
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should be sedex if type is 2" do
|
34
|
+
@shipping.stub( :type ){ 2 }
|
35
|
+
@shipping.should be_sedex
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should be unidentified if type is 3" do
|
39
|
+
@shipping.stub( :type ){ 3 }
|
40
|
+
@shipping.should be_unidentified
|
41
|
+
end
|
42
|
+
end
|
26
43
|
end
|
27
44
|
|
28
45
|
it "should be able to initialize all attributes" do
|
data/spec/spec_helper.rb
CHANGED
@@ -6,6 +6,11 @@ end
|
|
6
6
|
require 'yaml'
|
7
7
|
require File.dirname(__FILE__) + "/../lib/pag_seguro"
|
8
8
|
|
9
|
+
config = YAML.load_file(File.dirname(__FILE__) + "/pag_seguro/integration/config.yml")
|
10
|
+
EMAIL = config["email"]
|
11
|
+
TOKEN = config["token"]
|
12
|
+
NOTIFICATION_CODE = config["notification_code"]
|
13
|
+
|
9
14
|
class HaveAttributeAccessor
|
10
15
|
def initialize(attribute)
|
11
16
|
@attribute = attribute
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pag_seguro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152303520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152303520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: haml
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152302620 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152302620
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: nokogiri
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152302080 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152302080
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rest-client
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152300820 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 1.6.7
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152300820
|
58
58
|
description:
|
59
59
|
email:
|
60
60
|
- stefano.diem@gmail.com
|
@@ -76,19 +76,22 @@ files:
|
|
76
76
|
- lib/pag_seguro/item.rb
|
77
77
|
- lib/pag_seguro/notification.rb
|
78
78
|
- lib/pag_seguro/payment.rb
|
79
|
+
- lib/pag_seguro/payment_method.rb
|
79
80
|
- lib/pag_seguro/sender.rb
|
80
81
|
- lib/pag_seguro/shipping.rb
|
81
82
|
- lib/pag_seguro/version.rb
|
82
83
|
- pag_seguro.gemspec
|
84
|
+
- spec/fixtures/notification.xml
|
83
85
|
- spec/pag_seguro/checkout_xml_spec.rb
|
84
86
|
- spec/pag_seguro/errors/invalid_data_spec.rb
|
85
87
|
- spec/pag_seguro/errors/unauthorized_spec.rb
|
86
88
|
- spec/pag_seguro/errors/unknown_error_spec.rb
|
87
89
|
- spec/pag_seguro/integration/checkout_spec.rb
|
88
90
|
- spec/pag_seguro/integration/config.yml
|
91
|
+
- spec/pag_seguro/integration/notification_spec.rb
|
89
92
|
- spec/pag_seguro/item_spec.rb
|
90
|
-
- spec/pag_seguro/notification_data_mock.rb
|
91
93
|
- spec/pag_seguro/notification_spec.rb
|
94
|
+
- spec/pag_seguro/payment_method_spec.rb
|
92
95
|
- spec/pag_seguro/payment_spec.rb
|
93
96
|
- spec/pag_seguro/sender_spec.rb
|
94
97
|
- spec/pag_seguro/shipping_spec.rb
|
@@ -119,15 +122,17 @@ signing_key:
|
|
119
122
|
specification_version: 3
|
120
123
|
summary: A ruby gem to handle PagSeguro's API version 2
|
121
124
|
test_files:
|
125
|
+
- spec/fixtures/notification.xml
|
122
126
|
- spec/pag_seguro/checkout_xml_spec.rb
|
123
127
|
- spec/pag_seguro/errors/invalid_data_spec.rb
|
124
128
|
- spec/pag_seguro/errors/unauthorized_spec.rb
|
125
129
|
- spec/pag_seguro/errors/unknown_error_spec.rb
|
126
130
|
- spec/pag_seguro/integration/checkout_spec.rb
|
127
131
|
- spec/pag_seguro/integration/config.yml
|
132
|
+
- spec/pag_seguro/integration/notification_spec.rb
|
128
133
|
- spec/pag_seguro/item_spec.rb
|
129
|
-
- spec/pag_seguro/notification_data_mock.rb
|
130
134
|
- spec/pag_seguro/notification_spec.rb
|
135
|
+
- spec/pag_seguro/payment_method_spec.rb
|
131
136
|
- spec/pag_seguro/payment_spec.rb
|
132
137
|
- spec/pag_seguro/sender_spec.rb
|
133
138
|
- spec/pag_seguro/shipping_spec.rb
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module PagSeguro
|
3
|
-
class Notification
|
4
|
-
def notification_data(email, token, notification_code)
|
5
|
-
<<-XML
|
6
|
-
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
|
7
|
-
<transaction>
|
8
|
-
<date>2011-02-10T16:13:41.000-03:00</date>
|
9
|
-
<code>9E884542-81B3-4419-9A75-BCC6FB495EF1</code>
|
10
|
-
<reference>REF1234</reference>
|
11
|
-
<type>1</type>
|
12
|
-
<status>3</status>
|
13
|
-
<paymentMethod>
|
14
|
-
<type>1</type>
|
15
|
-
<code>101</code>
|
16
|
-
</paymentMethod>
|
17
|
-
<grossAmount>49900.00</grossAmount>
|
18
|
-
<discountAmount>0.00</discountAmount>
|
19
|
-
<feeAmount>0.00</feeAmount>
|
20
|
-
<netAmount>49900.00</netAmount>
|
21
|
-
<extraAmount>0.00</extraAmount>
|
22
|
-
<installmentCount>1</installmentCount>
|
23
|
-
<itemCount>2</itemCount>
|
24
|
-
<items>
|
25
|
-
<item>
|
26
|
-
<id>0001</id>
|
27
|
-
<description>Notebook Prata</description>
|
28
|
-
<quantity>1</quantity>
|
29
|
-
<amount>24300.00</amount>
|
30
|
-
</item>
|
31
|
-
<item>
|
32
|
-
<id>0002</id>
|
33
|
-
<description>Notebook Rosa</description>
|
34
|
-
<quantity>1</quantity>
|
35
|
-
<amount>25600.00</amount>
|
36
|
-
</item>
|
37
|
-
</items>
|
38
|
-
<sender>
|
39
|
-
<name>José Comprador</name>
|
40
|
-
<email>comprador@uol.com.br</email>
|
41
|
-
<phone>
|
42
|
-
<areaCode>11</areaCode>
|
43
|
-
<number>56273440</number>
|
44
|
-
</phone>
|
45
|
-
</sender>
|
46
|
-
<shipping>
|
47
|
-
<address>
|
48
|
-
<street>Av. Brig. Faria Lima</street>
|
49
|
-
<number>1384</number>
|
50
|
-
<complement>5o andar</complement>
|
51
|
-
<district>Jardim Paulistano</district>
|
52
|
-
<postalCode>01452002</postalCode>
|
53
|
-
<city>Sao Paulo</city>
|
54
|
-
<state>SP</state>
|
55
|
-
<country>BRA</country>
|
56
|
-
</address>
|
57
|
-
<type>1</type>
|
58
|
-
<cost>21.50</cost>
|
59
|
-
</shipping>
|
60
|
-
</transaction>
|
61
|
-
XML
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|