[RESOLVIDO] Virtuemart | E-SEDEX E PagSeguro

  • rmachado18
  • Avatar de rmachado18 Autor do Tópico
  • Offline
  • JCB! Junior
  • JCB! Junior
Mais
12 anos 11 meses atrás #48681 por rmachado18
rmachado18 replied the topic: Re: Virtuemart | E-SEDEX - Chega de monopólio
Caro rodajr,

O erro inicial era na hora que o virtuemart pede pra escolher o modo de pagamento, então fiz as seguintes alterações no arquivo.

Abri o arquivo correios_esedex.php e ajustei a chamada do webservice do correio conforme o manual de implementação.

ficou assim ....

// Monta URL para pegar os dados do site dos Correios

$url_busca = ' ws.correios.com.br/calculador/CalcPrecoPrazo.aspx ? nCdServico=40010f&sCepOrigem='.$Order_Pickup_Postcode.'&sCepDestino='.$Order_Destination_Postcode.'&nVlPeso='.$Order_WeightKG.'&sCdMaoPropria='.$Order_MaoPropria.'&nVlValorDeclarado='. $order_total .'&sCdAvisoRecebimento='.$Order_Aviso;


Mesmo assim continuo com o erro na tela de escolha do metodo de pagamento do virtuemart.

erro: Direct Access to this location is not allowed.

Após a informação do nosso colega rldesign

ativei o system legacy e funcionou, parou de quebrar o layout e o erro acima sumiu...

mas agora ao que me parece está conectando mas o erro é de retorno dos dados do correio que segue:

true, 'exceptions' => true, 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP, 'connection_timeout' => 1000 )); // Postagem dos parâmetros $parms = new Parameters(); $parms->cepOrigem = utf8_encode($int_cepOrigem); $parms->cepDestino = utf8_encode($int_cepDestino); $parms->peso = utf8_encode($int_pesoFrete); $parms->volume = utf8_encode($int_volumeFrete); $parms->codigo = utf8_encode($int_codigoFrete); // Resgata o valor calculado $resposta = $soap->Correios($parms); // Exibe os dados de retorno echo "Correios e-Sedex: R$ " . utf8_decode($resposta->CorreiosResult); ?>



Informação adicional
################################################
Instalação do Módulo E-sedex do virtuemart:

1. descompacte o arquivo e envie-o para o diretório ../administrator/components/com_virtuemart/classes/shipping

2. ative o plugin system legacy do joomla, em extensoes, plugin.

3. acesse o Virtuemart pela área administrativa do joomla e clicando em configurações e transportes ative o esedex


Uma vez configurado ele se comunicará com o WebService dos correios e retornará para o virtuemart com o valor do frete para o e-SEDEX.

################################################

[center:3h2z53bp]"A persistência é o caminho do êxito."
[b:3h2z53bp]Charles Chaplin[/b:3h2z53bp]

[url:3h2z53bp]http://www.atendemtecnologia.com.br[/url:3h2z53bp][/center:3h2z53bp]

Please Entrar ou Registrar to join the conversation.

Mais
12 anos 11 meses atrás #48683 por rodajr
rodajr replied the topic: Re: Virtuemart | E-SEDEX - Chega de monopólio
Boa tarde rmachado18,

Ainda não instalei aqui para poder testar, estava sem tempo, mas agora irei fazer.
E a respeito do ultimo erro, do retorno do correios:
sua url -> $url_busca = ' ws.correios.com.br/calculador/CalcPrecoPrazo.aspx ?
nCdServico=40010f&sCepOrigem='.$Order_Pickup_Postcode.'
&sCepDestino='.$Order_Destination_Postcode.'&nVlPeso='.$Order_WeightKG.'&sCdMaoPropria='.$Order_MaoPropria.'&nVlValorDeclarado='. $order_total .'&sCdAvisoRecebimento='.$Order_Aviso;
<- aqui no final está faltando um retorno (ou por uma janela popup ou por xml)

No resto do seu código você colocou algo para isso? vou colar meu código de teste com retorno em xml
/* 
* Função para pegar o conteúdo via Curl 
*/
ini_set('display_errors', true);
error_reporting(E_ALL | E_STRICT);

