Suporte » Desenvolvendo com WordPress » SYNTAXERROR: UNEXPECTED TOKEN < IN JSON AT POSITION 0 como Erro

  • Criei um plugin que ao receber a resposta de um POST, deve colocar o conteúdo da página em um iframe. Faço isso usando o echo e exit() em seguida.

    if($response != null || $response != "") {
    //                    $woocommerce->cart->empty_cart();
    
                       $checkout_url = $response['data']['url'];
    header( 'Content-Type: text/html; charset=utf-8');
                       echo '<pre><iframe src="' . $checkout_url .'" style="position:fixed; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999;">erro</iframe></pre>';
    
                       exit();
                    }

    Localmente, o iframe funciona. Porém, em produção recebo o erro SYNTAXERROR: UNEXPECTED TOKEN < IN JSON AT POSITION 0. Como se viesse um Json ao invés de um conteúdo HTML e assim não consegue renderizar o iframe.

    O fluxo da ação é:
    – Fazer um POST com conteúdo do checkout wordpress
    – receber um response e pegar a URL que veio
    – Colocar o conteúdo da URL com iframe. Eu até tentei fazer um redirect (que seria ideal) com header('Location: ') e wp_redirect() mas também não executou em produção.

    Alguém pode me ajudar por favor?

    Estou usando a versão 2.4.8 do Woocommerce em produção (não posso atualizar, segundo o cliente, com a possibilidade de quebrar a loja =/).

    • Este tópico foi modificado 8 meses, 1 semana atrás por  joaosantana.
Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • Moderador Claudio Sanches

    (@claudiosanches)

    Bom, não tem muitos detalhes do local onde esta tentando aplicar o código.
    Mas pelo erro é bem claro, no lugar de uma resposta JSON, esta sendo incluído HTML, o que é um erro de sintase quando se trabalhando com JSON, então provavelmente vai ser melhor trocar a abordagem que você esta fazendo.

    O fluxo da ação é:
    – Fazer um POST com conteúdo do checkout wordpress
    – receber um response e pegar a URL que veio
    – Colocar o conteúdo da URL com iframe. Eu até tentei fazer um redirect (que seria ideal) com header(‘Location: ‘) e wp_redirect() mas também não executou em produção.

    Trabalhando assim, não precisa de nada do código que você esta usando.

    Por padrão na resposta do gateway de pagamento já pode passar a URL para fazer redirecionamento.

    Aqui um exemplo:

    return array(
        'result'   => 'success',
        'redirect' => $checkout_url,
    );

    Ou se quer abrir em um iframe, pode também indicar isso no gateway e o WooCommerce vai redirecionar para outra página para que isso ocorra.

    Por exemplo:

    return array(
        'result'   => 'success',
        'redirect' => $order->get_checkout_payment_url( true ),
    );

    Então pode configurar uma página de recebimento:

    add_action( 'woocommerce_receipt_' . $this->id, array( $this, 'receipt_page' ) );
    

    E no método receipt_page exibir o iframe que você quer exibir.

    Moderador Claudio Sanches

    (@claudiosanches)

    Estou usando a versão 2.4.8 do Woocommerce em produção (não posso atualizar, segundo o cliente, com a possibilidade de quebrar a loja =/).

    Faça orçamento com o cliente para atualizar isso dai, já que qualquer versão anterior a 3.0 é totalmente insegura.

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • O tópico ‘SYNTAXERROR: UNEXPECTED TOKEN < IN JSON AT POSITION 0 como Erro’ está fechado para novas respostas.