Problema com retorno do shipping
Closed this issue · 4 comments
Opa, estou tendo problemas com o retorno das notificações. Estou recebendo o erro:
PagSeguro::Shipping::InvalidShippingTypeError (invalid "" type id)
Vejo que o shipping type está vindo preenchido no XML, mas por algum motivo o parser não está puxando. Alguém tem alguma idéia?
abaixo segue o XML do retorno:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<transaction>
<date>2013-10-08T20:48:03.000-03:00</date>
<code>0B9A4CD5-8946-4591-B29B-51A3EAA8FCB5</code>
<reference>52535cc272ac26fa1f000001</reference>
<type>1</type>
<status>7</status>
<cancellationSource>INTERNAL</cancellationSource>
<lastEventDate>2013-10-08T20:49:13.000-03:00</lastEventDate>
<paymentMethod>
<type>1</type>
<code>101</code>
</paymentMethod>
<grossAmount>1.95</grossAmount>
<discountAmount>0.00</discountAmount>
<feeAmount>0.50</feeAmount>
<netAmount>1.45</netAmount>
<extraAmount>0.00</extraAmount>
<installmentCount>1</installmentCount>
<itemCount>1</itemCount>
<items>
<item>
<id>1</id>
<description>Produto teste</description>
<quantity>1</quantity>
<amount>1.95</amount>
</item>
</items>
<sender>
<name>Gastao B Brun</name>
<email>xxxxx@gmail.com</email>
<phone>
<areaCode>21</areaCode>
<number>xxxxxxxxx</number>
</phone>
</sender>
<shipping>
<address>
<street>RUA xxxxxxxxx</street>
<number>104</number>
<complement>xxxx</complement>
<district>xxxxxx</district>
<city>RIO DE JANEIRO</city>
<state>RJ</state>
<country>BRA</country>
<postalCode>xxxxxxx</postalCode>
</address>
<type>2</type>
<cost>0.00</cost>
</shipping>
</transaction>
Olá Gastão ... estou tendo o mesmo problema com o retorno da notificação. Você conseguiu contornar? No meu caso estou submetendo a transação com o tipo de frete 'not_specified'.
ps_request = PagSeguro::PaymentRequest.new
...
ps_request.shipping = {
type_name: 'not_specified',
...
}
Tem algum log disso? E em que situação isso ocorre? Como poderiamos reproduzir o problema? Ocorre para todas as notificações com shipping preenchido?
Na verdade o problema ocorre com o retorno da transação.
O parser que é realizado no XML de retorno não carrega corretamente as informações pois o método "load_from_response" (https://github.com/pagseguro/ruby/blob/master/lib/pagseguro/transaction.rb#L113) utiliza o atributo .data já com o parser realizado em "response" que é da classe "Aitch::Response".
Para contornar, realizei uma modificação na linha 115 (https://github.com/pagseguro/ruby/blob/master/lib/pagseguro/transaction.rb#L115)
... de:
load_from_xml response.data.css("transaction").first
... para:
load_from_xml Nokogiri::XML(response.body).css("transaction").first
Realizando o parser com o Nokogiri em "response.body" carrega corretamente o conteúdo, do contrário ocorre o erro reportado ao executar o método "PagSeguro::Transaction.find_by_code" a partir de uma notificação recebida.
Segue response.data:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<transaction>
<date>2014-01-24T14:47:28.000-02:00</date>
<code>9EB14CC4-681D-47FF-BDBE-2FBBEE563CFC</code>
<reference>R301250460</reference>
<recoveryCode>7df5a68dd88c50bb5bce889ef4dd73125ad1ecc64f15d01e</recoveryCode>
<type>1</type>
<status>1</status>
<lastEventDate>2014-01-24T14:48:17.000-02:00</lastEventDate>
<paymentMethod>
<type>7</type>
<code>701</code>
</paymentMethod>
<grossAmount>205.60</grossAmount>
<discountAmount>0.00</discountAmount>
<feeAmount>10.66</feeAmount>
<netAmount>194.94</netAmount>
<extraAmount>0.00</extraAmount>
<installmentCount>1</installmentCount>
<itemCount>1</itemCount>
<items>
<item>
<id>51</id>
<description>Luminária 815-1 BLACK</description>
<quantity>2</quantity>
<amount>70.00</amount>
</item>
</items>
<sender>
<name>Luciano Hoffmaister Ribeiro</name>
<email>xxxxxxxxx@gmail.com</email>
<phone>
<areaCode>51</areaCode>
<number>12345678</number>
</phone>
</sender>
<shipping>
<address><street>Rua xyz</street>number>123</address>
<complement>xyz</complement>
<district>xyz</district>
<city>Taquara</city>
<state>RS</state>
<country>BRA</country>
<postalCode>95600000</postalCode>
</shipping>
<type>3</type>
<cost>65.60</cost>
</transaction>
Nokogiri::XML(response.body):
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<transaction>
<date>2014-01-24T14:47:28.000-02:00</date>
<code>9EB14CC4-681D-47FF-BDBE-2FBBEE563CFC</code>
<reference>R301250460</reference>
<recoveryCode>7df5a68dd88c50bb5bce889ef4dd73125ad1ecc64f15d01e</recoveryCode>
<type>1</type>
<status>1</status>
<lastEventDate>2014-01-24T14:48:17.000-02:00</lastEventDate>
<paymentMethod>
<type>7</type>
<code>701</code>
</paymentMethod>
<grossAmount>205.60</grossAmount>
<discountAmount>0.00</discountAmount>
<feeAmount>10.66</feeAmount>
<netAmount>194.94</netAmount>
<extraAmount>0.00</extraAmount>
<installmentCount>1</installmentCount>
<itemCount>1</itemCount>
<items>
<item>
<id>51</id>
<description>Luminária 815-1 BLACK</description>
<quantity>2</quantity>
<amount>70.00</amount>
</item>
</items>
<sender>
<name>Luciano Hoffmaister Ribeiro</name>
<email>xxxxxxxxx@gmail.com</email>
<phone>
<areaCode>51</areaCode>
<number>12345678</number>
</phone>
</sender>
<shipping>
<address>
<street>Rua xyz</street>
<number>123</number>
<complement>xyz</complement>
<district>xyz</district>
<city>Taquara</city>
<state>RS</state>
<country>BRA</country>
<postalCode>95600000</postalCode>
</address>
<type>3</type>
<cost>65.60</cost>
</shipping>
</transaction>
Veja que os nodos 3 e 65.60, não pertencem a ...
Fico a disposição para maiores esclarecimentos.
Luciano
Correção aplicada. Obrigado a todos!