Support » Plugin: QR Code PicPay for WooCommerce » Pedido automaticamente cancelado

  • Resolved igormacedo

    (@igormacedo)


    Olá,

    Primeiramente quero elogiar a iniciativa de disponibilizar este plugin gratuitamente para adicionar o picpay nos sites que utilizam wordpress/woocommerce.

    Estou enfrentando problemas com a efetivação do pagamento utilizando este plugin.

    Acontece o seguinte: na parte de finalização do pedido, ao clicar em prosseguir para o pagamento o valor da compra é descontado da conta do cliente e creditado na conta da loja no PicPay Ecommerce, entretanto o status do pedido é automaticamente atualizado de Aguardando Pagamento para Cancelado.

    (Observação: A loja está com a funcionalidade de cashback ativada, entretanto, o valor correspondente à compra que deveria retornar para a conta não é atualizado/faturado no PicPay do cliente).

    Versões de alguns plugins importantes no site:

    QR Code PicPay para WooCommerce v1.2.0

    WooCommerce v4.5.2
    Brazilian Market on WooCommerce v3.7.2
    Claudio Sanches – PagSeguro for WooCommerce v2.14.0
    Claudio Sanches – Correios for WooCommerce v3.8.0

    Este outro tópico parece ter reportado o mesmo problema: https://wordpress.org/support/topic/plugin-cancelando-pedidos-concluidos/

    Estou verificando se consigo resolver com base neste tópico, até o momento ainda não obtive sucesso; https://wordpress.org/support/topic/problemas-com-notificacoes/

    • This topic was modified 1 year, 5 months ago by igormacedo.
    • This topic was modified 1 year, 5 months ago by igormacedo.
    • This topic was modified 1 year, 5 months ago by igormacedo.
    • This topic was modified 1 year, 5 months ago by igormacedo.
