Visitar na Amazon

quinta-feira, 29 de junho de 2017

Como criar uma requisição de pagamento do PagSeguro via parametros HTTP usando PHP

Enviado em 13:22 - por Diguinho - Marcadores :

A requisição de pagamento informando os dados em parâmetros HTTP funciona de forma muito semelhante ao formato XML.
A primeira coisa a ser definida é para qual URL será enviado os dados, diferente do mostrado no formato XML não iremos enviar nenhum parâmetro via GET, então ficará algo mais ou menos assim:
1
$url = 'https://ws.pagseguro.uol.com.br/v2/checkout';
De acordo com a documentação os dados devem ser enviados como uma string no padrão parametro1=valor2&parametro2=valor2&parametro3=va… A mesma estrutura do parâmetro GET. Então os dados a ser enviados ficará dessa forma:
1
$data = 'email=seuemail@dominio.com.br&token=95112EE828D94278BD394E91C4388F20&currency=BRL&itemId1=0001&itemDescription1=Notebook Prata&itemAmount1=24300.00&itemQuantity1=1&itemWeight1=1000&itemId2=0002&itemDescription2=Notebook Rosa&itemAmount2=25600.00&itemQuantity2=2&itemWeight2=750&reference=REF1234&senderName=Jose Comprador&senderAreaCode=11&senderPhone=56273440&senderEmail=comprador@uol.com.br&shippingType=1&shippingAddressStreet=Av. Brig. Faria Lima&shippingAddressNumber=1384&shippingAddressComplement=5o andar&shippingAddressDistrict=Jardim Paulistano&shippingAddressPostalCode=01452002&shippingAddressCity=Sao Paulo&shippingAddressState=SP&shippingAddressCountry=BRA';
Enviando dessa forma o código ficará muito difícil de montar os parâmetros dessa forma irá ficar muito confuso de se trabalhar e entender posteriormente, então iremos montar preparar os dados utilizando um array, assim o código ficará com um visual agradável.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$data['email'] = 'seuemail@dominio.com.br';
$data['token'] = '95112EE828D94278BD394E91C4388F20';
$data['currency'] = 'BRL';
$data['itemId1'] = '0001';
$data['itemDescription1'] = 'Notebook Prata';
$data['itemAmount1'] = '24300.00';
$data['itemQuantity1'] = '1';
$data['itemWeight1'] = '1000';
$data['itemId2'] = '0002';
$data['itemDescription2'] = 'Notebook Rosa';
$data['itemAmount2'] = '25600.00';
$data['itemQuantity2'] = '2';
$data['itemWeight2'] = '750';
$data['reference'] = 'REF1234';
$data['senderName'] = 'Jose Comprador';
$data['senderAreaCode'] = '11';
$data['senderPhone'] = '56273440';
$data['senderEmail'] = 'comprador@uol.com.br';
$data['shippingType'] = '1';
$data['shippingAddressStreet'] = 'Av. Brig. Faria Lima';
$data['shippingAddressNumber'] = '1384';
$data['shippingAddressComplement'] = '5o andar';
$data['shippingAddressDistrict'] = 'Jardim Paulistano';
$data['shippingAddressPostalCode'] = '01452002';
$data['shippingAddressCity'] = 'Sao Paulo';
$data['shippingAddressState'] = 'SP';
$data['shippingAddressCountry'] = 'BRA';
$data['redirectURL'] = 'http://www.sounoob.com.br/paginaDeAgracedimento';
Lembrando que o campo redirectURL SÓ IRÁ FUNCIONAR SE NA SUA CONTA CONTA ESTIVER MARCADO “Quero receber somente pagamentos via API
Como os dados estão em array e o PagSeguro só será possivel completar a requisição enviando no formato similar ao GET, então usaremos a http_build_query para converter o array no formato correto
1
$data = http_build_query($data);
Vamos iniciar o cURL e passar como endereço, a URL que criamos no começo do tutorial.
1
$curl = curl_init($url);
Caso ocorra erros como: Fatal error: Call to undefined function curl_init(); Verifique se a a biblioteca do cURL está presente e ativado em seu servidor.
A URL a ser enviado os dados contem um certificado de segurança, nesse caso vamos ignorá-lo utilizando o parâmetro abaixo.
1
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
O PagSeguro deverá responder enviando alguma coisa, vamos avisar ao cURL que precisaremos desses dados.
1
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
Vamos avisar ao cURL que esses dados será enviado via POST
1
curl_setopt($curl, CURLOPT_POST, true);
O PagSeguro só irá aceitar a versão 1.1 do HTTP, logo devemos especificar isso tambem.
1
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
E por fim,  iremos informar os dados que o cURL irá transportar.
1
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
Com tudo pronto é hora de executar o cURL e gravar a resposta do PagSeguro na variável $xml
1
$xml= curl_exec($curl);
Se os dados de autenticação (e-mail e token) estiverem incorretos, o PagSeguro irá exibir o texto: Unauthorized. Vamos verificar se ocorreu esse erro, e redirecionar o comprador para uma tela de erro qualquer.
1
2
3
4
5
6
if($xml == 'Unauthorized'){
//Insira seu código de prevenção a erros

header('Location: erro.php?tipo=autenticacao');
exit;//Mantenha essa linha
}
Para liberar memoria deveremos fechar o cURL
1
curl_close($curl);
Caso tudo ocorra bem, dentro da variável $xml deverá ter um XML similar ao abaixo:
1
2
3
4
5
<?xml version="1.0" encoding="ISO-8859-1"?>
<checkout>
<code>8CF4BE7DCECEF0F004A6DFA0A8243412</code>
<date>2010-12-02T10:11:28.000-02:00</date>
</checkout>
Caso ocorra erro você terá algo como:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<errors>
<error>
<code>11004</code>
<message>Currency is required.</message>
</error>
<error>
<code>11005</code>
<message>Currency invalid value: 100</message>
</error>
</errors>
Utilizaremos a simplexml_load_string para converter a resposta em um objeto
1
$xml= simplexml_load_string($xml);
Próximo passo é verificar o PagSeguro enviou algum erro
1
2
3
4
5
6
if(count($xml -> error) > 0){
//Insira seu código de tratamento de erro, talvez seja útil enviar os códigos de erros.

header('Location: erro.php?tipo=dadosInvalidos');
exit;
}
Caso não tenha parado no caso acima é só pegar o código de pagamento e redirecionar o comprador para a tela de pagamento.
1
header('Location: https://pagseguro.uol.com.br/v2/checkout/payment.html?code=' . $xml -> code);
Lembrando que, esse código de pagamento, só irá servir para a requisição de pagamento, ele é diferente do código de transação e do código de notificação.
Veja o código na integra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
$url = 'https://ws.pagseguro.uol.com.br/v2/checkout';

