Pergunta

Estou tendo problemas com a transação de pagamento com cartão de crédito e tenho certeza de que o quote_id é a causa disso.O problema é que não sei como incrementar manualmente o quote_id para saber se estou certo ou errado.

Foi útil?

Solução 2

Em primeiro lugar, o problema que eu estava tendo era obter a resposta "ABORTED", o motivo era que um campo sempre era enviado com o mesmo valor, esse valor era orderid (que na verdade é o quote_id porque o id do pedido não foi criado naquele ponto), o que é proibido porque é um campo único em seu banco de dados.Magento nunca cria uma nova cotação para um usuário até que sua transação atual seja concluída (ou quando outra sessão for criada, ainda não tenho certeza), o quote_id é enviado (como um orderid) com o mesmo valor para um usuário, mais e novamente para que cada transação seja abortada.

A solução:basta desativar a cotação atual quando o gateway do cartão de crédito não responder com a string "APROVADO", em sales_flat_quote basta definir is_active para 0, então o Magento daria ao usuário uma cotação totalmente nova.O problema é que tudo que está no carrinho seria perdido para o usuário (o registro ainda existe, mas o usuário não teria mais acesso a ele), então o Magento teria que clonar a cotação, depois desativar o atual e salvar ambos, a cotação clonada será agora a cotação atual, mas com um valor diferente quote_id.

// get the current quote
$current_quote = Mage::getModel('sales/quote')->load(23);

// create a new one
$cloned_quote = Mage::getModel('sales/quote');

// copy the content of the current one into the new one
$cloned_quote->merge($current_quote);

// deactive the current quote
$current_quote->setIsActive(false);

// save the cloned quote
$cloned_quote->collectTotals()->save();

// and save the changes of the current quote
$current_quote->save();

// now the current save is inactive 
// and the cloned one is the "new" current quote

a solução foi tirada daqui Como copiar uma cotação (somente itens do carrinho) para outra cotação (somente itens)

Agora o passo final (ou talvez o primeiro) é incrementar o quote_id manualmente, por quê?o gateway do cartão de crédito já possui muitos IDs de pedidos registrados neste e-shop, 149 para ser mais preciso (usando Magento 1.7, aliás).Migrei quase tudo para Magento 1.9, mas com um banco de dados totalmente novo, as cotações foram zeradas, então a primeira cotação gerada será rejeitada pelo gateway cc.Esta é a solução:

ALTER TABLE sales_flat_quote AUTO_INCREMENT = 149;

Então, basicamente isso resume a solução para o meu problema.Espero que isso seja útil para outra pessoa.

Outras dicas

Primeiro

Você não pode incrementar manualmente o quote_id já que está definido para auto increment no banco de dados, pois é primary key da mesa.

Então, quando qualquer cotação é criada, quote_id é criado automaticamente, pois é um incremento automático e que deve ser único o tempo todo, conforme sql regra.

Para o seu problema

Se você tiver problema com credit card payment então você deveria estar depurando payment seção.Se você estiver usando alguma extensão externa para o seu sistema de pagamento, entre em contato com eles.Ou então o magento deveria, por padrão, lidar com todos os pagamentos sem nenhum erro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top