• Resolvido edsonpedroso

    (@edsonpedroso)


    Olá pessoal, estou precisando de uma ajudinha. Criei uma loja virtual com o WordPress e o plugin wp-e-commerce e coloquei dois scripts de pagamento e calculo de frete do PagSeguro.

    Mas estou recebendo o seguinte erro no topo do site:

    Warning: Invalid argument supplied for foreach() in /home/site/public_html/testes/wordpress/wp-content/plugins/wp-e-commerce/shipping/pagseguro.php on line 107

    Abaixo está o código do arquivo pagseguro.php que realiza o calculo do frete:

    <?php
    
    class pagseguro
    {
        public $internal_name = 'pagseguro';
        public $name          = 'PagSeguro';
        public $is_external   = true;
        public $needs_zipcode = true;
    
        public function getName()
        {
            return $this->name;
        }
    
        public function getInternalName()
        {
            return $this->internal_name;
        }
    
        public function getForm ()
        {
            $shipping = get_option('pagseguro_shipping_configs');
            if (!is_array($shipping)) {
                $shipping = array();
            }
            extract($shipping+array('cep' => '','valor_fixo' => '', 'meio' => array('Sedex'=>'0', 'PAC'=> '0')));
            $checked_sedex = $meio['Sedex'] == '1' ? ' checked="checked" ' : '';
            $checked_pac = $meio['PAC'] == '1' ? ' checked="checked" ' : '';
            return <<<EOF
    <tr><td>
    <p>
        <label>
            <span>Informe seu CEP (XXXXX-XXX): </span><br />
            <input type="text" name="shipping[cep]" value="$cep" />
        </label><br />
        <label>
            <span>Caso o módulo não consiga encontrar o CEP da pessoa, informe um valor fixo para o frete (por item):</span><br />
            <input type="text" name="shipping[valor_fixo]" value="$valor_fixo" />
        </label><br />
        <input type="hidden" name="shipping[meio][Sedex]" value="0" />
        <input type="hidden" name="shipping[meio][PAC]" value="0" />
        <label> Mostrar estes meios de envio (escolha pelo menos um): </label><br />
        <label><input type="checkbox" name="shipping[meio][Sedex]" value="1" $checked_sedex /> Sedex</label><br />
        <label><input type="checkbox" name="shipping[meio][PAC]" value="1" $checked_pac /> PAC</label>
    </p>
    
    <h4>Como configurar?</h4>
    
    <p>Entre no site do <a href="https://pagseguro.uol.com.br" target="_blank">PagSeguro</a> e entre com seu usuário e senha.</>
    
    <p>Entre no menu <strong>Meus Dados</strong> e acesse, em <strong>Configuração de Checkout</strong>, a opção <strong>Preferências Web e frete</strong>.</p>
    
    <p>Na <strong>Definição de Cálculo do frete</strong> deixe a opção <strong>Fete fixo com desconto</strong> marcada, e configure o <strong>Valor do frete para itens extra</strong> definido como <strong>0,00</strong> conforme a figura.</p>
    
    <div style="border:1px solid #CCC;padding:10px;background:#FDFDFD;">
        <a href="../wp-content/plugins/wp-e-commerce/shipping/pagseguro-frete.png" title="Clique e veja ampliado" target="_blank">
            <img src="../wp-content/plugins/wp-e-commerce/shipping/pagseguro-frete.png" width="100%" />
        </a>
        <p><em>Tela que você encontrará no PagSeguro</em></p>
    </div>
    </td></tr>
    
    EOF;
        }
    
        public function submit_form()
        {
            if(isset($_POST['shipping'])) {
                $shipping  = (array)get_option('pagseguro_shipping_configs');
                $submitted = (array)$_POST['shipping'];
                $values = array_merge($shipping, $submitted);
                $values = array_intersect_key($values, array('cep' => true, 'valor_fixo' => true, 'meio' => array('Sedex' => '0', 'PAC' => '0')));
                update_option('pagseguro_shipping_configs', $values);
            }
            return true;
            }
    
        public function getQuote( $for_display = false )
        {
            require_once(dirname(__FILE__).'/pagseguro/frete.php');
            global $wpdb, $wpsc_cart;
            $zipcode = '';
            if(isset($_POST['zipcode'])) {
                $zipcode = $_POST['zipcode'];
                $_SESSION['wpsc_zipcode'] = $_POST['zipcode'];
            } else if(isset($_SESSION['wpsc_zipcode'])) {
                $zipcode = $_SESSION['wpsc_zipcode'];
            }
            if (!$zipcode) { // Este meio de fretamento só funcionará se tiver ZipCode
                // return null;
                $zipcode = '00000-000';
            }
            $shipping = get_option('pagseguro_shipping_configs');
            if (!is_array($shipping)) {
                $shipping = array();
            }
            extract($shipping+array('cep' => '','valor_fixo' => '', 'meio' => array('Sedex'=>'0', 'PAC'=> '0')));
            // Calculando o valor e o peso total
            $total = 0;
            $preco = 0;
            foreach ($wpsc_cart->cart_items as $item) {
                $preco += $item->total_price;
                $total += $this->converteValor($item->weight, 'gram')*$item->quantity;
            }
            $frete = new PgsFrete();
            $total = number_format($total/1000, 2, '.', '');
            $preco = number_format($preco, 2, ',', '');
            $zipcode = preg_replace('@\D@', '', $zipcode);
            $zipcode = substr($zipcode, 0, 5).'-'.substr($zipcode, 5);
            $oFrete = $frete->gerar($cep, $total, $preco, $zipcode);
            if (!$oFrete OR $oFrete == array('' => NULL,)) {
                $oFrete = array(
                    'Sedex' => $valor_fixo * $total,
                    'PAC'   => $valor_fixo * $total,
                );
            }
            if ($meio['Sedex'] == '0') {
                unset($oFrete['Sedex']);
            }
            if ($meio['PAC'] == '0') {
                unset($oFrete['PAC']);
            }
            return $oFrete;
        }
    
        public function converteValor($weight, $unit)
        {
                    switch($unit) {
                            case "kilogram":
                            $weight = $weight * 0.45359237;
                            break;
    
                            case "gram":
                            $weight = $weight * 453.59237;
                            break;
    
                            case "once":
                            case "ounces":
                            $weight = $weight * 16;
                            break;
    
                            default:
                            $weight = $weight;
                            break;
                    }
            return $weight;
        }
    }
    
    $pagseguro = new pagseguro();
    $wpsc_shipping_modules[$pagseguro->getInternalName()] = $pagseguro;
    ?>

    A linha 107 é esta:

    foreach ($wpsc_cart->cart_items as $item) {

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • Olá Edson,

    Estou quebrando a cabeça aqui com o mesmo problema.
    Vc poderia dizer o que fez pra funcionar essa integracao do WP Ecommerce com o Pagseguro ?

    POR FAVOR !!!

    valeu!
    abs,

    meu contato : robson . zumk [at] gmail . com

    muito obrigado!!

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • O tópico ‘Plugin Wp-E-Commerce e Pagseguro Com Erro’ está fechado para novas respostas.