pagseguro-oficial 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -5
  3. data/CHANGELOG.md +0 -1
  4. data/README.md +6 -1
  5. data/docs/transparent_checkout.md +201 -0
  6. data/examples/boleto_transaction_request.rb +94 -0
  7. data/examples/create_session.rb +13 -0
  8. data/examples/credit_card_transaction_request.rb +122 -0
  9. data/examples/installment.rb +20 -9
  10. data/examples/online_debit_transaction.rb +98 -0
  11. data/examples/transaction_by_code.rb +62 -0
  12. data/examples/transaction_by_notification_code.rb +55 -51
  13. data/lib/pagseguro.rb +17 -1
  14. data/lib/pagseguro/bank.rb +8 -0
  15. data/lib/pagseguro/boleto_transaction_request.rb +8 -0
  16. data/lib/pagseguro/credit_card_transaction_request.rb +39 -0
  17. data/lib/pagseguro/document.rb +2 -2
  18. data/lib/pagseguro/errors.rb +11 -5
  19. data/lib/pagseguro/holder.rb +28 -0
  20. data/lib/pagseguro/installment.rb +11 -16
  21. data/lib/pagseguro/installment/collection.rb +25 -0
  22. data/lib/pagseguro/installment/request_serializer.rb +24 -0
  23. data/lib/pagseguro/installment/response.rb +29 -4
  24. data/lib/pagseguro/installment/{serializer.rb → response_serializer.rb} +1 -1
  25. data/lib/pagseguro/items.rb +3 -0
  26. data/lib/pagseguro/online_debit_transaction_request.rb +17 -0
  27. data/lib/pagseguro/payment_method.rb +1 -0
  28. data/lib/pagseguro/payment_releases.rb +3 -0
  29. data/lib/pagseguro/sender.rb +4 -0
  30. data/lib/pagseguro/session.rb +34 -0
  31. data/lib/pagseguro/session/response.rb +32 -0
  32. data/lib/pagseguro/session/response_serializer.rb +18 -0
  33. data/lib/pagseguro/transaction.rb +6 -3
  34. data/lib/pagseguro/transaction/response.rb +1 -1
  35. data/lib/pagseguro/transaction_installment.rb +11 -0
  36. data/lib/pagseguro/transaction_request.rb +143 -0
  37. data/lib/pagseguro/transaction_request/request_serializer.rb +148 -0
  38. data/lib/pagseguro/transaction_request/response.rb +32 -0
  39. data/lib/pagseguro/transaction_request/response_serializer.rb +117 -0
  40. data/lib/pagseguro/version.rb +1 -1
  41. data/spec/fixtures/session/success.xml +4 -0
  42. data/spec/fixtures/transaction_request/success.xml +58 -0
  43. data/spec/fixtures/transactions/search.xml +40 -0
  44. data/spec/pagseguro/bank_spec.rb +5 -0
  45. data/spec/pagseguro/boleto_transaction_request_spec.rb +9 -0
  46. data/spec/pagseguro/credit_card_transaction_request_spec.rb +36 -0
  47. data/spec/pagseguro/document_spec.rb +1 -1
  48. data/spec/pagseguro/errors_spec.rb +5 -2
  49. data/spec/pagseguro/features/create_session_spec.rb +52 -0
  50. data/spec/pagseguro/features/create_transaction_request_spec.rb +58 -0
  51. data/spec/pagseguro/holder_spec.rb +9 -0
  52. data/spec/pagseguro/installment/collection_spec.rb +43 -0
  53. data/spec/pagseguro/installment/request_serializer_spec.rb +16 -0
  54. data/spec/pagseguro/installment/{serializer_spec.rb → response_serializer_spec.rb} +1 -1
  55. data/spec/pagseguro/installment/response_spec.rb +52 -0
  56. data/spec/pagseguro/installment_spec.rb +22 -73
  57. data/spec/pagseguro/online_debit_transaction_request_spec.rb +18 -0
  58. data/spec/pagseguro/payment_method_spec.rb +1 -0
  59. data/spec/pagseguro/payment_request/response_spec.rb +0 -11
  60. data/spec/pagseguro/sender_spec.rb +1 -0
  61. data/spec/pagseguro/session/response_serializer_spec.rb +12 -0
  62. data/spec/pagseguro/session/response_spec.rb +52 -0
  63. data/spec/pagseguro/session_spec.rb +41 -0
  64. data/spec/pagseguro/transaction/search/search_abandoned_spec.rb +27 -0
  65. data/spec/pagseguro/transaction/search/search_by_date_spec.rb +26 -0
  66. data/spec/pagseguro/transaction/search/search_by_reference_spec.rb +26 -0
  67. data/spec/pagseguro/transaction/search_spec.rb +131 -0
  68. data/spec/pagseguro/transaction_installment_spec.rb +6 -0
  69. data/spec/pagseguro/transaction_request/request_serializer_spec.rb +213 -0
  70. data/spec/pagseguro/transaction_request/response_serializer_spec.rb +52 -0
  71. data/spec/pagseguro/transaction_request/response_spec.rb +60 -0
  72. data/spec/pagseguro/transaction_request_spec.rb +125 -0
  73. data/spec/support/helpers.rb +14 -0
  74. metadata +79 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9b1b2e0adeabe9b5ea466ca2c8ce25c9b89362f
