Página 1 de 1

Pagamento Digital - Retorno não atualiza o status da compra

Enviado: 05 Out 2011, 15:05
por rodrigosaling
Boa tarde!

Utilizo o OpenCart 1.4.9.6 e o Módulo 1.3.1 do Pagamento Digital. Aparentemente o primeiro retorno automático funciona, marcando a venda (Situação de venda) com "Aguardando Pagamento". Para realizar um segundo teste de retorno, entrei na conta do vendedor no Pagamento Digital e cancelei a transação.

Só que quando vejo os detalhes da transação (no Pagamento Digital) e clico no botão para fazer o retorno do novo status (Efetuar Retorno), ele dá comunicação OK mas no Opencart, a venda continua como "Aguardando Pagamento".
Na popup que abre ao fazer o retorno, as informações que aparecem são:

Endereço do post:
http://<nome_da_loja>.com.br/index.php?route=payment/pagamentodigital/callback&id_transacao=8542145&Free=

Resposta:
POST da Transação
Retorno Automático dos Dados

---

As questões são:
- o retorno "forçado" não faz o status da compra ser atualizado no OpenCart?
- é necessário alguma configuração com relação ao módulo para que ele funcione na segunda atualização?

Re: Pagamento Digital - Retorno não atualiza o status da com

Enviado: 05 Out 2011, 16:00
por rodrigosaling
Ok, o retorno acontece com o status da compra como Transação Cancelada e código 2. O problema é que na classe ModelCheckoutOrder, na function update, quando ele faz a consulta:
Código: Selecionar todos
"SELECT * FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "language l ON (o.language_id = l.language_id) WHERE o.order_id = '" . (int)$order_id . "' AND o.order_status_id > '0'"
ou
Código: Selecionar todos
SELECT * FROM `oc_order` o LEFT JOIN oc_language l ON (o.language_id = l.language_id) WHERE o.order_id = '8542145' AND o.order_status_id > '0'
A consulta não traz nenhum resultado e o sistema não prossegue com o UPDATE. Na verdade a order tem order_status_id ...

---

Por que no IF do "VERIFICADO" a order é carregada utilizando o ID da transação do Pagamento Digital? Minha compra tem ID 10 e não 8542145!

Hora de sair debugando loucamente.

Resolvido

Enviado: 05 Out 2011, 17:45
por rodrigosaling
OK, todo o problema acontecia porque no retorno automático do Pagamento Digital, não vinha o valor correto do order_id. Faltava passar lá no carrinho o id_pedido que vem nos retornos e daí o OpenCart encontra o registro no banco de dados.

EDIT:

Novo código no catalog/controller/payment/pagamentodigital.php:
Código: Selecionar todos
/* Dados padrão */
$this->data['order_id'] = $this->session->data['order_id']; //<<<<<<<<< nova linha
$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
$this->data['email_pagamentodigital'] = $this->config->get('pagamentodigital_email');
Novo código no catalog/controller/payment/pagamentodigital.php:
Código: Selecionar todos
<input type="hidden" name="tipo_frete" value="<?php echo $frete_metodo; ?>" />
<input type="hidden" name="id_pedido" value="<?php echo $order_id; ?>" /> <!-- nova linha --> 

Re: Pagamento Digital - Retorno não atualiza o status da com

Enviado: 06 Out 2011, 07:56
por Manoel Vidal
O grande problema com o order_id é que não pode existir um igual no Pagamento Digital se não dá erro, como estava recebendo muitas reclamações sobre isso resolvi temporariamente tirá-lo.