function get_curl($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_ENCODING, ''); // Aceitando compactação (deflate, gzip, etc)
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
        $retorno = curl_exec($ch);
        curl_close($ch);
        return $retorno;
}

$url = 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?
nCdEmpresa=&sDsSenha=&sCepOrigem=80610030&sCepDestino=01220020
&nVlPeso=1&nCdFormato=1&nVlComprimento=20&nVlAltura=5
&nVlLargura=15&sCdMaoPropria=s&nVlValorDeclarado=200&sCdAvisoRecebimento=n
&nCdServico=41106&nVlDiametro=0&StrRetorno=xml';

$retorno = get_curl($url);

$xml = simplexml_load_string($retorno);
$codigo = $xml->cServico->Codigo;
$valor = $xml->cServico->Valor;
$prazoentrega = $xml->cServico->PrazoEntrega;
echo $codigo;
echo "<br />";
echo $valor;
echo "<br />";
echo $prazoentrega;

Please Entrar ou Registrar to join the conversation.

  • rmachado18
  • Avatar de rmachado18 Autor do Tópico
  • Offline
  • JCB! Junior
  • JCB! Junior
Mais
12 anos 11 meses atrás #48684 por rmachado18
rmachado18 replied the topic: Re: Virtuemart | E-SEDEX - Chega de monopólio
então eu tentei fazer o retorno mas não consegui.... vou tentar ver agora o seu código e implementar no site que estou testando....

poderia me ajudar a incluir esse retorno...

pelo que entendi só falta isso pra funcionar....

se quiser add meu skype pra falarmos...

Skype= suporte.atendem.tecnologia

[center:3h2z53bp]"A persistência é o caminho do êxito."
[b:3h2z53bp]Charles Chaplin[/b:3h2z53bp]

[url:3h2z53bp]http://www.atendemtecnologia.com.br[/url:3h2z53bp][/center:3h2z53bp]

Please Entrar ou Registrar to join the conversation.

  • rmachado18
  • Avatar de rmachado18 Autor do Tópico
  • Offline
  • JCB! Junior
  • JCB! Junior
Mais
12 anos 11 meses atrás #48685 por rmachado18
rmachado18 replied the topic: Re: Virtuemart | E-SEDEX - Chega de monopólio
Meu código está assim...


<?php

defined('_VALID_MOS') or die('Direct Access to this location is not allowed.');



/**

*******************************************************************************

* @version $Id: correios_esedex.php, v 1.8a 11/05/2011 $

* @package VirtueMart

* @subpackage shipping

* Atualizado por Equipe Joomla Clube 2011

* Copyright (C) 2010 Criacao-sites. All rights reserved.

*

* Brazilian Correios Post Calculator located at http://www.correios.com.br/


*******************************************************************************

*/