4
- data.tar.gz: 40bea3b901045da2b170bfb1782ef3eb63a62815
3
+ metadata.gz: 195f2fa2ef3756e03ccdde0b6e0d6dd6f632edf3
4
+ data.tar.gz: 159f0ddf89ed6d5bd3e25e13d8c292456466be3d
5
5
  SHA512:
6
- metadata.gz: 499bf71c2fb90813ac226126976c7574ecbcf0d2e883fdae3ffe51c2c2f56553f76622a05a3941854c4dfcbb232d41db441b48aa0e759a098b7972ff6dae5211
7
- data.tar.gz: 2405a5be45744b83c9eecfccd9875f119081d307280d7ce7ad53c1f0b81f5d7a7212cb7229afd8677e3a30cf56f851941b5e2d4d040bf4da06632f617438e012
6
+ metadata.gz: 4e648a26a4dedcc676c19a3f2f9158db9672993529d18889af97bf3bcd9314a2428dbca8c8e3232b78b33d63d852791a5d55c2c5aae83d33e040035d9072cbac
7
+ data.tar.gz: c265b5e829a21f3ecf99e8fcc3efd6cb956f252bc5806c8e23fd8fa64474e5a1eb74600333641bd1d60285fee6201256896ed1036e2ae7f494d2bee93eadc597
data/.travis.yml CHANGED
@@ -1,12 +1,14 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.0
4
- - 2.1.5
3
+ - 2.2.2
4
+ - 2.1.6
5
5
  - 2.0.0
6
6
  - 1.9.3
7
7
  - jruby-19mode
8
-
9
8
  notifications:
10
9
  email:
11
- - lucas.renan@codeminer42.com
12
- - vitor.kusiaki@codeminer42.com
10
+ - lucas.renan@codeminer42.com
11
+ - vitor.kusiaki@codeminer42.com
12
+ - dmitry.rocha@codeminer42.com
13
+ slack:
14
+ secure: H7PR+eH28CRGZ7E71EQ2xAjkbLX53eXbJ8nadHgx6W2gggNSB8UPw6gqQg/UC0lCbK6ejQ0wE/pEPfLBnCJkqL8mfBr7ADTqZe2fM/YxXQktdOlldJtZaxUikDwOWZSXdOG+3ITdbv/MQW/wehi8UWzFC+XkhJCudOPW1n+9bqs=
data/CHANGELOG.md CHANGED
@@ -51,4 +51,3 @@
51
51
  - Criação de checkouts via API.
52
52
  - Tratamento de notificações de pagamento enviadas pelo PagSeguro.
53
53
  - Consulta de transações.
54
-
data/README.md CHANGED
@@ -26,7 +26,7 @@ A biblioteca PagSeguro em Ruby é um conjunto de classes de domínio que facilit
26
26
  - Adicione a biblioteca ao seu Gemfile.
