bcash 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4e129c6ce1a5cb39bf8b39d4c3c5e44e077544a7
4
- data.tar.gz: d62091576b48c5116fd886cc97f543a5fc97818f
3
+ metadata.gz: 801325959c92ee9e5d5795658eb4e0f7e20568ba
4
+ data.tar.gz: 3927d49e6662d8e7964583e9df49016e61be5a78
5
5
  SHA512:
6
- metadata.gz: db60be214c8a2216d8fe9c2281709fbc1f38bc78a3b882f9787939fe15f7b6cbb0c40cd0a17513a0cc82867c1894f6b9e4829218a9e6398c5e2747f25cf2447d
7
- data.tar.gz: 57c403e07d091817773311d4bb5793f4cc3abe6876771e00dc419fd5d109bbf6775a2c8ebb622d4f8e3c22be8fd6af781b5841c9d4ac83744807dd397985d8ce
6
+ metadata.gz: e52e56b8fc9aa8adf903244286d9a40ebffdee0c7222993fe2db2644af46789200b69b4bc956bcf20d3d0b1a014c2f2414fce56298ce8819f5216de334cbc705
7
+ data.tar.gz: b8388333f01ef83cbe1c14767ad59592dfa25bf193f5fcb91d44a8e112ab89f3aec780186e3716db6abf063ebf7c1fff1fed5e39ea041e5b36a7f1e0ea353091
data/README.md CHANGED
@@ -48,6 +48,42 @@ Você terá o formulário pronto para envio, você também pode alterar o input
48
48
 
49
49
  payment.html{tag_content('button', 'Pagar!')}
50
50
 
