Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CajuCLC

Visa e o Anti-bloqueador de popup

Recommended Posts

Pessoal, estou postando em PHP, mas podem mudar para um lugar melhor se acharem que seja.

 

Bom, utilizo o Magento (PHP) e estou tentando homologar o VISA na loja.

Temos o módulo funcionando beleza, o único porém é que quando redireciona para o gateway de pagamento (locaweb) para depois ir para o visa, ele abre em popup, e então é bloqueado.

A visa passou arquivo em ASP para implementar.

O programador que fez o módulo "transformou" para PHP e seguiu oq a VISA diz.

Mas nada de funcionar.

 

O arquivo Redirect.php é assim:

 

<?php

class Campoy_Visanet_Block_Standard_Redirect extends Mage_Core_Block_Abstract
{
    protected function _construct()
    {
        $this->setTemplate('visanet/standard/redirect.phtml');
        parent::_construct();
    }

    protected function _toHtml()
    {
        $html  = '<html>';
		$html .= '<head>';
		$html .= '<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />';
		$html .= $this->getScriptCode();
		$html .= '</head>';
		$html .= '<body>';
        $html .= '<p align="center">' . $this->__('Você será redirecionado para a Visanet em alguns instantes. Se isso não acontecer, clique no botão abaixo.') . '</p>';
        $html .= '<p align="center">' . $this->getFormCode() . '</p>';
        $html .= '<script type="text/javascript">document.getElementById("visanet_standard_checkout").submit();</script>';

        $html .= '</body></html>';

        return $html;
    }

	private function getFormCode() {
		$standard = Mage::getModel('visanet/standard');
		$formFields = $standard->getStandardCheckoutFormFields();
		
		$total = $formFields['damount'];			
		$total = number_format($total, 2, '.', '');

		if (!Mage::getModel('wlpayment/wlpayment')->saveReg($formFields['orderid'], $formFields['tid'], $formFields['parcelas'], $total, $formFields['bandeira'])) {
			echo 'Falha ao gravar transaç$atilde;o.';
		}
		
		$form = '<form id = "visanet_standard_checkout" name="visanet_standard_checkout" action="' . $standard->getVisanetUrl() . '" method="post" target="mpg_popup" onSubmit="javascript:fabrewin()">';

		foreach ($formFields as $field=>$value) {
				$form .= '<input type="hidden" name="' . $field . '" value="' . $value . '" />';
		}

		$form .= '<p align="center">';
		$form .= '<input type="image" src="' . $standard->getSkinUrl('images/visa.jpg') . '" /> . <br />';
		$form .= '<input type="submit" value="Clique aqui para entrar na página da Visa" />';
		$form .= '</p>';
		$form .= '</form>';

		return($form);
	}

	private function getScriptCode() {
		$script = '<script language="JavaScript" type="text/javascript">';
		$script .= 'var retorno;';
		$script .= 'var mpg_popup;';
	
		$script .= 'window.name="loja";';
		$script .= 'function fabrewin() {';
		$script .= '	if(navigator.appName.indexOf("Netscape") != -1) {';
		$script .= '		mpg_popup = window.open("", "mpg_popup","toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=1,resizable=0,screenX=0,screenY=0,left=0,top=0,width=765,height=440");';
		$script .= '	}';
		$script .= '	else {';
		$script .= '		mpg_popup = window.open("", "mpg_popup","toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=1,resizable=1,screenX=0,screenY=0,left=0,top=0,width=765,height=440");';
		$script .= '	}';
		$script .= '	return true;';
		$script .= '}';
		$script .= '</script>';

		return($script);
	}
}

Porém eles pedem para acrescentar isso antes do return true:

$script .= '	window.location = "redirecionaCBP.asp"';

Ficando assim no final:

 

$script .= '	}';
		$script .= '	window.location = "redirecionaCBP.php"';
		$script .= '	return true;';
		$script .= '}';
		$script .= '</script>';

		return($script);
	}
}

Como o servidor é LINUX, mudei o .asp para .php (usando o arquivo correto, claro).

 

Tudo bonitinho, mas nada de funcionar.

 

O arquivo redirecionaCBP.php está assim:

 

<html>
<head>
	<title>Multitech Informática</title>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#ffffff" text="#000000" onload="document.forms[0].submit();">
	<form name="frmRedireciona" method="post" action="https://comercio.locaweb.com.br/comercio.comp">
		<input type="hidden" name="url" value="https://cbp.3dsolution.com.br/cbp/aguardeEC.html">
	</form>
