Implementaçao do PagSeguro

Estou desenvolvendo uma aplicaçao que é uma loja simples de venda.

  • Gostaria de saber se alguem tem uma extensao de carrinho de compra

  • Alguem ja implementou o pagseguro em um carrinho proprio, e poderia compartilhar o codigo.

  • A respeito do frete como faria o calculo.

  • Envio da lista de produtos e retorno do pagseguro, alguem ja fex esta implementaçao que poderia dar uma help.

Valew amigos.

Edson,

Segue abaixo minhas respostas.

Até o momento não sei se existe ou se alguem fez uma extensão.

Eu ja fiz algumas implementação no cliente do pagseguro com carrinho do pagseguro e carrinho próprio, que é onde contêm as tabela pedidos que ficar armazenado no seu sistema.

http://www.yiiframework.com/forum/index.php/topic/12594-pagseguro-uol/page__p__61605

Você envia o peso de cada produto para o pagseguro, e deixa ele fazer o calculo do frete. Acho melhor fazer isso, do que quebrar a cabeça colocando um calculo de envio no sistema, por que esse ano o correios já mudo a forma de calculo de produto pelo tamanho da caixa do produto, ai fica ao seu critério.

Eu já fiz e sempre funciono para a versão 1, agora na versão 2 da API ainda não desenvolvi.

No link que passei acima tem o código do retorno automático da versão 1.

Eu tenho algo aqui bem primitivo em forma de componente, segue abaixo o código:


<?php

class UPagseguro

{

	public $email;

	public $type = 'CP';

	public $currency = 'BRL';

	public $shipping = 'EN';

	public $encoding = 'UTF-8';

	public $url = 'https://pagseguro.uol.com.br/checkout/checkout.jhtml';

	public $verifyUrl = 'https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml';

	public $fields = array();

	public $data = array();

	public $token;

	

	public function __construct($options)

	{

		foreach($options as $k=>$v)

			$this->$k = $v;

		$this->addField('email_cobranca',$this->email);

		$this->addField('tipo',$this->type);

		$this->addField('moeda',$this->currency);

		$this->addField('tipo_frete',$this->shipping);

		$this->addField('encoding',$this->encoding);

	}

	

	public function addField($key,$value)

	{

		$this->fields[$key] = $value;

	}

	

	public function getForm()

	{

		$html = CHtml::beginForm($this->url,'post',array('id'=>'payseguroForm'));

		foreach ($this->fields as $name => $value)

			$html.= CHtml::hiddenField($name,$value);

		$html.= CHtml::endForm();

		$html.= CHtml::script('jQuery("#payseguroForm").submit();');

		

		return $html;

	}

	

	public function verify()

	{

		$data = 'Comando=validar&Token='.$this->token;

		foreach($_POST as $k=>$v)

		{

			$this->data[$k] = $v;

			$v = get_magic_quotes_gpc()?$v:addslashes($v);

			$data.= "&$k=$v";

		}

		

		$curl = curl_init();

		curl_setopt($curl, CURLOPT_URL, $this->verifyUrl);

		curl_setopt($curl, CURLOPT_POST, true);

		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

		curl_setopt($curl, CURLOPT_HEADER, false);

		curl_setopt($curl, CURLOPT_TIMEOUT, 30);

		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

		$content = trim(curl_exec($curl));

		curl_close($curl);

		

		/*

		$result = '';

		$fp = fsockopen("ssl://pagseguro.uol.com.br", 443, $errno, $errstr, 30);

		if (!$fp) {

		    echo "$errstr ($errno)<br />\n";

		} else {

		    $out = "POST /pagseguro-ws/checkout/NPI.jhtml HTTP/1.1\r\n";

		    $out .= "Host: pagseguro.uol.com.br\r\n";

		    $out .= "Content-type: application/x-www-form-urlencoded\r\n"; 

			$out .= "Content-length: " . strlen($data) . "\r\n"; 

		    $out .= "Connection: Close\r\n\r\n";

		    fwrite($fp, $out);

		    fwrite($fp, $data); 

		    while (!feof($fp)) {

		        $result.= fgets($fp, 128);

		    }

		    fclose($fp);

		}

		$result = preg_replace('/\r/','',$result);

		list($headers,$content) = explode("\n\n",$result);

		*/

		

		return $content == "VERIFICADO";

	}

	

	public function formatAmount($amount)

	{

		$parts = explode('.',$amount);

		if(!isset($parts[1]))

			$parts[1] = '00';

		return implode('',$parts);

	} ?>

Blz Broder,

Mais vc esta usando um carrinho?

Mostra ai como vc esta utilizando este componente.

valew

Só adcionar ele ao config e chamar ele no controller…




	$p = Yii::app()->UPagseguro($_POST['Formulario']);



Formulário seriam os dados enviados pela tela de Checkout com os produtos em questão!