51
+ # Retorno automático
52
+
53
+ Se você utilizou a opção de url de retorno, você pode capturar o POST enviado pelo Bcash
54
+
55
+ notification = Bcash::Notification(params)
56
+ notification.id_transacao
57
+
58
+ Você pode visualizar todos os parametros na [página de desenvolvimento do bcash](https://www.bcash.com.br/desenvolvedores/integracao-retorno-automatico-loja-online.html).
59
+
60
+ ## Verificar transação
61
+
62
+ Você pode visualizar as transações, consultado o status do seu pedido, para isso obtenha a chave de acesso
63
+
64
+ Logue em sua conta no site do bcash -> Ferramentas -> Sua chave acesso
65
+
66
+ Com a chave de acesso podemos utilizar a classe transação de duas maneiras
67
+
68
+ transaction = Bcash::Transaction.new(email, token, id_transacao, id_pedido)
69
+ transaction.get
70
+
71
+ Ou
72
+
73
+ transaction = Bcash::Transaction.new
74
+ transaction.email = 'teste@teste.com.br'
75
+ transaction.token = '1234567890'
76
+ transaction.id_transaction = '123'
77
+ transaction.id_order = '1234'
78
+ transaction.get
79
+
80
+ Agora você tem todos os parametros para consulta
81
+
82
+ transaction.id_transacao
83
+ transaction.status
84
+
85
+ Você pode ver todos HTTP code e parametros de retorno no [manual de transação](https://www.bcash.com.br/site/manual/Bcash_Manual_Integracao_Consultar_Dados_Transacao.pdf).
86
+
51
87
  ## Instalação
52
88
 
53
89
  Adicione ao seu Gemfile:
@@ -58,12 +94,7 @@ E execute:
58
94
 
59
95
  $ bundle
60
96
 
61
- ## TODO
62
-
63
- * Criar classe para retorno automatico
64
- * Verificar status do pedido
65
-
66
- ## Contributing
97
+ ## Contribuindo
67
98
 
68
99
  1. Fork
69
100
  2. Cria seu branch (`git checkout -b my-new-feature`)
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "bundler", "~> 1.3"
28
28
  spec.add_development_dependency "rspec"
29
29
  spec.add_development_dependency "rake"
30
+ spec.add_development_dependency "fakeweb"
30
31
  end
@@ -2,12 +2,16 @@ require "active_model"
2
2
  require "haml"
3
3
  require "action_view"
4
4
  require "nokogiri"
5
+ require "rest-client"
5
6
 
6
7
  require "bcash/version"
7
8
  require "bcash/item"
8
9
  require "bcash/package"
9
10
  require "bcash/payment"
10
11
  require "bcash/notification"
12
+ require "bcash/transaction"
13
+
14
+ require "bcash/errors/empty_attributes.rb"
11
15
 
12
16
  module Bcash
13
17
  PAD = "PAD"
@@ -0,0 +1,11 @@
1
+ module Bcash
2
+ module Errors
3
+ class EmptyAttributes < Exception
4
+
5
+ def initialize
6
+ super("All attributes are required.")
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,71 @@
1
+ require 'base64'
2
+
3
+ module Bcash
4
+ class Transaction
5
+ attr_accessor :email, :token, :id_transaction, :id_order
6
+ attr_reader :items
7
+
8
+ def initialize(email = nil, token = nil, id_transaction = nil, id_order = nil)
9
+ @email = email
10
+ @token = token
11
+ @id_transaction = id_transaction
12
+ @id_order = id_order
13
+ end
14
+
15
+
16
+ def get
17
+ transaction = Nokogiri::XML(get_transaction_url)
18
+ self.instance_variables.each{|variable| raise Bcash::Errors::EmptyAttributes.new if self.instance_variable_get(variable).nil?}
19
+
20
+ create_transaction_attrs(transaction)
21
+ end
22
+
23
+ private
24
+
25
+ def get_transaction_url
26
+ url = 'https://www.pagamentodigital.com.br/transacao/consulta'
27
+
28
+ RestClient.post(url, params, headers).to_str
29
+ end
30
+
31
+ def create_transaction_attrs(transaction)
32
+ transaction.xpath("//transacao/*").each do |node|
33
+ next if node.name == "pedidos"
34
+ self.instance_variable_set "@#{node.name}", node.text
35
+
36
+ self.class.class_eval do
37
+ attr_reader node.name
38
+ end
39
+ end
40
+
41
+ @items = transaction.xpath("//pedidos/item").map do |item|
42
+ Item.new({
43
+ :id => item.css("codigo_produto").text,
44
+ :description => item.css("nome_produto").text,
45
+ :amount => item.css("qtde").text,
46
+ :price => item.css("valor_total").text
47
+ })
48
+ end
49
+
50
+ nil
51
+ end
52
+
53
+ def base64_bcash
54
+ Base64.strict_encode64("#{self.email}:#{self.token}")
55
+ end
56
+
57
+ def params
58
+ {
59
+ :id_transacao => @id_transaction,
60
+ :id_pedido => @id_pedido,
61
+ }
62
+ end
63
+
64
+ def headers
65
+ {
66
+ 'Authorization' => "Basic #{base64_bcash}"
67
+ }
68
+ end
69
+
70
+ end
71
+ end
@@ -1,3 +1,3 @@
1
1
  module Bcash
2
- VERSION = "1.0.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+ require 'fakeweb'
3
+
4
+ describe Bcash::Transaction do
5
+
6
+ subject{Bcash::Transaction.new}
7
+
8
+ context "its ok" do
9
+ before(:each) do
10
+ body = File.open(File.join(File.dirname(__FILE__), '..', 'response', 'transaction_200.xml')).read
11
+ FakeWeb.register_uri(:post, %r|pagamentodigital\.com\.br|, :body => body, :content_type => 'text/xml')
12
+ FakeWeb.allow_net_connect = false
13
+
14
+ subject.email = 'teste@test.com'
15
+ subject.token = '1234567890'
16
+ subject.id_transaction = '18621609'
17
+ subject.id_order = 'R415728787'
18
+ end
19
+
20
+ it "should nil in get" do
21
+ subject.get.should be_nil
22
+ end
23
+
24
+ it "should return attributes" do
25
+ subject.get
26
+
27
+ subject.id_transacao.should == '18621609'
28
+ subject.id_pedido.should == 'R415728787'
29
+ subject.valor_original.should == '0.01'
30
+ subject.items[0].id.should == "1070870205"
31
+ subject.items[0].description.should == "Ruby on Rails Bag"
32
+ subject.items[0].amount.should == "1"
33
+ subject.items[0].price.should == "0.01"
34
+ subject.items[1].id.should == "1070870206"
35
+ subject.items[1].description.should == "Ruby on Rails Bag"
36
+ subject.items[1].amount.should == "3"
37
+ subject.items[1].price.should == "10.0"
38
+ end
39
+ end
40
+
41
+ context "empty attributes" do
42
+ it "should return raise EmptyAttributes" do
43
+ expect {subject.get}.to raise_error(Bcash::Errors::EmptyAttributes)
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,59 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <transacao>
3
+ <id_transacao>18621609</id_transacao>
4
+ <data_transacao>21/04/2013</data_transacao>
5
+ <data_credito></data_credito>
6
+ <valor_original>0.01</valor_original>
7
+ <valor_loja>0.00</valor_loja>
8
+ <valor_total>0.00</valor_total>
9
+ <desconto_programado>0.00</desconto_programado>
10
+ <desconto>0.00</desconto>
11
+ <acrescimo>0.00</acrescimo>
12
+ <cod_meio_pagamento>0</cod_meio_pagamento>
13
+ <meio_pagamento>Não efetuado</meio_pagamento>
14
+ <parcelas>0</parcelas>
15
+ <cod_status>1</cod_status>
16
+ <status>Em andamento</status>
17
+ <data_alteracao_status>00/00/0000 00:00:00</data_alteracao_status>
18
+ <cliente_razao_social></cliente_razao_social>
19
+ <cliente_nome_fantasia></cliente_nome_fantasia>
20
+ <cliente_nome></cliente_nome>
21
+ <cliente_email>matheus@grupo-audax.com</cliente_email>
22
+ <cliente_rg></cliente_rg>
23
+ <cliente_data_emissao_rg></cliente_data_emissao_rg>
24
+ <cliente_orgao_emissor_rg></cliente_orgao_emissor_rg>
25
+ <cliente_estado_emissor_rg></cliente_estado_emissor_rg>
26
+ <cliente_cnpj></cliente_cnpj>
27
+ <cliente_cpf></cliente_cpf>
28
+ <cliente_sexo></cliente_sexo>
29
+ <cliente_data_nascimento></cliente_data_nascimento>
30
+ <cliente_telefone></cliente_telefone>
31
+ <cliente_endereco></cliente_endereco>
32
+ <cliente_complemento></cliente_complemento>
33
+ <cliente_bairro></cliente_bairro>
34
+ <cliente_cidade></cliente_cidade>
35
+ <cliente_estado></cliente_estado>
36
+ <cliente_cep></cliente_cep>
37
+ <frete>0.00</frete>
38
+ <tipo_frete></tipo_frete>
39
+ <id_pedido>R415728787</id_pedido>
40
+ <free></free>
41
+ <email_vendedor>matheuscaceres@gmail.com</email_vendedor>
42
+ <pedidos>
43
+ <item>
44
+ <codigo_produto>1070870205</codigo_produto>
45
+ <nome_produto>Ruby on Rails Bag</nome_produto>
46
+ <qtde>1</qtde>
47
+ <valor_total>0.01</valor_total>
48
+ <extra></extra>
49
+ </item>
50
+ <item>
51
+ <codigo_produto>1070870206</codigo_produto>
52
+ <nome_produto>Ruby on Rails Bag</nome_produto>
53
+ <qtde>3</qtde>
54
+ <valor_total>10.0</valor_total>
55
+ <extra></extra>
56
+ </item>
57
+ </pedidos>
58
+ </transacao>
59
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matheus Caceres
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-20 00:00:00.000000000 Z
11
+ date: 2013-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ! '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: fakeweb
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: Integration with BCash
126
140
  email:
127
141
  - matheuscaceres@gmail.com
@@ -138,16 +152,20 @@ files:
138
152
  - Rakefile
139
153
  - bcash.gemspec
140
154
  - lib/bcash.rb
155
+ - lib/bcash/errors/empty_attributes.rb
141
156
  - lib/bcash/form_bcash.html.haml
142
157
  - lib/bcash/item.rb
143
158
  - lib/bcash/notification.rb
144
159
  - lib/bcash/package.rb
145
160
  - lib/bcash/payment.rb
161
+ - lib/bcash/transaction.rb
146
162
  - lib/bcash/version.rb
147
163
  - spec/bcash/item_spec.rb
148
164
  - spec/bcash/notification_spec.rb
149
165
  - spec/bcash/package_spec.rb
150
166
  - spec/bcash/payment_spec.rb
167
+ - spec/bcash/transaction_spec.rb
168
+ - spec/response/transaction_200.xml
151
169
  - spec/spec_helper.rb
152
170
  homepage: ''
153
171
  licenses:
@@ -178,4 +196,6 @@ test_files:
178
196
  - spec/bcash/notification_spec.rb
179
197
  - spec/bcash/package_spec.rb
180
198
  - spec/bcash/payment_spec.rb
199
+ - spec/bcash/transaction_spec.rb
200
+ - spec/response/transaction_200.xml
181
201
  - spec/spec_helper.rb