Retorno Automático Pagseguro

Amigos, sei que existem tópicos sobre o assunto, porém vi que já são um poco antinguinhos e preciso muito de uma ajudinha.

Eu criei o retorno automático, porém nos testes que realizei o status da transação não está sendo editada no meu sistema.




public function actionRetornoPagseguro()

{

	$code = (isset($_POST['notificationCode']) && trim($_POST['notificationCode']) !== ""  ? trim($_POST['notificationCode']) : null);

	$type = (isset($_POST['notificationType']) && trim($_POST['notificationType']) !== ""  ? trim($_POST['notificationType']) : null);


	if ( $code && $type ) {


		$notificationType = new PagSeguroNotificationType($type);

		$strType = $notificationType->getTypeFromValue();


		switch($strType) {


			case 'TRANSACTION':

				$credentials = new PagSeguroAccountCredentials($email, $token);


				try {

					$transaction = PagSeguroNotificationService::checkTransaction($credentials, $code);


					$transactionStatus = $transaction->getStatus(); //Status da transação

					$id_pedido = $transaction->getReference(); //Código de referência da transação


					$model = Fatura::model()->findByPk($id_pedido);


					switch ($transactionStatus->getTypeFromValue()) {

						case 'WAITING_PAYMENT':

							$model->status = "Em Aberto";

							break;

						case 'IN_ANALYSIS':

							$model->status = "Em Análise";

							break;

						case 'PAID':

							$model->status = "Paga";

							break;

						case 'AVAILABLE':

							$model->status = "Completa";

							break;

						case 'IN_DISPUTE':

							$model->status = "Em Disputa";

							break;

						case 'REFUNDED':

							$model->status = "Devolvida";

							break;

						case 'CANCELLED':

							$model->status = "Cancelada";

							break;

					}


					if ($model->validate()) {


						$model->save()

					}

				} catch (PagSeguroServiceException $e) {

					die($e->getMessage());

				}

				break;


			default:

				LogPagSeguro::error("Unknown notification type [".$notificationType->getValue()."]");


		}


		self::printLog($strType);


	} else {


		LogPagSeguro::error("Invalid notification parameters.");

		self::printLog();

	}

}



Se alguém puder me ajudar dizendo por que não está salvando o status eu agradeço =)

Abraços

Ah sim, outra pergunta… como posso realizar testes sem precisar realizar o pagamento no PagSeguro?

Tem o Ambiente de testes: http://pagseguro.visie.com.br/ambiente-para-testes-locais/

:D

Marnei,

PagSeguro não tem sandbox, todos os testes tem que ser feito por pagamento. Existem alguns número de cartão de crédito que a operadora oferece para teste.

http://www.uolhost.com.br/blog/como-simular-um-pagamento-com-cartao-de-credito-na-loja-virtual-usando-o-pagseguro

Como estou vendo, você ta usando a V2 da API, então o Teste de Ambiente que o Gustavo passou não irá funcionar, ela só funciona para V1.

Só uma dúvida:


$id_pedido = $transaction->getReference();

Está variável, você esta enviando somente o ID do Fatura? Ou está enviando mais alguns dados na referência?

Uma ajuda no seu código, coloca um log de validação no seu código, antes do $model->validate(), pode ter algum campo obrigatório que precisa ser preenchido.

Ex.:


...

Yii::log('PagSeguro: ' . CActiveForm::validate($model));

if ($model->validate()) {

...

Este log é gravado em /protected/runtime/application.log

Só pra alertar. Pelo menos comigo isso tem ocorrido as vezes, sem nenhum motivo aparente.

Como disse o Newerton, no envio do pagamento…vc ta passando o codigo da fatura do seu sistema?

Abraço

Achei hoje esse arquivos para teste local.

Parece bacana hein! ^^

Vou dar uma olhada!