• Boa tarde,

    Conforme informado por um nosso cliente via suporte directo convosco, há situa??es em que o PayPal enviar duas notifica??es de pagamento imediatas pode acontecer que sejam criados dois documentos, porque quando acabam de criar o primeiro já come?aram a fazer o segundo.

    O que eu sugiro é que logo no início do método createDocument da class Documents gravem na encomenda um meta temporário de bloqueio e gravem o mesmo e ainda antes disso validem se esse meta existe e só continuam caso n?o exista. No final removem o meta temporário.

    Isto deverá resolver o problema do método isReferencedInDatabase só devolver true depois de ter sido criado o documento (o que leva tempo por causa das chamadas à API) e portanto corrermos o risco de obter duplicados.

    Seria algo tipo:

    public function createDocument()
    {
    	try {
    
    		if ( ! $this->order->get_meta( '_moloni_locked' ) ) {
    
    			$this->order->add_meta_data( '_moloni_locked', 1 );
    			$this->order->save();
    
    			//the rest of the function
    
    			$this->order->delete_meta_data( '_moloni_locked' );
    			$this->order->save();
    
    		} else {
    			//It's locked, don't issue
    		}
    
    	} catch (Error $error) {
    		$this->document_id = 0;
    		$this->error = $error;
    	}
    
    	return $this;
    }

    A ideia é que seja feito e gravado na base de dados o mais cedo possível, para que a próxima vez que o método createDocument corra já lá esteja.

Viewing 5 replies - 1 through 5 (of 5 total)
  • Plugin Author Moloni

    (@molonidevteam)

    Boa tarde,

    Iremos em breve come?ar a preparar uma atualiza??o para ter em conta essa situa??o.
    No entanto, dependendo de como s?o feitos os pedidos e da própria estrutura da base de dados, pode acontecer que os pedidos de cria??o de documentos passem na mesma.

    Ainda assim a solu??o deverá diminuir o número de ocorrências.

    Thread Starter Marco Almeida | Webdados

    (@webdados)

    Em alternativa, em vez de escrever no meta da encomenda, que pode demorar mais tempo na escrita/leitura, podem ter uma entrada na tabela de options com um array de todas as encomendas “locked” e usarem esse array para ir guardando e removendo locks.

    Thread Starter Marco Almeida | Webdados

    (@webdados)

    O problema é quando o cliente tem activos IPN e PDT no PayPal.

    Inactivar o PDT também resolve, mas pode ter como consequência que quando o visitante chega à página Thank You o pagamento ainda n?o tenha sido notificado por IPN, mas essa inactiva??o depende do cliente e n?o de vocês, pelo que seria interessante fazerem algo para tentar evitar. é uma quest?o de testarem qual dos métodos (meta na encomenda ou array no wp_options) é mais robusto e rápido.

    Plugin Author Moloni

    (@molonidevteam)

    Bom dia,

    Já procedemos a algumas altera??es na vers?o 3.0.53 do plugin que dever?o ter resolvido o problema reportado.

    Pode por favor confirmar?

    Thread Starter Marco Almeida | Webdados

    (@webdados)

    Bom dia,

    O cliente n?o se voltou a queixar, portanto só posso assumir que está tudo ok.

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘Documentos duplicados “Em processamento” + PayPal’ is closed to new replies.