</body>
</html>

 

Já não sei o que fazer e a VISA não quer liberar.

Alguem tem uma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

CajuCLC,

 

Isso deve ser feito com JavaScript, vou mover para lá.

 

Beleza João, primeiro ia postar aqui mesmo.

Mas como tem PHP também ai no meio. hehehe

Você sabe como fazer isso?

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, window.open é um problema entre os browsers mesmo... =/

 

Você pode abrir este PopUp quando a pessoa clicar em um determinado link e/ou tente usar true/false ao invés de 1/0.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, window.open é um problema entre os browsers mesmo... =/

 

Você pode abrir este PopUp quando a pessoa clicar em um determinado link e/ou tente usar true/false ao invés de 1/0.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Hum, no caso eles pedem para usar o window.location.

E detalhe, sem essa "solução" deles, o bloqueador bloqueia.

E com a "solução" deles, o bloqueador bloqueia tb!

Dizem eles que em ASP isso funciona.

Realmente, mas no Google Chrome, nem a loja teste deles consegue burlar o bloqueador.

Eu ja to aqui fervendo pq eles so vao liberar quando passar direto.

Aff

Compartilhar este post


Link para o post
Compartilhar em outros sites

CajuCLC,

 

Isso é uma falha no sistema da Visa, quando implementei o sistema deles tive também esse problema.

 

Para contornar (entenda contornar como POG já que a falha da Visa obriga a isso) foi feito o seguinte:

 

Quando seu carrinho chegar na página do pagamento você abre um popup de teste:

 

/**
 * Verifica se existe um bloqueador de popup ativo
 * @return Boolean true se um bloqueador de popup estiver ativo
 */
function hasPopupBlocker(){
	var teste = window.open( 'about:blank' , '_blank' , 'width=1,height=1,top=0,left=0' );
	var ret = teste == null || teste.closed;

	if ( !ret ) teste.close();

	return ret;
}

Para usar você faz o seguinte:

 

