Criando uma requisição de pagamento do PagSeguro via parametros HTTP usando PHP – Sem utilizar a biblioteca oficial

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 protected]&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&[email protected]&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'] = '[email protected]';
$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'] = '[email protected]';
$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
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
<?php
$url = 'https://ws.pagseguro.uol.com.br/v2/checkout';

//$data = '[email protected]&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;[email protected]&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'] = '[email protected]';
$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'] = '[email protected]';
$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.

Veja detalhes em: Requisição de pagamento do PagSeguro com assinatura associada usando PHP

Como sempre, duvidas sugestões e qualquer coisa relacionada excerto reclamações rs  só comentar abaixo…

Veja outros posts como este aqui:

Utilizando as APIs do PagSeguro e PHP – Sem utilizar a biblioteca oficial.