Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
É porque o campo o conteudo de $dados deveria ser uma string e não um array.
O formato deveria ser parametro=valor¶metro2=valor2¶metro3=valor3...
Creio que com isso resolve.
O PagSeguro criou uma biblioteca que tem isso pronto,e já vem com vários tratamento de erros.
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.
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);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¶2=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.
Cara não diz besteira... pode ter funcionando assim porem o certo é enviar tudo post
veja na documentação
eu mesmo acabei de fazer um teste e funcionou...
enfim... aconselho fazer do jeito certo e não dar errado mais tarde...
>
Cara não diz besteira... pode ter funcionando assim porem o certo é enviar tudo post
veja na documentação
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¶2=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.
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
Bom gente, tô evoluindo...
Agora já está quase tudo dando certo , mas e me atolei no seguinte ponto:
@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.
Estava em notificao , agora estou em retorno. Como nao tem como deletar a postagem , eu redirecionei pro meu topico.
Abc
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;Gere um novo token e veja se funciona...
Aconselho chamar direto no navegador a URL com os dados estaticos para ver se funciona certinho...
É porque o campo o conteudo de $dados deveria ser uma string e não um array.
O formato deveria ser parametro=valor¶metro2=valor2¶metro3=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.