if ( hasPopupBlocker() ) alert( 'Você possui um bloqueador de popup ativo, para continuar você deve desabilitar TOTALMENTE o bloqueador' );
else {
	//...
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

CajuCLC,

 

Isso é uma falha no sistema da Visa, quando implementei o sistema deles tive também esse problema.

 

Para contornar (entenda contornar como POG já que a falha da Visa obriga a isso) foi feito o seguinte:

 

Quando seu carrinho chegar na página do pagamento você abre um popup de teste:

 

/**
 * Verifica se existe um bloqueador de popup ativo
 * @return Boolean true se um bloqueador de popup estiver ativo
 */
function hasPopupBlocker(){
	var teste = window.open( 'about:blank' , '_blank' , 'width=1,height=1,top=0,left=0' );
	var ret = teste == null || teste.closed;

	if ( !ret ) teste.close();

	return ret;
}

Para usar você faz o seguinte:

 

if ( hasPopupBlocker() ) alert( 'Você possui um bloqueador de popup ativo, para continuar você deve desabilitar TOTALMENTE o bloqueador' );
else {
	//...
}

Valeu João.

Mas me tira uma dúvida. A Visa se negou a homologar seu site por não ter o anti bloquador de popup dela?

Pq aqui ela esta negando por causa disso.

E ai seria somente um aviso.

Ontem a noite eu solicitei homologação novamente. Estou esperando resposta deles.

Eles negando ou nao, irei colocar isso ai tb, já que ja deixa o cliente sabendo que precisa ter o bloqueador de popup desligado.

So uma coisa.

Eu coloco os 2 códigos juntos, correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas me tira uma dúvida. A Visa se negou a homologar seu site por não ter o anti bloquador de popup dela?

Pq aqui ela esta negando por causa disso.

 

Amigão, como eu disse é uma falha da Visa. Porém, como essa falha causa de fato um problema na hora do pagamento ela vai sim se negar a homologar, se não existir um 'workaround'.

 

Contudo, lembre-se que é impossível você implementar um anti-bloqueador. Imagine que se fosse possível, não existiria bloqueadores; Afinal, qualquer desenvolvedor colocaria em seu código e teríamos uma avalanche de janelinhas pulando em cada site que entrássemos.

 

Todos os projetos que implemento, que utilizam Visa, usam um código parecido com esse e todos foram homologados, basta deixar claro para o seu usuário que ele precisará desativar o bloqueador TOTALMENTE até que o pagamento seja concluído.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não sei para que eles inventam aqueles códigos deles lá e com programas tb, etc.

Eu sou um Windows User, mas sei que em termos de segurança, o Linux dá um show.

Ai eles inventam de colocar tudo em ASP e ainda assim usando programas.

Bom, eles não homologaram, novamente.

Disseram que se não abrir automaticamente o popup, deveria ter uma imagem e um botao para ser clicado.

So que tem uma imagem do tamanho do mundo e um botao ainda maior.

Eles são cegos ou oq?

Vou colocar isso ai tb.

Vamos ver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

CajuCLC,

 

Se isso for relacionado com o PHP então o ideal é que você abra um novo tópico em PHP específico para esse problema e deixe esse em JavaScript para resolver o problema do popup.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum...

Mas é relacionado ao popup.

Essa mensagem que você colocou, ele nao aparece acentos.

Existe alguma configuração no javascript para aparecer os acentos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora entendi.

 

Veja, esse erro está relacionado a codificação utilizada para escrever o código e a codificação usada para renderizar o HTML.

 

Se você estiver escrevendo seu código usando UTF-8 você deve informar ao navegador que se trata de UTF-8, o mesmo vale para ISO-8859-1 ou qualquer outro código de página, supondo que você está trabalhando com utf-8:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http-~~-//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="pt-br" lang="pt-br" xmlns="http-~~-//www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<title>Título</title>
	<script type="text/javascript">
		/**
		 * Troque pela URL da Visa
		 * @var String
	 	 */
		var openURL	= 'about:blank';

		/**
		 * Largura da janela que será aberta
		 * @var Number
		 */
		var width	= 640;

		/**
		 * Altura da janela que será aberta
		 * @var Number
		 */
		var height	= 480;

		/**
		 * Verifica se existe um bloqueador de popup ativo
		 * @return Boolean true se um bloqueador de popup estiver ativo
		 */
		function hasPopupBlocker() {
			var teste = window.open( 'about:blank' , '_blank' , 'width=1,height=1,top=0,left=0' );
			var ret = teste == null || teste.closed;

			if ( !ret ) teste.close();

			return ret;
		}

		/**
		 * Cria o botão que será usado para abrir a janela popup caso exista um bloqueador ativo
		 * @return void
		 */
		function createButton(){
			var button	= document.createElement( 'input' );

			button.setAttribute( 'onclick' , [ 'window.open( "' , openURL , '" , "_blank" ,' , '"width=' , width , ',height=' , height , ',top=0,left=0" );' ].join( "" ) );
			button.setAttribute( 'value' , 'Abrir Popup' );
			button.setAttribute( 'type' , 'button' );
			button.setAttribute( 'name' , 'teste' );

			document.getElementById( 'check' ).appendChild( button );
		}

		/**
		 * Testa a existência de um bloqueador de popup, caso exista coloca um botão para o usuário clicar
		 * @return void
		 */
		function test(){
			var p = document.getElementById( 'check' );

			if ( hasPopupBlocker() ){
				p.innerHTML = 'Você possui um bloqueador de popup ativo<br />Pressione o botão abaixo para abrir a janela<br />';
				createButton();
			} else {
				p.innerHTML = 'aguarde...';

				var popup = window.open( openURL , '_blank' , [ 'width=' , width , ',height=' , height , ',top=0,left=0' ].join( '' ) );

				if ( popup ) p.innerHTML = '';
			}
		}
	</script>
</head>
<body onload="test();">
	<p id="check">Verificando...</p>
</body>
</html>

 

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse código ai seria para dar o aviso ao cliente, correto?

 

Ele vai verificar se o bloqueador de popup está ativo, se estiver ele cria um botão onde o evento onclick abre a janela. Isso faz o bloqueador de popup deixar a janela ser aberta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Esse código ai seria para dar o aviso ao cliente, correto?

 

Ele vai verificar se o bloqueador de popup está ativo, se estiver ele cria um botão onde o evento onclick abre a janela. Isso faz o bloqueador de popup deixar a janela ser aberta.

 

Valeu Joao.

Nao respondi antes por causa das datas festivas. :P

Mas retiramos o popup, a pessoa tem que clicar para ir.

Mas mesmo assim irei passar a ideia para o programador.

Valeu mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.