Página 1 de 1

Módulo MoIP retornando comentários duplicados

Enviado: 19 Jan 2012, 08:46
por rgtobr
Prezados,

Alguém sabe como resolver esta questão? Estou com o módulo da MoIP em ambiente de produção, e as vezes ocorre o seguinte: quando o cliente efetua 1 pagamento, a MoIP retorna quase a todo instante o mesmo status (ver exemplo abaixo). Como fazer para não registrar um status em duplicidade?
Código: Selecionar todos
Data da Criação | Comentário | Situação | Cliente Notificado
19/01/2012 | --- | Pagamento Confirmado | Sim
19/01/2012 | O pagamento por Cartão de Crédito no valor de R$ 95,83 foi aprovado pelo MoIP. Seu pedido será enviado em breve. Gerado pelo MoIP | Pagamento Confirmado | Sim
19/01/2012 | O pagamento por Cartão de Crédito no valor de R$ 95,83 foi aprovado pelo MoIP. Seu pedido será enviado em breve. Gerado pelo MoIP | Pagamento Confirmado | Sim
19/01/2012 | O pagamento por Cartão de Crédito no valor de R$ 95,83 foi aprovado pelo MoIP. Seu pedido será enviado em breve. Gerado pelo MoIP | Pagamento Confirmado | Sim
19/01/2012 | O pagamento por Cartão de Crédito no valor de R$ 95,83 foi aprovado pelo MoIP. Seu pedido será enviado em breve. Gerado pelo MoIP | Pagamento Confirmado | Sim
19/01/2012 | Seu pedido foi encaminhado para a Logística. | Processando | Sim
19/01/2012 | O pagamento por Cartão de Crédito no valor de R$ 95,83 foi aprovado pelo MoIP. Seu pedido será enviado em breve. Gerado pelo MoIP | Pagamento Confirmado | Sim

Re: Módulo MoIP retornando comentários duplicados

Enviado: 21 Jan 2012, 13:39
por rgtobr
Suspeito do arquivo retorno_moip.php estar com um erro, no final consta:
Código: Selecionar todos
   if (isset($errors)){
     header("HTTP 200");
   } else {
     header("HTTP 500");
   }
Se eu substituir essas linhas pela linha abaixo resolve?
Código: Selecionar todos
     header("HTTP 200");
Não consegui identificar onde está a variável $errors, portanto, imagino que a resposta para a MoIP sempre é "HTTP 500". Com este ajuste imagino que a página deva retornar "HTTP 200" que fará com que a MoIP páre de ficar reenviando o status.

Estou certo? (não testei ainda, e este problema só ocorre em ambiente de produção)

Re: Módulo MoIP retornando comentários duplicados

Enviado: 21 Jan 2012, 21:24
por rgtobr
Realmente, tive de desligar a opção de "Receber notificação instantânea de transação" (em Ferramentas/Integração HTML/Notificação de Alteração de Status de Pagamento na MoIP) pois não funcionou. A MoIP não "entende" a resposta HTTP 200 informada acima e envia constantemente a notificação de atualização de status (repetidas).

Sugestões para a solução?

Re: Módulo MoIP retornando comentários duplicados

Enviado: 24 Jan 2012, 11:00
por rgtobr
Desligar a opção "Receber notificação instantânea da transação" não funcionou. Mas acho que agora resolvi.

Alternativa 1

No arquivo retorno_moip.php:

1) removí o código:
Código: Selecionar todos
if (isset($errors) ){
header("HTTP 200");
} else {
header("HTTP 500");
}
... pois este código não parece fazer muito sentido no contexto.

2) adicinei o código:
Código: Selecionar todos
header('HTTP/1.1 200 OK');
No sandbox, só agora (antes o status era 500), a resposta ao simular notificação é HTTP 200:
RESPOSTA OK (NASP processado corretamente)
=> status: 200
=> corpo: 
Portanto, segundo a documentação da MoIP, se a resposta for HTTP 200 a mesma notificação não será feita novamente.

Vou ficar de olho esta semana e ver o que acontece. Qualquer coisa eu adiciono mais um status aqui.

- - - - - - - - - -

Alternativa 2 (partindo pra apelação)