class correios_esedex {



var $classname = "correios_esedex";



function list_rates( &$d ) {

global $total, $tax_total, $CURRENCY_DISPLAY;



$cart = $_SESSION;



/** Read current Configuration ***/

// require_once(CLASSPATH ."shipping/".$this->classname.".cfg.php");

require(CLASSPATH ."shipping/".$this->classname.".cfg.php");



if ( $_SESSION != 1 ) {

$taxrate = 1;

$order_total = $total + $tax_total;

}else{

$taxrate = $this->get_tax_rate() + 1;

$order_total = $total;

}



//Create DB User Object for Current User

$dbu = new ps_DB;

$q = "SELECT country,zip FROM #__{vm}_user_info WHERE user_info_id = '". $d["ship_to_info_id"] . "'";

$dbu->query($q);

if (!$dbu->next_record()) {

/*$vmLogger->err( $VM_LANG->_PHPSHOP_CHECKOUT_ERR_SHIPTO_NOT_FOUND );

return False;*/

}



//Create DB Vendor Object for Shop Vendor

$dbv = new ps_DB;

$q = "SELECT * from #__{vm}_vendor, #__{vm}_country WHERE vendor_id='" . $_SESSION["ps_vendor_id"] . "' AND (vendor_country=country_2_code OR vendor_country=country_3_code)";

$dbv->query($q);

$dbv->next_record();





// Monta as variáveis para Consulta Correios - SEDEX Normal



// Monta uma lista de símbolos a serem removidos do número do CEP

$replacements = array(" ", ".", ",", "-", ";");



//Pega o CEP de Origem e remove símbolos indesejados(ex. 96840150)

$Order_Pickup_Postcode = $dbv->f("vendor_zip");

$Order_Pickup_Postcode = str_replace($replacements, "", $Order_Pickup_Postcode);



// Verifica se o CEP da Loja é válido

if(strlen($Order_Pickup_Postcode)<8 || strlen($Order_Pickup_Postcode)>8){

echo "SEDEX Normal erro: CEP da loja é inválido - CEP deve ter 8 dígitos numéricos";

return false;

}



// Pega o CEP de Destino e remove símbolos indesejados (ex. 96840150)

$Order_Destination_Postcode = $dbu->f("zip");

$Order_Destination_Postcode = str_replace($replacements, "", $Order_Destination_Postcode);



// Verifica se o CEP de Destino é válido

if(strlen($Order_Destination_Postcode)<8 || strlen($Order_Destination_Postcode)>8){

echo "SEDEX Normal erro: CEP do destinatário é inválido - CEP deve ter 8 dígitos numéricos";

return false;

}



//Pega o peso dos produtos (Kg)

$Order_WeightKG = $d ;



// Verifica se o peso está dentro dos limites

if($Order_WeightKG > 30){

echo "SEDEX Normal erro: o peso de " . $Order_WeightKG . " Kg excede o peso máximo (30 Kg).";

return false;

}elseif($Order_WeightKG == 0){

echo "SEDEX Normal: o peso de " . $Order_WeightKG . " Kg sugere produto(s) para DownLoad.";

return false;

}



//Fee for packaging and handling, added to the delivery costs returned by auspost

$Order_Handling_Fee = Handling_Fee;



//Aviso de Recebimento dos Correios

$Order_MaoPropria = MaoPropria;



//Aviso de Recebimento dos Correios

$Order_Aviso = AvisoReceb;



//Ponto de obtenção do valor do frete

$pto = Ponto;
$int_cepOrigem = $Order_Pickup_Postcode;
$int_cepDestino = $Order_Destination_Postcode;
// $int_pesoFrete = $Order_WeightKG;
$int_pesoFrete = number_format($Order_WeightKG, 2, ',', '.');
$int_volumeFrete = "2";
$int_codigoFrete = "81019";

include("correios_esedex_conection.php");


/*
// ============= Início Obtém o valor do frete do site dos Correios =============



// Monta URL para pegar os dados do site dos Correios

$url_busca = ' ws.correios.com.br/calculador/CalcPrecoPrazo.aspx ? nCdServico=40010f&sCepOrigem='.$Order_Pickup_Postcode.'&sCepDestino='.$Order_Destination_Postcode.'&nVlPeso='.$Order_WeightKG.'&sCdMaoPropria='.$Order_MaoPropria.'&nVlValorDeclarado='. $order_total .'&sCdAvisoRecebimento='.$Order_Aviso;

// Verifica se está habilitada a função allow_url_fopen

if(ini_get('allow_url_fopen') == '1') {



// Usa file_get_contents()

$conteudo = @file_get_contents($url_busca);



// Se ocorreu um erro

if($conteudo === false){

echo "SEDEX Normal: Sistema Indisponível";

return false;

}



// Senão verifica CURL para a consulta

} else {



// ======= Verifica se a biblioteca CURL está instalada no servidor =======

if (function_exists('curl_init')) {



// Inicializa o novo recurso CURL

$ch = curl_init();



// Seta a URL para buscar

curl_setopt($ch, CURLOPT_URL, $url_busca);



// Não quero os cabeçalhos apenas o conteúdo

curl_setopt($ch, CURLOPT_HEADER, 0);



// Retorna o valor ao invés de imprimir o resultado no navegador

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);



// Usar um agente do usuário imitar um browser

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');



// Executa a operação e pega o conteúdo da página de retorno

$conteudo = curl_exec($ch);



// Pega erros da biblioteca CURL e processa

$curl_erro = curl_errno($ch);

if(curl_errno($ch) != 0){

echo "SEDEX Normal erro CURL:". curl_error($ch);

return false;

}



// Sempre fecha a sessão para liberar todos os recursos

curl_close($ch);



// ======= Se a biblioteca CURL não está instalada no servidor =======

} else {



// Sem CURL e sem allow_url_fopen

echo "SEDEX Normal erro: Sem \"CURL lib\" e sem \"allow_url_fopen\"";

return false;

}

}



// Seleciona dados relevantes e coloca em uma matriz

preg_match_all("#<b>(.*?)<\/b>#s", $conteudo, $myfile);



// Obtém valor no ponto correto da matriz e formata

$valor = $myfile[1][$pto];

$APcharge = floatval(str_replace("," , ".", substr($valor,3)));



// Verifica se o valor retornado é maior que 0,00

if($APcharge == "0.00"){

echo "SEDEX Normal erro: valor não disponível";

return false;

}



// ============= Final Obtém o valor do frete do site dos Correios =============



$Total_Shipping_Handling = $APcharge + $Order_Handling_Fee;



$_SESSION[$shipping_rate_id] = "1";

<Fim do módulo Comum >
*/

// THE ORDER OF THOSE VALUES IS IMPORTANT:

// ShippingClassName|carrier_name|rate_name|totalshippingcosts|rate_id

// $shipping_rate_id = urlencode( $this->classname."|Correios_Brasil|SEDEX_Normal|".$Total_Shipping_Handling);


$shipping_rate_id = urlencode( $this->classname."|Correios_Brasil|eSEDEX|".$resposta->CorreiosResult);

$html .= "(".$Order_WeightKG." Kg)";

$html .= "<label for=\"correios_sedex_shipping_rate\">";

$html = "\n<input type=\"radio\" name=\"shipping_rate_id\" id=\"correios_esedex\" checked=\"checked\" value=\"$shipping_rate_id\" />\n";



//$html .= "Correios - SEDEX Normal            - ";

// $html .= "(".$Order_WeightKG." Kg)";
//<strong>".$CURRENCY_DISPLAY->getFullValue($Total_Shipping_Handling)."</strong>

$html .= "</label>";



$_SESSION[$shipping_rate_id] = "1";



echo $html;

return true;



// Fim da função list_rates

}



function get_rate( &$d ) {



$shipping_rate_id = $d["shipping_rate_id"];

$is_arr = explode("|", urldecode(urldecode($shipping_rate_id)) );

$order_shipping = $is_arr[3];



return $order_shipping;

}





function get_tax_rate() {



/** Read current Configuration ***/

require_once(CLASSPATH ."shipping/".$this->classname.".cfg.php");



if( intval(SEDEX_TAX_CLASS)== 0 )

return( 0 );

else {

require_once( CLASSPATH. "ps_tax.php" );

$tax_rate = ps_tax::get_taxrate_by_id( intval(SEDEX_TAX_CLASS) );

return $tax_rate;

}

}



/* Validate this Shipping method by checking if the SESSION contains the key

* @returns boolean False when the Shipping method is not in the SESSION

*/

function validate( $d ) {



$shipping_rate_id = $d["shipping_rate_id"];

if( array_key_exists( $shipping_rate_id, $_SESSION )) {

return true;

}else{

return false;

}

}

/**

* Show all configuration parameters for this Shipping method

* @returns boolean False when the Shipping method has no configration

*/

function show_configuration() {

global $VM_LANG;

/** Read current Configuration ***/

require_once(CLASSPATH ."shipping/".$this->classname.".cfg.php");

?>

<table>

<tr>



<?php

//Mostra o logo dos correios se este estiver disponível no site dos correios

$logo_correios = " www.correios.com.br/encomendas/prazo/img/banner_e_sedex.gif "; //Caminho para o logo dos Correios

if (@fopen($logo_correios, "r")) {

echo "<td><img src=$logo_correios alt=\"eSEDEX\"></td>";

}

?>



</tr>

<tr>

<td><strong>Ponto de obtenção do valor do frete:</strong>

</td>

<td>

<input type="text" name="Ponto" class="inputbox" value="<?php echo Ponto ?>" />

</td>

<td>

<?php echo mm_ToolTip("Este é o ponto da página dos correios onde é obtido o valor do frete.") ?>

</td>

</tr>

<tr>

<td><strong>Taxa de empacotamento e manuseio:</strong>

</td>

<td>

<input type="text" name="Handling_Fee" class="inputbox" value="<?php echo Handling_Fee ?>" />

</td>

<td>

<?php echo mm_ToolTip("Esta é sua taxa de empacotamento e manuseio, e será acrescida aos custos de envio retornados pelos Correios") ?>

</td>

</tr>

<tr>

<td><strong><?php echo $VM_LANG->_PHPSHOP_UPS_TAX_CLASS ?></strong></td>

<td>

<?php

require_once(CLASSPATH.'ps_tax.php');

ps_tax::list_tax_value("SEDEX_TAX_CLASS", SEDEX_TAX_CLASS) ?>

</td>

<td><?php echo mm_ToolTip($VM_LANG->_PHPSHOP_UPS_TAX_CLASS_TOOLTIP) ?><td>

</tr>





<tr>

<td><strong>Mão Própria:</strong></td>

<td>

<select class="inputbox" name="MaoPropria">

<option value="n" <?php if(MaoPropria == "n") echo "selected=\"selected\""; ?> >Não</option>

<option value="s" <?php if(MaoPropria == "s") echo "selected=\"selected\""; ?> >Sim</option>

</select>



</td>

<td><?php echo mm_ToolTip("Você define se usará ou não o serviço Mão Própria dos Correios") ?><td>

</tr>

<tr>

<td><strong>Aviso de Recebimento:</strong></td>

<td>

<select class="inputbox" name="AvisoReceb">

<option value="N" <?php if(AvisoReceb == "N") echo "selected=\"selected\""; ?> >Não</option>

<option value="S" <?php if(AvisoReceb == "S") echo "selected=\"selected\""; ?> >Sim</option>

</select>



</td>

<td><?php echo mm_ToolTip("Você define se usará ou não o serviço de Aviso de Recebimento dos Correios") ?><td>

</tr>

<tr>

<td colspan="3"> 



</td>

</tr>

<tr>

<td colspan="3">

<!--Begin PagSeguro Logo -->

<center>

<strong>Ajude a manter este projeto</strong><br><br>

<a href=" pagseguro.uol.com.br/security/webpagamen...res.com.br&moeda=BRL " style="text-decoration: none;"><img src=" pagseguro.uol.com.br/Security/Imagens/FacaSuaDoacao.gif " align="middle" alt="Doe com PagSeguro - é rápido e seguro!" border="0" /></a>

</center>

<!-- End PagSeguro Logo -->

</td>

</tr>

</table>



<?php

// return false if there's no configuration

return true;

}



/**

* Returns the "is_writeable" status of the configuration file

* @param void

* @returns boolean True when the configuration file is writeable, false when not

*/

function configfile_writeable() {

return is_writeable( CLASSPATH."shipping/".$this->classname.".cfg.php" );

}



/**

* Writes the configuration file for this shipping method

* @param array An array of objects

* @returns boolean True when writing was successful

*/

function write_configuration( &$d ) {

global $vmLogger;



$my_config_array = array("Handling_Fee" => $d,

"SEDEX_TAX_CLASS" => $d,

"MaoPropria" => $d,

"AvisoReceb" => $d,

"Ponto" => $d

);

$config = "<?php\n";

$config .= "defined('_VALID_MOS') or die('Direct Access to this location is not allowed.'); \n\n";

foreach( $my_config_array as $key => $value ) {

$config .= "define ('$key', '$value');\n";

}



$config .= "?>";



if ($fp = fopen(CLASSPATH ."shipping/".$this->classname.".cfg.php", "w")) {

fputs($fp, $config, strlen($config));

fclose ($fp);

return true;

} else {

$vmLogger->err( "Error writing to configuration file" );

return false;

}

}

}



?>


[center:3h2z53bp]"A persistência é o caminho do êxito."
[b:3h2z53bp]Charles Chaplin[/b:3h2z53bp]

[url:3h2z53bp]http://www.atendemtecnologia.com.br[/url:3h2z53bp][/center:3h2z53bp]

Please Entrar ou Registrar to join the conversation.

Mais
12 anos 11 meses atrás #48689 por elvisvinicius
elvisvinicius replied the topic: Re: Virtuemart | E-SEDEX - Chega de monopólio
Troca _VALID_MOS por _JEXEC.

(^ ^)

Please Entrar ou Registrar to join the conversation.