Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com frete


criacao-sites

Pergunta

Kara eu to com um problema com o e-sedex para o virtuemart, eu li a documentação dos correios e eles dizem que tem que ter o codigo da empresa e a senha em caso de serviços que tenham contrato mesmo que sejam valor nulo. Então eu alterei o código de envio para o 81019 do e-sedex mas não tá funfando nem F####... ALGUÉM AI pode me dar um help?


<?php

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



class correios_sedex {



var $classname = "correios_sedex";



function list_rates( &$d ) {

global $total, $tax_total, $CURRENCY_DISPLAY;



$cart = $_SESSION['cart'];



/** Read current Configuration ***/

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

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



if ( $_SESSION['auth']['show_price_including_tax'] != 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['weight'] ;



// 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;





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



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

//$url_busca = 'http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=paginaCorreios&servico=40010&cepOrigem='.$Order_Pickup_Postcode.'&cepDestino='.$Order_Destination_Postcode.'&peso='.$Order_WeightKG.'&MaoPropria='.$Order_MaoPropria.'&valorDeclarado='. $order_total .'&avisoRecebimento='.$Order_Aviso;

$url_busca =
'http://www.correios.com.br/encomendas/precos/calculo.cfm?resposta=paginaCorreios&nCdEmpresa=&sDsSenha=&servico=81019&cepOrigem='.$Order_Pickup_Postcode.'&cepDestino='.$Order_Destination_Postcode.'&peso='.$Order_WeightKG.'&MaoPropria='.$Order_MaoPropria.'&valorDeclarado='. $order_total .'&avisoRecebimento='.$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";



// 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);



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

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

$html .= "Correios - SEDEX Normal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- ";

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

$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 = "http://www.correios.com.br/encomendas/servicos/Sedex/Imagens/lg_sedex.gif"; //Caminho para o logo dos Correios

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

echo "<td><img src=$logo_correios alt=\"SEDEX\"></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">&nbsp;



</td>

</tr>

<tr>

<td colspan="3">

<!--Begin PagSeguro Logo -->

<center>

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

<a href="https://pagseguro.uol.com.br/security/webpagamentos/webdoacao.aspx?email_cobranca=fsoares@fsoares.com.br&moeda=BRL" style="text-decoration: none;"><img src="https://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['Handling_Fee'],

"SEDEX_TAX_CLASS" => $d['SEDEX_TAX_CLASS'],

"MaoPropria" => $d['MaoPropria'],

"AvisoReceb" => $d['AvisoReceb'],

"Ponto" => $d['Ponto']

);

$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;

}

}

}



?>
[/codebox]

Abaixo to postando o código.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...