27
27
 
28
28
  ```ruby
29
- gem "pagseguro-oficial", "~> 2.1.1"
29
+ gem "pagseguro-oficial", "~> 2.2.0"
30
30
  ```
31
31
 
32
32
  - Execute o comando `bundle install`.
@@ -294,6 +294,11 @@ PagSeguro.environment = "production" # production ou sandbox
294
294
  PagSeguro.encoding = "UTF-8" # UTF-8 ou ISO-8859-1
295
295
  ```
296
296
 
297
+ ## Checkout Transparente
298
+
299
+ Encontre toda a documentação necessária para o checkout transparente aqui:
300
+ https://github.com/pagseguro/ruby/blob/master/docs/transparent_checkout.md
301
+
297
302
  ## Dúvidas?
298
303
 
299
304
  Caso tenha dúvidas ou precise de suporte, acesse nosso [fórum].
@@ -0,0 +1,201 @@
1
+ # Checkout Transparente
2
+
3
+ Integrando seu sistema de comércio eletrônico com o Checkout Transparente você pode oferecer toda a segurança e comodidade do PagSeguro para os seus clientes no momento da compra, sem precisar sair do seu site ou e-commerce. Com ele é possível disponibilizar em seu site os meios de pagamento Cartão de Crédito, Débito Online e Boleto.
4
+
5
+ O Checkout Transparente está disponível para contas do tipo Vendedor e Empresarial. As seções seguintes indicarão como é possível integrar seu sistema de pagamentos ao Checkout Transparente do PagSeguro.
6
+
7
+ A API do Checkout Transparente oferece maior controle e flexibilidade sobre o processo de pagamento. Com essa integração o cliente fica no ambiente do seu e-commerce ou site durante todo o processo de compra, sem necessidade de cadastro ou páginas intermediárias de pagamento.
8
+ Para essa integração o PagSeguro criou alguns serviços que juntos possibilitam construir um checkout integrado, seguro e invisível para o comprador.
9
+
10
+ ## Integração
11
+
12
+ Para fazer a integração do Checkout Transparente, você precisa seguir os seguintes passos:
13
+
14
+ - Iniciar uma sessão de pagamento (Todos os meios de pagamento)
15
+ - Obter a bandeira do cartão de crédito (Apenas para Cartão de Crédito)
16
+ - Obter o token do cartão de crédito (Apenas para Cartão de Crédito)
17
+ - Verificar as opções de parcelamento (Apenas para Cartão de Crédito)
18
+ - Obter a identificação do comprador (Todos os meios de pagamento)
19
+ - Efetuar o pagamento utilizando a API do Checkout Transparente (Todos os meios de pagamento)
20
+
21
+ ### Iniciar Sessão de Pagamento
22
+
23
+ Para iniciar um Checkout Transparente é necessário ter um ID de sessão válido. Este serviço retorna o ID de sessão que será usado nas chamadas JavaScript.
24
+
25
+ ```ruby
26
+ session = PagSeguro::Session.create
27
+ @session_id = session.id
28
+ ```
29
+
30
+ ### Integrações no browser
31
+
32
+ A API do Checkout Transparente possui funções JavaScript para algumas operações que devem ser executadas no browser do cliente, funções que serão descritas mais adiante. Para essas funções uma API JavaScript deve ser importada no final da página dos meios de pagamento:
33
+
34
+ ```html
35
+ produção:
36
+ <script type="text/javascript" src="https://stc.pagseguro.uol.com.br/pagseguro/api/v2/checkout/pagseguro.directpayment.js"></script>
37
+
38
+ sandbox:
39
+ <script type="text/javascript" src="https://stc.sandbox.pagseguro.uol.com.br/pagseguro/api/v2/checkout/pagseguro.directpayment.js"></script>
40
+ ```
41
+
42
+ Esse JavaScript possui um objeto chamado `PagSeguroDirectPayment`, que é a interface de acesso aos métodos. Após importar o arquivo, deve ser executado o método `setSessionId` com o ID de sessão gerado anteriormente.
43
+
44
+ ```javascript
45
+ PagSeguroDirectPayment.setSessionId('<%= @session_id %>');
46
+ ```
47
+
48
+ Nas funções, os eventos de sucesso e erro ocorrem em chamadas callback no JavaScript que são passadas via JSON. Para isso, basta passar três funções JavaScript com nome 'success', 'error' e 'complete' via JSON na chamada dos métodos. A função 'complete' será chamada independente do retorno e as funções 'success' e 'error' serão chamadas dependendo do retorno, ou seja, se o retorno não possuir erro a função chamada será a 'success' e se possuir erro a função chamada será a 'error'.
49
+
50
+ ### Obter identificação do comprador
51
+
52
+ Para realizar o Checkout Transparente á necessário enviar um identificador do comprador gerado pelo JavaScript. Para isso você deve utilizar o método `getSenderHash`. Esse método não possui parâmetros e retorna um identificador. O identificador é obrigatório para todos os meios de pagamento.
53
+
54
+ ```javascript
55
+ PagSeguroDirectPayment.getSenderHash();
56
+ ```
57
+
58
+ **Atenção:** Esse método possui algumas dependências e por isso recomendamos que o `getSenderHash` não seja executado no onLoad da página. Você pode executá-lo, por exemplo, quando o cliente clicar no botão de conclusão de pagamento.
59
+
60
+ ### Obter bandeira do cartão de crédito
61
+
62
+ Esse processo é necessário somente para o meio de pagamento **cartão de crédito**. O método `getBrand` é utilizado para verificar qual a bandeira do cartão que está sendo digitado. Esse método recebe por parâmetro o BIN do cartão (seis primeiros dígitos do cartão) e retorna dados como qual a bandeira, o tamanho do CVV, se possui data de expiração e qual algoritmo de validação. A chamada desse serviço não é obrigatória.
63
+
64
+ Exemplo:
65
+
66
+ ```javascript
67
+ PagSeguroDirectPayment.getBrand({
68
+ cardBin: $("input#cartao").val(),
69
+ success: function (response) {
70
+ //bandeira encontrada
71
+ },
72
+ error: function (response) {
73
+ //tratamento do erro
74
+ },
75
+ complete: function (response) {
76
+ //tratamento comum para todas chamadas
77
+ }
78
+ });
79
+ ```
80
+
81
+ Retorno:
82
+
83
+ ```javascript
84
+ {
85
+ "brand": {
86
+ "name":"visa",
87
+ "bin":411111,
88
+ "cvvSize":3,
89
+ "expirable":true,
90
+ "validationAlgorithm":"LUHN"
91
+ }
92
+ }
93
+ ```
94
+
95
+ ### Obter token do cartão de crédito
96
+
97
+ Esse processo é necessário somente para o meio de pagamento **cartão de crédito**. O método `createCardToken` é utilizado para gerar o token que representará o cartão de crédito na chamada para a API do Checkout Transparente. Este método recebe os seguintes dados: número do cartão (obrigatório), CVV (opcional para alguns cartões), data de expiração (opcional para alguns cartões) e a bandeira (opcional).
98
+
99
+ Exemplo:
100
+
101
+ ```javascript
102
+ var params = {
103
+ cardNumber: $("input#cartao").val(),
104
+ cvv: $("input#cvv").val(),
105
+ expirationMonth: $("input#validadeMes").val(),
106
+ expirationYear: $("input#validadeAno").val(),
107
+ success: function (response) {
108
+ //token gerado, esse deve ser usado na chamada da API do Checkout Transparente
109
+ },
110
+ error: function (response) {
111
+ //tratamento do erro
112
+ },
113
+ complete: function (response) {
114
+ //tratamento comum para todas chamadas
115
+ }
116
+ }
117
+
118
+ // parâmetro opcional para qualquer chamada
119
+ if($("input#bandeira").val() !== '') {
120
+ params.brand = $("input#bandeira").val();
121
+ }
122
+
123
+ PagSeguroDirectPayment.createCardToken(params);
124
+ ```
125
+
126
+ Retorno:
127
+
128
+ ```javascript
129
+ {
130
+ "card":{
131
+ "token":"653fe9044cf149f9b7db562431cb130d"
132
+ }
133
+ }
134
+ ```
135
+
136
+ ### Obter opções de parcelamento
137
+
138
+ Esse processo é necessário apenas para o meio de pagamento **cartão de crédito**. Caso queira mostrar as opções de parcelamento para o comprador, você deverá utilizar o método `getInstallments`. Esse método recebe o valor a ser parcelado (obrigatório) e a bandeira que se deseja obter o parcelamento, retornando as configurações de cada parcela sendo: valor total do pagamento (que deve ser enviado junto na API do Checkout Transparente), valor e quantidade da parcela (que também devem ser informados na API do Checkout Transparente) e um indicador se aquela parcela tem juros ou não (caso o vendedor tenha configurado uma promoção no PagSeguro).
139
+
140
+ Se não for informado uma bandeira como parâmetro na chamada, o método retornará os dados para todas bandeiras aceitas pelo PagSeguro.
141
+
142
+ Exemplo:
143
+
144
+ ```javascript
145
+ PagSeguroDirectPayment.getInstallments({
146
+ amount: $("input#valorPagto").val(),
147
+ brand: $("input#bandeira").val(),
148
+ success: function (response) {
149
+ //opções de parcelamento disponíveis
150
+ },
151
+ error: function (response) {
152
+ //tratamento do erro
153
+ },
154
+ complete: function (response) {
155
+ //tratamento comum para todas chamadas
156
+ }
157
+ });
158
+ ```
159
+
160
+ Retorno:
161
+
162
+ ```javascript
163
+ {
164
+ "error":false,
165
+ "installments":{
166
+ "visa":
167
+ [
168
+ {
169
+ "quantity":1,
170
+ "totalAmount":16,
171
+ "installmentAmount":16,
172
+ "interestFree":true
173
+ },
174
+ {
175
+ "quantity":2,
176
+ "totalAmount":16.48,
177
+ "installmentAmount":8.24,
178
+ "interestFree":false
179
+ },
180
+ {
181
+ "quantity":3,
182
+ "totalAmount":16.64,
183
+ "installmentAmount":5.55,
184
+ "interestFree":false
185
+ }
186
+ ]
187
+ }
188
+ }
189
+ ```
190
+
191
+ ## API do Checkout Transparente
192
+
193
+ Este serviço envia os dados do comprador e do pagamento para realizar a cobrança.
194
+
195
+ A criação das transações podem ser feitas utilizando três métodos de pagamento:
196
+
197
+ [Boleto Bancário](https://github.com/pagseguro/ruby/blob/master/examples/boleto_transaction_request.rb)
198
+
199
+ [Cartão de Crédito](https://github.com/pagseguro/ruby/blob/master/examples/credit_card_transaction_request.rb)
200
+
201
+ [Transferência Eletrônica](https://github.com/pagseguro/ruby/blob/master/examples/online_debit_transaction.rb)
@@ -0,0 +1,94 @@
1
+ require_relative "boot"
2
+
3
+ payment = PagSeguro::BoletoTransactionRequest.new
4
+ payment.notification_url = "http://www.meusite.com.br/notification"
5
+ payment.payment_mode = "default"
6
+
7
+ payment.items << {
8
+ id: 1234,
9
+ description: %[Televisão 19" Sony],
10
+ amount: 459.50,
11
+ weight: 0
12
+ }
13
+
14
+ payment.reference = "REF1234-boleto"
15
+ payment.sender = {
16
+ hash: "7e215170790948f45e26175c2192c77e88c0e4c361a5860b99d2e9a97af982e6",
17
+ name: "Joao Comprador",
18
+ email: "joao@sandbox.pagseguro.com.br",
19
+ cpf: "75073461100",
20
+ phone: {
21
+ area_code: 11,
22
+ number: "12345678"
23
+ }
24
+ }
25
+
26
+ payment.shipping = {
27
+ type_name: "sedex",
28
+ address: {
29
+ street: "Av. Brig. Faria Lima",
30
+ number: "1384",
31
+ complement: "5º andar",
32
+ city: "São Paulo",
33
+ state: "SP",
34
+ district: "Jardim Paulistano",
35
+ postal_code: "01452002"
36
+ }
37
+ }
38
+
39
+
40
+ # Add extras params to request
41
+ # payment.extra_params << { paramName: 'paramValue' }
42
+ # payment.extra_params << { senderBirthDate: '07/05/1981' }
43
+
44
+ puts "=> REQUEST"
45
+ puts PagSeguro::TransactionRequest::RequestSerializer.new(payment).to_params
46
+ puts
47
+
48
+ payment.create
49
+
50
+ if payment.errors.any?
51
+ puts "=> ERRORS"
52
+ puts payment.errors.join("\n")
53
+ else
54
+ puts "=> Transaction"
55
+ puts " code: #{payment.code}"
56
+ puts " reference: #{payment.reference}"
57
+ puts " type: #{payment.type_id}"
58
+ puts " payment link: #{payment.payment_link}"
59
+ puts " status: #{payment.status}"
60
+ puts " payment method type: #{payment.payment_method}"
61
+ puts " created at: #{payment.created_at}"
62
+ puts " updated at: #{payment.updated_at}"
63
+ puts " gross amount: #{payment.gross_amount.to_f}"
64
+ puts " discount amount: #{payment.discount_amount.to_f}"
65
+ puts " net amount: #{payment.net_amount.to_f}"
66
+ puts " extra amount: #{payment.extra_amount.to_f}"
67
+ puts " installment count: #{payment.installment_count}"
68
+
69
+ puts " => Items"
70
+ puts " items count: #{payment.items.size}"
71
+ payment.items.each do |item|
72
+ puts " item id: #{item.id}"
73
+ puts " description: #{item.description}"
74
+ puts " quantity: #{item.quantity}"
75
+ puts " amount: #{item.amount.to_f}"
76
+ end
77
+
78
+ puts " => Sender"
79
+ puts " name: #{payment.sender.name}"
80
+ puts " email: #{payment.sender.email}"
81
+ puts " phone: (#{payment.sender.phone.area_code}) #{payment.sender.phone.number}"
82
+ puts " document: #{payment.sender.document}"
83
+
84
+ puts " => Shipping"
85
+ puts " street: #{payment.shipping.address.street}, #{payment.shipping.address.number}"
86
+ puts " complement: #{payment.shipping.address.complement}"
87
+ puts " postal code: #{payment.shipping.address.postal_code}"
88
+ puts " district: #{payment.shipping.address.district}"
89
+ puts " city: #{payment.shipping.address.city}"
90
+ puts " state: #{payment.shipping.address.state}"
91
+ puts " country: #{payment.shipping.address.country}"
92
+ puts " type: #{payment.shipping.type_name}"
93
+ puts " cost: #{payment.shipping.cost}"
94
+ end
@@ -0,0 +1,13 @@
1
+ require_relative "boot"
2
+
3
+ session = PagSeguro::Session.create
4
+
5
+ if session.errors.any?
6
+ puts "=> ERRORS"
7
+ puts session.errors.join("\n")
8
+ puts session.inspect
9
+ else
10
+ puts "=> SESSION"
11
+ puts session.id
12
+ puts session.inspect
13
+ end
@@ -0,0 +1,122 @@
1
+ require_relative "boot"
2
+
3
+ payment = PagSeguro::CreditCardTransactionRequest.new
4
+ payment.notification_url = "http://www.meusite.com.br/notification"
5
+ payment.payment_mode = "gateway"
6
+
7
+ payment.items << {
8
+ id: 1234,
9
+ description: %[Televisão 19" Sony],
10
+ amount: 459.50,
11
+ weight: 0
12
+ }
13
+
14
+ payment.reference = "REF1234-credit-card"
15
+ payment.sender = {
16
+ hash: "f8d95a0747cdddf277a111ec1bab1d68628e095243b7a56382ec01f260216313",
17
+ name: "Joao Comprador",
18
+ email: "joao@sandbox.pagseguro.com.br",
19
+ cpf: "75073461100",
20
+ phone: {
21
+ area_code: 11,
22
+ number: "12345678"
23
+ }
24
+ }
25
+
26
+ payment.shipping = {
27
+ type_name: "sedex",
28
+ address: {
29
+ street: "Av. Brig. Faria Lima",
30
+ number: "1384",
31
+ complement: "5º andar",
32
+ city: "São Paulo",
33
+ state: "SP",
34
+ district: "Jardim Paulistano",
35
+ postal_code: "01452002"
36
+ }
37
+ }
38
+
39
+ payment.billing_address = {
40
+ street: "Av. Brig. Faria Lima",
41
+ number: "1384",
42
+ complement: "5º andar",
43
+ city: "São Paulo",
44
+ state: "SP",
45
+ district: "Jardim Paulistano",
46
+ postal_code: "01452002"
47
+ }
48
+
49
+ payment.credit_card_token = "41c1f784216748ccae689fcd854aaca1"
50
+ payment.holder = {
51
+ name: "João Comprador",
52
+ birth_date: "07/05/1981",
53
+ document: {
54
+ type: "CPF",
55
+ value: "00000000191"
56
+ },
57
+ phone: {
58
+ area_code: 11,
59
+ number: "123456789"
60
+ }
61
+ }
62
+
63
+ payment.installment = {
64
+ value: 459.50,
65
+ quantity: 1
66
+ }
67
+
68
+ # Add extras params to request
69
+ # payment.extra_params << { paramName: 'paramValue' }
70
+ # payment.extra_params << { senderBirthDate: '07/05/1981' }
71
+
72
+ puts "=> REQUEST"
73
+ puts PagSeguro::TransactionRequest::RequestSerializer.new(payment).to_params
74
+ puts
75
+
76
+ payment.create
77
+
78
+ if payment.errors.any?
79
+ puts "=> ERRORS"
80
+ puts payment.errors.join("\n")
81
+ else
82
+ puts "=> Transaction"
83
+ puts " code: #{payment.code}"
84
+ puts " reference: #{payment.reference}"
85
+ puts " type: #{payment.type_id}"
86
+ puts " payment link: #{payment.payment_link}"
87
+ puts " status: #{payment.status}"
88
+ puts " payment method type: #{payment.payment_method}"
89
+ puts " created at: #{payment.created_at}"
90
+ puts " updated at: #{payment.updated_at}"
91
+ puts " gross amount: #{payment.gross_amount.to_f}"
92
+ puts " discount amount: #{payment.discount_amount.to_f}"
93
+ puts " net amount: #{payment.net_amount.to_f}"
94
+ puts " extra amount: #{payment.extra_amount.to_f}"
95
+ puts " installment count: #{payment.installment_count}"
96
+
97
+ puts " => Items"
98
+ puts " items count: #{payment.items.size}"
99
+ payment.items.each do |item|
100
+ puts " item id: #{item.id}"
101
+ puts " description: #{item.description}"
102
+ puts " quantity: #{item.quantity}"
103
+ puts " amount: #{item.amount.to_f}"
104
+ end
105
+
106
+ puts " => Sender"
107
+ puts " name: #{payment.sender.name}"
108
+ puts " email: #{payment.sender.email}"
109
+ puts " phone: (#{payment.sender.phone.area_code}) #{payment.sender.phone.number}"
110
+ puts " document: #{payment.sender.document}: #{payment.sender.document}"
111
+
112
+ puts " => Shipping"
113
+ puts " street: #{payment.shipping.address.street}, #{payment.shipping.address.number}"
114
+ puts " complement: #{payment.shipping.address.complement}"
115
+ puts " postal code: #{payment.shipping.address.postal_code}"
116
+ puts " district: #{payment.shipping.address.district}"
117
+ puts " city: #{payment.shipping.address.city}"
118
+ puts " state: #{payment.shipping.address.state}"
119
+ puts " country: #{payment.shipping.address.country}"
120
+ puts " type: #{payment.shipping.type_name}"
121
+ puts " cost: #{payment.shipping.cost}"
122
+ end