Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hildds

[PagSeguro API v2] Problema Unauthorized

Recommended Posts

Olá, estou tentando utilizar a nova API do PagSeguro utilizando esse código:

 

		$cURL = curl_init();

		$dados = array(
			// -> PRODUTO
			"email" => EMAIL,
			"token" => TOKEN,
			"currency" => "BRL",
			"itemId1" => $oferta->PID["id"],
			"itemDescription1" => $oferta->PID["nome"],
			"itemAmount1" => number_format($oferta->PID["preco_coletivo"]/100, 2),
			"itemQuantity1" => $_POST["inputOfertaQntd"],
			"reference" => $oferta->PID["id"],

			// -> USUÁRIO
			"senderEmail" => $uid["nome"],
			"senderName" => $uid["email"],
			"shippingAddressPostalCode" => $uid["cep"],
			"shippingAddressStreet" => $uid["endereco"],
			"shippingAddressNumber" => $uid["numero"],
			"shippingAddressComplement" => $uid["complemento"],
			"shippingAddressDistrict" => $uid["bairro"],
			"shippingAddressCity" => $uid["cidade"],
			"shippingAddressState " => $uid["estado"],
			"senderAreaCode" => $uid["ddd"],
			"senderPhone" => $uid["telefone"],
			"shippingAddressCountry", "BRA",

			"redirectURL", url."/obrigado"
		);

		curl_setopt($cURL, CURLOPT_URL, "https://ws.pagseguro.uol.com.br/v2/checkout");
		curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, false);
		curl_setopt($cURL, CURLOPT_POST, true);
		curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 20);
		curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($cURL, CURLOPT_HEADER, false);
		curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($cURL, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded; charset=UTF-8"));
		curl_setopt($cURL, CURLOPT_POSTFIELDS, $dados);
		$resultado = curl_exec($cURL);
		curl_close($cURL);
		echo $resultado;

 

E só me retorna Unauthorized.

 

O que faço? Tentei muita coisa, debuguei e nada..

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É porque o campo o conteudo de $dados deveria ser uma string e não um array.

O formato deveria ser parametro=valor&parametro2=valor2&parametro3=valor3...

 

Creio que com isso resolve.

 

O PagSeguro criou uma biblioteca que tem isso pronto,e já vem com vários tratamento de erros.

 

https://pagseguro.uol.com.br/v2/guia-de-integracao/tutorial-da-biblioteca-pagseguro-em-php.html#pagamentos

 

Nesse mesmo link tem instruções de outras funcionalidades que dar para usar com essa biblioteca, vale a pena dar uma olhada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É porque o campo o conteudo de $dados deveria ser uma string e não um array.

O formato deveria ser parametro=valor&parametro2=valor2&parametro3=valor3...

 

Creio que com isso resolve.

 

O PagSeguro criou uma biblioteca que tem isso pronto,e já vem com vários tratamento de erros.

 

https://pagseguro.uol.com.br/v2/guia-de-integracao/tutorial-da-biblioteca-pagseguro-em-php.html#pagamentos

 

Nesse mesmo link tem instruções de outras funcionalidades que dar para usar com essa biblioteca, vale a pena dar uma olhada.

Andei dando uma olhada da biblioteca e vi que eles também tratam com o POST method, que o que eu utilizei... Logo deve haver uma maneira para corrigir isso.

 

Não queria utilizar esse biblioteca, pois estou estudando para fazer algo similar, logo preciso aprender o porque de não funcionar :D

 

Obrigado, o erro continua persistindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pow já tem coisa pronta e você quer inventar a roda novamente?

 

 

Bom de qualquer jeito...

 

Como está a variável dados, posta um exemplo de como você está enviando... ( não pode enviar o array, tem que ser como falei anteriormente )?

 

veriifquei que seu curl está diferente do meu...

 

Inclua o scritp abaixo e na variavel $data insira a mesma coisa de dados e post o resultado...

 

ahh deixa o charset como ISO... é o que o PagSeguro trabalha

 

//Definindo o cabecalho do post
//Identificando e definindo o nome do host
$headers[] = "Host: " . $_SERVER["SERVER_NAME"]; //dominio.com.br
//Identificando o tamanho de $data para definir o tamanho da mensagem
$headers[] = "Content-Length: " . strlen($data);
//Definindo o tipo e codificacao do conteudo da mensagem
$headers[] = "Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1";
//Iniciando o CURL e a url de destino
$ch = curl_init('https://ws.pagseguro.uol.com.br/v2/checkout');
//Definindo metodo POST
curl_setopt($ch, CURLOPT_POST, true);
//Definindo saida de cabecalho na pagina
curl_setopt($ch, CURLOPT_HEADER, false);
//Definindo versao do HTTP
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
//Definindo cabecalho
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
//Definindo dados do formulario
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//Definindo exibicao da resposta proveniente do servidor de destino
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Definindo timeout
curl_setopt($ch, CURLOPT_TIMEOUT, $curlTimeOut);
//Definindo validacao de SSL
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//Atribuindo a resposta do servidor de destino em $return
$return = curl_exec($ch);
//Fechando a conexao
curl_close($ch);

print_r($return);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Edit:

@senartes

 

The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path. The filetype can be explicitly specified by following the filename with the type in the format ';type=mimetype'. This parameter can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data. As of PHP 5.2.0, files thats passed to this option with the @ prefix must be in array form to work.

http://www.php.net/manual/en/function.curl-setopt.php

 

Mas engraçado, fiz o que você falou e deu certo... Estranho, pois o manual PHP fala que pode ser um array e sempre trabalhei no cURL com Array, mas com o PagSeguro não deu, muito estranho... Mesmo assim muito obrigado.

 

Abraços, problema corrigido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara não diz besteira... pode ter funcionando assim porem o certo é enviar tudo post

 

veja na documentação

https://pagseguro.uol.com.br/v2/guia-de-integracao/api-de-pagamentos.html#v2-item-api-de-pagamentos-parametros-http

 

eu mesmo acabei de fazer um teste e funcionou...

 

enfim... aconselho fazer do jeito certo e não dar errado mais tarde...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara não diz besteira... pode ter funcionando assim porem o certo é enviar tudo post

 

veja na documentação

https://pagseguro.uol.com.br/v2/guia-de-integracao/api-de-pagamentos.html#v2-item-api-de-pagamentos-parametros-http

 

eu mesmo acabei de fazer um teste e funcionou...

 

enfim... aconselho fazer do jeito certo e não dar errado mais tarde...

@senartes

 

The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path. The filetype can be explicitly specified by following the filename with the type in the format ';type=mimetype'. This parameter can either be passed as a urlencoded string like 'para1=val1&para2=val2&...' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data. As of PHP 5.2.0, files thats passed to this option with the @ prefix must be in array form to work.

http://www.php.net/manual/en/function.curl-setopt.php

 

Mas engraçado, fiz o que você falou e deu certo... Estranho, pois o manual PHP fala que pode ser um array e sempre trabalhei no cURL com Array ( PagSeguro não aceita o Content-Type ), mas com o PagSeguro não deu, talvez pelo meu Content-Type... Mesmo assim muito obrigado.

 

O que falei no post anterior foi besteira.

 

Para corrigir basta pegar o Array dá um http_build_query().

 

 

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa , tudo bem?

Fui no pagseguro e ativei a API e gerei o token.

Depois fiz o download conforme dito ai em cima e coloquei nas minhas pastas,

porém não consegui fazer o pagamento.

 

Editei o arquivo PagSeguroConfig

$PagSeguroConfig['credentials']['email'] = "javxxxxxxxxxxxx";

$PagSeguroConfig['credentials']['token'] = "EC6xxxxxxxxxxxxxxxxxxxxxx";

 

no createPaymentRequest editei:

require_once "../include/library/pagseguroLibrary/PagSeguroLibrary.php";

$credentials = new AccountCredentials("javxxxxxxxxxxxxxxx", "EC6xxxxxxxxxxxxxxxxxxxxxxxxxx");

 

O resto eu deixei como está, só pra fazer um teste mesmo.

 

Dá o seguinte erro:

Fatal error: Uncaught exception 'Exception' with message 'CURL can't connect: connect() timed out!' in /home/supersav/public_html/include/library/pagseguroLibrary/utils/HttpConnection.class.php:96 Stack trace: #0 /home/supersav/public_html/include/library/pagseguroLibrary/utils/HttpConnection.class.php(49): HttpConnection->curlConnection('POST', 'https://ws.pags...', Array, 20, 'ISO-8859-1') #1 /home/supersav/public_html/include/library/pagseguroLibrary/service/PaymentService.class.php(52): HttpConnection->post('https://ws.pags...', Array, 20, 'ISO-8859-1') #2 /home/supersav/public_html/include/library/pagseguroLibrary/domain/PaymentRequest.class.php(420): PaymentService::createCheckoutRequest(Object(AccountCredentials), Object(PaymentRequest)) #3 /home/supersav/public_html/include/compiled/order_pay.php(77): PaymentRequest->register(Object(AccountCredentials)) #4 /home/supersav/public_html/include/compiled/order_pay.php(97): createPaymentRequest::main() #5 /home/supersav/public_html/order/pay.php(124): include('/home/sup in /home/supersav/public_html/include/library/pagseguroLibrary/utils/HttpConnection.class.php on line 96

 

Alguém poderia me dar alguma dica do que pode estar acontecendo de errado?

Já procurei nos foruns do pagseguro mas ninguem responde. Esse post parece mais pertinente.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

@urubullino O Seu problema está com retorno automático ou o sistema de notificação?

Porque esse tópico aqui é sobre a API de notificação, sua pergunta anterior está relacionado a biblioteca do PagSeguro ( que usa a API de notificação ), já o seu ultimo post é relacionado ao retorno automático.

 

Tente não misturar as coisas para que quem estiver pesquisando não se confunda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou obtendo esta mesma resposta, Unauthorized, no momento da consulta ao notificationCode, que recebo via notificação.

 

Interessante que chegou a funcionar, mas esta mensagem agora é frequente.

 

Como não achei no fórum outro tópico mais adequado, posto aqui.

 

       $code = '29B5C1-9933F633F6F5-A114F49F8F25-DEA413';

       $url    = 'https://ws.pagseguro.uol.com.br/v2/transactions/notifications/'.$code.'?email='.$email.'&token='.$Token;

       $curl = curl_init($url);
       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
       curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
       $output= curl_exec($curl);
       curl_close($curl);

    return $output;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.