pag_seguro 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|