Paga complementar a ajuda do Adriano, vou colocar uma action do um controller, para que você possa resgatar o dados de um pedido, junto com dados do cliente e os itens dos pedidos, assim você consegue montar uma carrinho completo do pagseguro, com quase todos os dados.
E bom quem não tiver usando o composer, que comece a usar, com ele, as atualizações desses pacotes serão sempre atualizadas.
Para quem tiver usando o composer, é so acrescentar "pagseguro/php": "dev-master", no composer.json da sua aplicação, quem não tem o composer instalado pode baixar direto do repositório git do Pagseguro (https://github.com/pagseguro/php)
PagseguroController
public function init() {
spl_autoload_unregister(array('YiiBase', 'autoload'));
require_once(Yii::app()->basePath . '/vendors/pagseguro/PagSeguroLibrary.php');
spl_autoload_register(array('YiiBase', 'autoload'));
}
public function actionIndex($id) {
PagSeguroConfig::setApplicationCharset('UTF-8');
$paymentRequest = new PagSeguroPaymentRequest();
$mb_substr = (function_exists("mb_substr")) ? true : false;
$model = Pedido::model()->findByPk($id);
/*
* Dados do cliente
*/
// Ajuste no nome do comprador para o máximo de 50 caracteres exigido pela API
$customer_name = trim($model->idCliente->nome);
if ($mb_substr) {
$customer_name = mb_substr($customer_name, 0, 50, 'UTF-8');
} else {
$customer_name = utf8_encode(substr(utf8_decode($customer_name), 0, 50));
}
$paymentRequest->setCurrency('BRL');
$paymentRequest->setSenderName($customer_name);
$paymentRequest->setSenderEmail(trim($model->idCliente->email)); // há limitação de 60 caracteres de acordo com a API
$telefone = preg_replace("/[^0-9]/", '', $model->idCliente->telefone_fixo);
if (strlen($telefone) == 10) {
$paymentRequest->setSenderPhone(substr($telefone, 0, 2), substr($telefone, 2, strlen($telefone) - 1));
}
/*
* Frete
*/
$paymentRequest->setShippingType(3); // 3: Não especificado
$paymentRequest->setShippingAddress(
Array(
'postalCode' => $model->idCliente->cep,
'street' => $model->idCliente->endereco,
'number' => $model->idCliente->numero,
'complement' => $model->idCliente->complemento,
'district' => $model->idCliente->bairro,
'city' => $model->idCliente->cidade,
'state' => $model->idCliente->estado,
'country' => 'BR'
)
);
/*
* Produtos
*/
foreach ($model->pedidoItems as $item) {
// limite de 100 caracteres para a descriço do produto
if ($mb_substr) {
$description = mb_substr($item->idProduto->titulo, 0, 100, 'UTF-8');
} else {
$description = utf8_encode(substr(utf8_decode($item->idProduto->titulo), 0, 100));
}
$item = Array(
'id' => $item->idProduto->primaryKey,
'description' => $description,
'quantity' => $item->quantidade,
'amount' => $item->valor,
'weight' => 2 * 1000,
//'shippingCost' => ($model->envio / count($model->pedido_itens)), //Custo do envio, caso o calculo do correios seja feito pelo projeto
);
$paymentRequest->addItem($item);
}
// Referência do pedido no PagSeguro
$paymentRequest->setReference($model->primaryKey . "_pedido");
// url para redirecionar o comprador ao finalizar o pagamento
$paymentRequest->setRedirectUrl(Yii::app()->createAbsoluteUrl('pagseguro/success'));
// obtendo frete, descontos e taxas
// $total = number_format($model->envio, 2);
//
// if ($total > 0) {
// $item = Array(
// 'id' => 'extra_amount',
// 'description' => $model->descricao_envio,
// 'quantity' => 1,
// 'amount' => $total
// );
// $paymentRequest->addItem($item);
// } else if ($total < 0) {
// $paymentRequest->setExtraAmount($total);
// }
/*
* Fazendo a chamada para a API de Pagamentos do PagSeguro.
* Se tiver sucesso, retorna o código (url) de requisição para este pagamento.
*/
try {
$credentials = new PagSeguroAccountCredentials('EMAIL_DO_PAGSEGURO', 'TOKEN_DO_PAGSEGURO');
$url = $paymentRequest->register($credentials);
$this->redirect($url);
} catch (PagSeguroServiceException $e) {
Yii::log('PagSeguro: ' . $e->getMessage(), CLogger::LEVEL_INFO);
throw new Exception($e->getMessage());
}
}