• Resolvido marcelo2605

    (@marcelo2605)


    Preciso implementar um sistema onde após o usuário se registrar, ele é enviado para um sistema de pagamento externo (PagSeguro).

    Para isso, estou usando uma classe do serviço, que termina do uma função header que carrega a URL de destino.

    class CreatePaymentRequest
    {
    
        public static function main()
        {
           ...
        }
    
        public static function printPaymentUrl($url)
        {
            if ($url) {
                header("Location: $url");
            }
        }
    }

    Para carregá-la após o registro, estou usando a action user_register

    add_action( 'user_register', 'pagseguro_test', 10, 1 );
    
    function pagseguro_test( $user_id ) {
    
        CreatePaymentRequest::main();
    
    }

    Mas nada acontece. O usuário continua sendo direcionado para a página de login por padrão.

Visualizando 10 respostas - 1 até 10 (de um total de 10)
  • Moderador Leo Baiano

    (@leobaiano)

    Eu não sei o que tem dentro do método main();, mas se ele não chamar o printPaymentUrl();, passando a URL do pagseguro, realmente nada vai acontecer. Porém, na real, acho mesmo é que o header(); não está funcionando porque está sendo chamado depois do cabeçalho do documento ser criado, para testar você poderia colocar para imprimir ou fazer qualquer outra coisa ai dentro.

    Para titulo de curiosidade o WordPress tem a função wp_redirect para utilizar no lugar do `header();, acredito que daria o mesmo erro por ser chamado após o cabeçalho, por isso falo que é a titulo de curiosidade.

    Por fim, tenta substituir a action pelo filtro <a href=”https://codex.wordpress.org/Plugin_API/Filter_Reference/registration_redirect”&gt;registration_redirect</a>, acho que no seu caso é mais indicado. Caso não redirecione para onde espera tente fazer um redirecionamento com javascript, mas acredito que esse filtro é chamado antes de fechar o cabeçalho do documento e ai o wp_redirect(); vai funcionar.

    Criador do tópico marcelo2605

    (@marcelo2605)

    Oi Léo,

    Sim, o método printPaymentUrl($url); é chamado dentro do método main(); desta forma:

    $url = $paymentRequest->register($credentials);
    self::printPaymentUrl($url);

    Estava tentando usar o filtro registration_redirect e usar a URL assim:

    add_filter( 'registration_redirect', 'my_redirect_home' );
    function my_redirect_home( $registration_redirect ) {
    	$foo = CreatePaymentRequest::main();
    	return $foo;
    }

    Mas não está dando certo.

    Então vou tentar armazenar a URL como post_meta, redirecionar o usuário para uma página X e lá tentar puxar a URL com base no ID do usuário.

    Moderador Leo Baiano

    (@leobaiano)

    A url está chegando em $foo dentro da função my_redirect_home();?

    Criador do tópico marcelo2605

    (@marcelo2605)

    Leo,

    Na função printPaymentUrl, substituí o header("Location: $url"); por return $url; e fiz esse ajuste no filtro:

    add_filter( 'registration_redirect', 'my_redirect_home' );
    function my_redirect_home( $registration_redirect ) {
    	$foo = CreatePaymentRequest::main();
    	return home_url('/pagseguro/?foo='.$foo);
    }

    Mas a query string está retornando vazia. Então a url não está chegando dentro do $foo.

    Criador do tópico marcelo2605

    (@marcelo2605)

    Leo, acabei encontrando outra solução para o que eu preciso.

    Mesmo assim, obrigado pela atenção!

    Moderador Leo Baiano

    (@leobaiano)

    Beleza Marcelo, bom que conseguiu resolver.

    Moderador Leo Baiano

    (@leobaiano)

    Haaa se puder compartilha aqui a solução que você utilizou.

    Criador do tópico marcelo2605

    (@marcelo2605)

    Foi mais simples do que imaginei:

    add_action( 'user_register', 'register_pagseguro', 10, 1 );
    function register_pagseguro( $user_id ) {
    	$foo = generate_pagseguro($user_id);
    	wp_redirect( $foo );
    	exit;
    }
    Moderador Leo Baiano

    (@leobaiano)

    A generate_pagseguro(); recebe o ID do usuário e retorna a URL de retorno do pagseguro, é isso?

    Você pode compartilhar a função generate_pagseguro();? Isso vai além do problema do tópico, que era apenas fazer o redirect, mas acho que seria de grande valia, principalmente se estiver usando a classe do pagseguro.

    Criador do tópico marcelo2605

    (@marcelo2605)

    Isso mesmo. A função generate_pageseguro() recebe o ID do usuário e também receberá valores de outros campos (nome, endereço, etc.).

    Criei um gist com a situação atual: https://gist.github.com/marcelo2605/37f16f5e1a82424e54904a55ea146642

    Agora preciso descobrir como receber as notificações do PagSeguro.

Visualizando 10 respostas - 1 até 10 (de um total de 10)
  • O tópico ‘Enviar usuário para serviço de pagamento após fazer o registro’ está fechado para novas respostas.