Viewing 11 replies - 1 through 11 (of 11 total)
  • Plugin Author Deividson Damasio

    (@dadeke)

    Faala @igormacedo!

    Tudo beleza? 😀

    Este problema está acontecendo com todos os pagamentos recebidos com PicPay ou com apenas alguns clientes específicos?

    A “Expiração do QR Code” está ativada nas configurações do pagamento na administração do WooCommerce?

    Thread Starter igormacedo

    (@igormacedo)

    Olá, tudo joia.

    O problema acontece com todos os clientes no site.

    A expiração do QR Code não está ativada.

    Plugin Author Deividson Damasio

    (@dadeke)

    @igormacedo

    Seu caso precisa de investigação.

    1º) Habilite o registro de depuração na administração em WooCommerce => Configurações => Pagamentos => PicPay => Registro de depuração.
    2º) Realize uma compra real no seu e-commerce selecionando o método de pagamento PicPay.
    3º) Retorne a administração na mesma tela de configurações e clique no link Status do Sistema > Registros para visualizar o arquivo de registros.
    4º) Selecione todos os registros mais recentes, copie e cole o conteúdo no Pastebin ou no Gist substituindo seus dados sensíveis por um “****”. Em seguida gere o link e cole aqui neste tópico.

    Desta forma fica mais rápido fazer o diagnóstico. 🙂

    Aguardo resposta.

    Thread Starter igormacedo

    (@igormacedo)

    @dadeke

    Na primeira consulta ao código não me recordo de ter visto erro no seller token, após eu ter visto, gerei novamente os tokens e fiz uma compra de simulação com valores reais. Segue resultado.

    Algo que me chamou atenção foi o horário, não aparenta bater com o GMT -3.

    https://gist.github.com/2LEPRECHAUN/05dee77ffbddebff32eee18bd7d2bb83

    Plugin Author Deividson Damasio

    (@dadeke)

    @igormacedo

    Então um problema já foi solucionado. 👍

    Agora estou procurando estes termos nos seus registros:

    
    ...
    - Checking CALLBACK request...
    - CALLBACK request is OK.
    - Get payment status for order [ID]
    - PicPay payment status response: ...
    ...
    

    Eles apareceram aí em algum lugar?

    Thread Starter igormacedo

    (@igormacedo)

    @dadeke

    Não aparecem. Nenhum dos pedidos possui status do callback como OK.

    O pedido mais recente está atualizando novamente o log com o tempo com essas informações:

    [expiresAt] => 2021-01-18T23:34:10-02:00
    )
    
    01-11-2021 @ 23:22:54 - Checking CALLBACK request...
    01-11-2021 @ 23:22:54 - Invalid CALLBACK request, invalid Seller Token.
    01-11-2021 @ 23:23:02 - Checking CALLBACK request...
    01-11-2021 @ 23:23:02 - Invalid CALLBACK request, invalid Seller Token.

    OBS.: Qual problema foi solucionado?

    • This reply was modified 1 year, 5 months ago by igormacedo.
    Plugin Author Deividson Damasio

    (@dadeke)

    —————————–
    EVENTO 01 acima (após esse foi trocado seller token e picpay token) – Evento 02 abaixo
    —————————–

    OBS.: Qual problema foi solucionado?

    R: Não encontrei o restante dos registros então achei que o problema do “Checking CALLBACK request” tinha sido solucionado após a troca do PicPay Token e do Seller Token de acordo com o comentário. 🙂

    Então o restante dos registros continua assim?

    
    - Invalid CALLBACK request, invalid Seller Token.
    

    Este Seller Token aí está muito estranho! 🤔

    Infelizmente não vou conseguir investigar seu caso sozinho. Vamos precisar da cooperação do suporte da PicPay.

    Sugiro entrar em contato com o suporte deles enviando o link deste tópico.

    A questão a ser respondida é esta: “Por que o Sellen Token está inválido?”

    Tudo bem?

    Thread Starter igormacedo

    (@igormacedo)

    @dadeke

    Pois então, os registros até o momento que eu fiz no gist acabavam ali, realmente tá bem estranho, ele parece estar tentando fazer solicitações mesmo um tempo depois de o próprio pedido ter sido cancelado.

    Os registros continuam checando o callback e respondendo como Seller Token inválido.
    Até o momento atualizou mais uma tentativa.

    [expiresAt] => 2021-01-18T23:34:10-02:00
    )
    
    01-11-2021 @ 23:22:54 - Checking CALLBACK request...
    01-11-2021 @ 23:22:54 - Invalid CALLBACK request, invalid Seller Token.
    01-11-2021 @ 23:23:02 - Checking CALLBACK request...
    01-11-2021 @ 23:23:02 - Invalid CALLBACK request, invalid Seller Token.
    01-11-2021 @ 23:23:07 - Checking CALLBACK request...
    01-11-2021 @ 23:23:07 - Invalid CALLBACK request, invalid Seller Token.

    Vou entrar em contato com o Suporte do PicPay.

    Desde já agradeço imensamente a disposição/auxílio para tentarmos encontrar o problema, e atualizo aqui caso haja bons resultados/informações.

    Thread Starter igormacedo

    (@igormacedo)

    Olá, O PicPay me retornou com a seguinte resposta:

    O problema está sendo na URL de confirmação do pagamento (callbackUrl), para testar a URL o desenvolvedor pode usar esse código aqui:

    curl
    –location –request POST ” \
    –header ‘x-seller-token: valor-do-token’ \
    –header ‘Accept: application/json’ \
    –header ‘Content-Type: application/json’ \
    –data-raw ‘{
    “referenceId”: algum-id-referencia,
    “authorizationId”: null
    }’
    Isso é basicamente a chamada que o nosso sistema faz para o seu site para informar que a transação foi paga.

    Hoje, essa URL está retornando “400” para gente. Isso indica que houve um erro na chamada, por isso não conseguimos informar que a compra foi bem sucedida.

    Quanto ao log de token inválido, existem duas hipóteses:

    Existe alguma divergência no token:

    Pode ser algum contratempo com o plugin que você utiliza, que não consegue passar um log de erro diferente do esperado.

    Em ambos os cenários, é necessário que reveja a integração. Segue link da documentação: https://studio.picpay.com/docs/e-commerce.

    Plugin Author Deividson Damasio

    (@dadeke)

    Olá @igormacedo 🙋🏻‍♂️

    Certo. Então vamos lá! Estou utilizando:

    WordPress na versão 5.6.1
    WooCommerce na versão 4.9.2
    QR Code PicPay para WooCommerce na versão 1.2.0

    1º teste) Com o “authorizationId” sendo nulo:

    
    curl -k -i \
    --request POST \
    --url https://test/woocommerce/wc-api/WC_PicPay_Gateway/ \
    --header 'x-seller-token: 10874731-facd-4193-9800-9eb715e22c0e' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --data '{
    "referenceId": "WC-294",
    "authorizationId": null
    }'
    

    Resultado: HTTP Status 200
    Print do teste: https://i.imgur.com/HnScQyC.png
    Registros de depuração:

    
    ...
    02-07-2021 @ 23:34:39 - Checking CALLBACK request...
    02-07-2021 @ 23:34:39 - CALLBACK request is OK.
    02-07-2021 @ 23:34:39 - Get payment status for order WC-294
    ...
    

    2º teste) Com um “referenceId” que não existe na loja:

    
    curl -k -i \
    --request POST \
    --url https://test/woocommerce/wc-api/WC_PicPay_Gateway/ \
    --header 'x-seller-token: 10874731-facd-4193-9800-9eb715e22c0e' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --data '{
    "referenceId": "WC-XXXX",
    "authorizationId": "5b01780ba8914c001a007673"
    }'
    

    Resultado: HTTP Status 200
    Print do teste: https://i.imgur.com/YfR2tYr.png
    Registros de depuração:

    
    ...
    02-07-2021 @ 23:35:42 - Checking CALLBACK request...
    02-07-2021 @ 23:35:42 - CALLBACK request is OK.
    02-07-2021 @ 23:35:42 - Get payment status for order WC-XXXX
    02-07-2021 @ 23:35:43 - PicPay payment status response: Array
    (
        [message] => Pedido referenceId='WC-XXXX' não encontrado
        [code] => 422
    )
    ...
    

    3º teste) Com "x-seller-token" diferente do que está nas configurações:

    
    curl -k -i \
    --request POST \
    --url https://test/woocommerce/wc-api/WC_PicPay_Gateway/ \
    --header 'x-seller-token: 1a9c0314-97a1-4f95-89a9-7b46ae447621' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --data '{
    "referenceId": "WC-294",
    "authorizationId": "5b01780ba8914c001a007673"
    }'
    

    Resultado: HTTP Status 200
    Print do teste: https://i.imgur.com/0OY40rb.png
    Registros de depuração:

    
    ...
    02-07-2021 @ 23:36:53 - Checking CALLBACK request...
    02-07-2021 @ 23:36:53 - Invalid CALLBACK request, invalid Seller Token.
    ...
    

    4º teste) Com todos os campos preenchidos, inclusive o "authorizationId":

    
    curl -k -i \
    --request POST \
    --url https://test/woocommerce/wc-api/WC_PicPay_Gateway/ \
    --header 'x-seller-token: 10874731-facd-4193-9800-9eb715e22c0e' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --data '{
    "referenceId": "WC-294",
    "authorizationId": "5b01780ba8914c001a007673"
    }'
    

    Resultado: HTTP Status 200
    Print do teste: https://i.imgur.com/R43Rkdl.png
    Registros de depuração:

    
    ...
    02-07-2021 @ 23:38:25 - Checking CALLBACK request...
    02-07-2021 @ 23:38:25 - CALLBACK request is OK.
    02-07-2021 @ 23:38:25 - Get payment status for order WC-294
    ...
    

    Baseados nos resultados que obtive nos testes que foram realizados acima, não consegui encontrar o erro 400 que foi citado.

    A questão toda está em torno deste problema:

    
    2021 @ 23:22:54 - Invalid CALLBACK request, invalid Seller Token.
    

    onde o registro de depuração é gerado nesta linha:
    https://github.com/dadeke/woo-picpay/blob/7e9c64a8c5fca377fdcd41c9867777ae9fca4e02/includes/class-wc-picpay-api.php#L257

    Então meu palpite é descobrir o Seller Token que a PicPay está enviando.
    Para fazer isto, basta alterar temporariamente este trecho de:

    
    if($this->gateway->debug == 'yes') {
    	$this->gateway->log->add($this->gateway->id, 'Invalid CALLBACK request, invalid Seller Token.');
    }
    

    para:

    
    if($this->gateway->debug == 'yes') {
    	$this->gateway->log->add($this->gateway->id, 'Invalid CALLBACK request, invalid Seller Token.');
    
    	// Start temporary test
    	$this->gateway->log->add($this->gateway->id, 'Seller Token received: ' . $_SERVER['HTTP_X_SELLER_TOKEN']);
    	$payment = file_get_contents("php://input");
    	$payment = json_decode($payment, true);
    	$this->gateway->log->add($this->gateway->id, 'Request body: ' . print_r($payment, true));
    	// Finish temporary test
    }
    

    Depois faça uma compra real na sua loja e veja o Seller Token que irá aparecer no Status do Sistema > Registros.

    Assim será possível comparar com os próprios olhos o valor do Seller Token que está sendo enviado com o valor do Seller Token que está salvo nas configurações. 👀
    Caso o Seller Token enviado esteja diferente, verifique se "referenceId" (Prefixo + ID do Pedido) no "Request body" que possivelmente foi enviado existe na sua loja. Caso exista, copie o verdadeiro Seller Token e salve-o nas configurações do WooCommerce.
    Caso o "referenceId" (Prefixo + ID do Pedido) não exista na loja, aí sim será um tremendo mistério! 🤔

    Tome cuidado! Qualquer pessoa que obter posse do seu Seller Token pode hackear a confirmação dos pagamentos da sua loja.
    O Seller Token que utilizei nos testes é fictício. 👍

    Tudo bem?

    Plugin Author Deividson Damasio

    (@dadeke)

    Olá @igormacedo .

    Estou marcando esse tópico como resolvido ✅ porque entendo que o assunto abordado está resolvido ou não recebi mais seu contato.

    Caso precise de mais alguma orientação ou suporte relacionado a este plugin, por favor, abra um novo tópico. 🙂

Viewing 11 replies - 1 through 11 (of 11 total)
  • The topic ‘Pedido automaticamente cancelado’ is closed to new replies.