//$data = 'email=seuemail@dominio.com.br&amp;token=95112EE828D94278BD394E91C4388F20&amp;currency=BRL&amp;itemId1=0001&amp;itemDescription1=Notebook Prata&amp;itemAmount1=24300.00&amp;itemQuantity1=1&amp;itemWeight1=1000&amp;itemId2=0002&amp;itemDescription2=Notebook Rosa&amp;itemAmount2=25600.00&amp;itemQuantity2=2&amp;itemWeight2=750&amp;reference=REF1234&amp;senderName=Jose Comprador&amp;senderAreaCode=11&amp;senderPhone=56273440&amp;senderEmail=comprador@uol.com.br&amp;shippingType=1&amp;shippingAddressStreet=Av. Brig. Faria Lima&amp;shippingAddressNumber=1384&amp;shippingAddressComplement=5o andar&amp;shippingAddressDistrict=Jardim Paulistano&amp;shippingAddressPostalCode=01452002&amp;shippingAddressCity=Sao Paulo&amp;shippingAddressState=SP&amp;shippingAddressCountry=BRA';
/*
Caso utilizar o formato acima remova todo código abaixo até instrução $data = http_build_query($data);
*/

$data['email'] = 'seuemail@dominio.com.br';
$data['token'] = '95112EE828D94278BD394E91C4388F20';
$data['currency'] = 'BRL';
$data['itemId1'] = '0001';
$data['itemDescription1'] = 'Notebook Prata';
$data['itemAmount1'] = '24.00';
$data['itemQuantity1'] = '1';
$data['itemWeight1'] = '1000';
$data['itemId2'] = '0002';
$data['itemDescription2'] = 'Notebook Rosa';
$data['itemAmount2'] = '20.00';
$data['itemQuantity2'] = '2';
$data['itemWeight2'] = '750';
$data['reference'] = 'REF1234';
$data['senderName'] = 'Jose Comprador';
$data['senderAreaCode'] = '11';
$data['senderPhone'] = '56273440';
$data['senderEmail'] = 'comprador@uol.com.br';
$data['shippingType'] = '1';
$data['shippingAddressStreet'] = 'Av. Brig. Faria Lima';
$data['shippingAddressNumber'] = '1384';
$data['shippingAddressComplement'] = '5o andar';
$data['shippingAddressDistrict'] = 'Jardim Paulistano';
$data['shippingAddressPostalCode'] = '01452002';
$data['shippingAddressCity'] = 'Sao Paulo';
$data['shippingAddressState'] = 'SP';
$data['shippingAddressCountry'] = 'BRA';
$data['redirectURL'] = 'http://www.sounoob.com.br/paginaDeAgracedimento';

$data = http_build_query($data);

$curl = curl_init($url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$xml= curl_exec($curl);

if($xml == 'Unauthorized'){
//Insira seu código de prevenção a erros

header('Location: erro.php?tipo=autenticacao');
exit;//Mantenha essa linha
}
curl_close($curl);

$xml= simplexml_load_string($xml);
if(count($xml -> error) > 0){
//Insira seu código de tratamento de erro, talvez seja útil enviar os códigos de erros.

header('Location: erro.php?tipo=dadosInvalidos');
exit;
}
header('Location: https://pagseguro.uol.com.br/v2/checkout/payment.html?code=' . $xml -> code);
Lembrando que é possível também enviar informações para incluir uma assinatura(cobrança recorrente) tudo nesse mesmo processo.

Sobre o autor
Gabriel Medina é o autor deste blog, atualmente estuda eng. elétrica, ama jogar damas, assistir desenhos, filmes e séries, além de praticar esportes saudaveis.
Inscrever-se neste Blog via Email :

0 Comentários:

Observação: somente um membro deste blog pode postar um comentário.

© 2017 Webzoon. Designed by Bloggertheme9
Powered by Blogger.
back to top