Uma outra alternativa que eu estava estudando é modificar o arquivo catalog/model/checkout/order.tpl, exatamente na função UPDATE e fazer o seguinte: eu adicionaria os seguinte código (abaixo) antes da instrução if ($order_info && $order_info['order_status_id']) {:
Código: Selecionar todos
		$verifica_duplicidade = $this->db->query("select order_status_id from order_history where order_id = '" . (int)$order_id . "' and order_status_id = '" . (int)$order_status_id . "' and notify = '" . (int)$notify . "' and comment = '".$this->db->escape($comment)."'");
		if ($verifica_duplicidade->num_rows > 0) {
			// não executa update pois já existe history idêntico registrado
			
		} else {

...

		}
... isso forçaria o sistema a não inserir um status (idêntico) repetido. (isso é apelação mas eu já estava pronto pra colocar isso em produção antes que algum cliente abrisse algum processo devido algum tipo de perturbação contra a empresa)

Re: Módulo MoIP retornando comentários duplicados

Enviado: 24 Jan 2012, 11:58
por Renato Frota
rgtobr escreveu:Desligar a opção "Receber notificação instantânea da transação" não funcionou. Mas acho que agora resolvi.

Alternativa 1

No arquivo retorno_moip.php:

1) removí o código:
Código: Selecionar todos
if (isset($errors) ){
header("HTTP 200");
} else {
header("HTTP 500");
}
... pois este código não parece fazer muito sentido no contexto.

2) adicinei o código:
Código: Selecionar todos
header('HTTP/1.1 200 OK');
No sandbox, só agora (antes o status era 500), a resposta ao simular notificação é HTTP 200:
RESPOSTA OK (NASP processado corretamente)
=> status: 200
=> corpo: 
Portanto, segundo a documentação da MoIP, se a resposta for HTTP 200 a mesma notificação não será feita novamente.

Vou ficar de olho esta semana e ver o que acontece. Qualquer coisa eu adiciono mais um status aqui.

- - - - - - - - - -

Alternativa 2 (partindo pra apelação)

Uma outra alternativa que eu estava estudando é modificar o arquivo catalog/model/checkout/order.tpl, exatamente na função UPDATE e fazer o seguinte: eu adicionaria os seguinte código (abaixo) antes da instrução if ($order_info && $order_info['order_status_id']) {:
Código: Selecionar todos
		$verifica_duplicidade = $this->db->query("select order_status_id from order_history where order_id = '" . (int)$order_id . "' and order_status_id = '" . (int)$order_status_id . "' and notify = '" . (int)$notify . "' and comment = '".$this->db->escape($comment)."'");
		if ($verifica_duplicidade->num_rows > 0) {
			// não executa update pois já existe history idêntico registrado
			
		} else {

...

		}
... isso forçaria o sistema a não inserir um status (idêntico) repetido. (isso é apelação mas eu já estava pronto pra colocar isso em produção antes que algum cliente abrisse algum processo devido algum tipo de perturbação contra a empresa)

O primeiro está correto. Não parte pra apelação, não...

Só um detalhe: o corpo está exibindo aqueles caracteres porque o arquivo deve estar salvo em ANSI ou UTF-8 com BOM. Salva ele em UTF-8 SEM BOM no notepad++

Re: Módulo MoIP retornando comentários duplicados

Enviado: 24 Jan 2012, 12:19
por rgtobr
Valeu pela dica!

Re: Módulo MoIP retornando comentários duplicados

Enviado: 24 Jan 2012, 13:37
por rgtobr
Aliás, sobre o "detalhe", estou usando o Dreamweaver CS5, no "Save As" aparece a opção "Unicode Normalization Form" com as seguintes opções:

- None
- C (Canonical Decomposition, followed by Canonical Composition)
- D (Canonical Decomposition)
- KC (Compatibility Decomposition, followed by Canonical Composition)
- KD (Compatibility Decomposition)

E está como padrão aqui o item "C (Canonical Decomposition, followed by Canonical Composition)" e a opção logo abaixo está desmarcada : "Include Unicode Signature (BOM)".

Sabe qual é o certo a usar? "None"?

Re: Módulo MoIP retornando comentários duplicados

Enviado: 24 Jan 2012, 14:04
por Renato Frota
A questão aí é o “none“ que já está correto. acontece que não foi seu dreamweaver que criou o arquivo, você já baixou ele assim no módulo. renomeie o arquivo, copie o conteúdo e salve num novo arquivo em branco criado pelo dream