heavenstudio / pag_seguro

A Ruby Client to deal with PagSeguro's API
http://heavenstudio.com.br
71 stars 38 forks source link

Exception ao obter o id da Transaction #9

Closed josuetex closed 11 years ago

josuetex commented 11 years ago

Ao tentar tratar a notifcação do pagseguro está ocorrendo o seguinte erro:

A NoMethodError occurred in paginas#notificacao:

undefined method content' for nil:NilClass vendor/bundle/ruby/1.9.1/gems/pag_seguro-0.4.1/lib/pag_seguro/transaction.rb:43:inid'

Observei que o método id da class transaction está capturando a tag "reference" conforme abaixo:

def id @data.css("reference").first.content end

Não seria a tag "id" do xml de retorno ?

Tenho uma biblioteca que usava para tratar as notificações eeu capturava a tag "id" do retorno. Mudei para a sua pois está mais completa.

Desde já agradeço;

Josué Teixeira

teonimesic commented 11 years ago

Não, o pagsrguro armazena o id que vc passa na hora de criar um pagamento através da tag reference. De uma olhada na documentação da gen, vc provavelmente não está enviando um id na hora de criar o pagamento, e aí essa tag de refererence não é passada no retorno

Em 02/05/2013, às 17:31, Josue Teixeira notifications@github.com escreveu:

Ao tentar tratar a notifcação do pagseguro está ocorrendo o seguinte erro:

A NoMethodError occurred in paginas#notificacao:

undefined method content' for nil:NilClass vendor/bundle/ruby/1.9.1/gems/pag_seguro-0.4.1/lib/pag_seguro/transaction.rb:43:inid'

Observei que o método id da class transaction está capturando a tag "reference" conforme abaixo:

def id @data.css("reference").first.content end

Não seria a tag "id" do xml de retorno ?

Tenho uma biblioteca que usava para tratar as notificações eeu capturava a tag "id" do retorno. Mudei para a sua pois está mais completa.

Desde já agradeço;

Josué Teixeira

— Reply to this email directly or view it on GitHub.

teonimesic commented 11 years ago

Apenas para esclarecer, existem dois métodos distintos: id e transaction_id. O primeiro, é o mesmo id que você usou na hora de instanciar um novo pagamento (e.g.: payment = PagSeguro::Payment.new(email, token, id: invoice.id)). O segundo, é o id da transação que é gerado automaticamente pelo pagseguro.

No caso, o id só existe se você tiver passado um ao instanciar o pagamento, enquanto que o transaction_id sempre existe. Acredito que o "id" que você capturava com a outra gem se refere a esse transaction_id. O id server para que você tenha uma forma mais rápida de referenciar um pagamento ou elemento no seu banco de dados.

josuetex commented 11 years ago

Descuplas.. Como eu havia dito antes, eu estava usando minha biblioteca. Eu estava gerando a cobrança através da minha biblioteca e recebendo a notificação através dessa gem pag_seguro.

Com a minha biblioteca, eu resgatava o id do item na notificação.

Obrigado pelos esclarecimentos.

Valeu!