Last active
November 13, 2024 19:07
-
-
Save guiliredu/d54c91bc0f4ea975172bae4a00f5bca5 to your computer and use it in GitHub Desktop.
Exemplo de pagamento e assinatura pelo PagSeguro com PHP e CURL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$url = 'https://ws.pagseguro.uol.com.br/v2/pre-approvals/request'; | |
$data['email'] = '[email protected]'; | |
$data['token'] = 'TOKEN'; | |
$data['currency'] = 'BRL'; | |
$data['reference'] = $id_cliente; | |
$data['senderName'] = $cliente['nome']; | |
$data['senderEmail'] = $cliente['email']; | |
// $data['senderAreaCode'] = '55'; | |
// $data['senderPhone'] = $cliente['telefone']; | |
// $data['shippingAddressStreet'] = ""; | |
// $data['shippingAddressNumber'] = ""; | |
// $data['shippingAddressPostalCode'] = ""; | |
// $data['shippingAddressCity'] = ""; | |
// $data['shippingAddressState'] = ""; | |
// $data['shippingAddressCountry'] = 'BRA'; | |
$data['redirectURL'] = 'http://seusite.com.br/perfil?pagseguro-ok'; | |
$data['preApprovalCharge'] = 'auto'; | |
$data['preApprovalName'] = 'Assinatura mensal'; | |
$data['preApprovalDetails'] = 'Cobrança de valor mensal para assinatura'; | |
$data['preApprovalAmountPerPayment'] = 199.99; | |
$data['preApprovalPeriod'] = 'MONTHLY'; | |
$data['preApprovalFinalDate'] = '2020-10-17T19:20:30.45+01:00'; | |
$data['preApprovalMaxTotalAmount'] = '999.00'; | |
$data['reviewURL'] = 'http://seusite.com.br.com.br/planos'; | |
$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'){ | |
echo "Unauthorized"; | |
exit(); | |
} | |
curl_close($curl); | |
$xml= simplexml_load_string($xml); | |
if(count($xml->error) > 0){ | |
echo "XML ERRO"; | |
exit(); | |
} | |
header('Location: https://pagseguro.uol.com.br/v2/pre-approvals/request.html?code='.$xml->code); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Documentação disponível em: | |
// https://dev.pagseguro.uol.com.br/documentacao/pagamentos/pagamento-padrao | |
// URL DE SANDBOX | |
$url = 'https://ws.sandbox.pagseguro.uol.com.br/v2/checkout'; | |
$data['email'] = '[email protected]'; | |
$data['token'] = 'TOKEN'; | |
$data['currency'] = 'BRL'; | |
$data['itemId1'] = "1"; | |
$data['itemDescription1'] = "Descrição do item/produto"; | |
$data['itemAmount1'] = 199.90; | |
$data['itemQuantity1'] = 1; | |
$data['itemWeight1'] = 0; | |
$data['reference'] = $id_produto; //aqui vai o código que será usado para receber os retornos das notificações | |
$data['senderName'] = "Nome do comprador"; | |
// $data['senderAreaCode'] = ""; | |
// $data['senderPhone'] = ""; | |
$data['senderEmail'] = "[email protected]"; | |
// $data['shippingType'] = ""; | |
// $data['shippingAddressStreet'] = ""; | |
// $data['shippingAddressNumber'] = ""; | |
// $data['shippingAddressComplement'] = ""; | |
// $data['shippingAddressDistrict'] = ""; | |
// $data['shippingAddressPostalCode'] = ""; | |
// $data['shippingAddressCity'] = ""; | |
// $data['shippingAddressState'] = ""; | |
// $data['shippingAddressCountry'] = ""; | |
$data['redirectURL'] = 'http://seusite.com.br/pedido-finalizado'; | |
$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'){ | |
echo "Unauthorized"; | |
exit(); | |
} | |
curl_close($curl); | |
$xml= simplexml_load_string($xml); | |
if(count($xml->error) > 0){ | |
echo "XML ERRO"; | |
exit(); | |
} | |
// Utilize sua lógica para atualizar o pedido com o código da transação, para ser atualizado depois | |
$db->query("UPDATE pedido SET token = '{$xml->code}' WHERE id = $pedido_id"); | |
// Redireciona o comprador para a página de pagamento | |
header('Location: https://sandbox.pagseguro.uol.com.br/v2/checkout/payment.html?code='.$xml->code); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$code = $_POST['notificationCode']; | |
$type = $_POST['notificationType']; | |
if($type == 'transaction'){ | |
$url = "https://ws.sandbox.pagseguro.uol.com.br/v2/transactions/notifications/".$code."[email protected]&token=TOKEN"; | |
$content = file_get_contents($url); | |
$xml = simplexml_load_string($content); | |
if($xml->status > 3){ | |
$db->query("UPDATE pedido SET status = 2 WHERE token = '{$xml->reference}'"); | |
} | |
} |
Alguém pode me informar como seria para realizar o cancelamento de uma assinatura feita pelo usuário? No caso eu poderia salvar o código que vai na URL gerada, com isso eu já conseguiria realizar o cancelamento?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Inicialmente parabéns pelo código, muito bom mesmo, já uso em alguns projeto, mas hoje me deparei com, a seguinte situação:
No caso do parâmetro
$data['itemDescription1']
como fazer para evitar caracteres estranhos?Por exemplo: "AquisiÃÃo do plano: BÃsico"
já tentei
header('Content-Type: text/html; charset=utf-8');
a página está setada com
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
Há algum parâmetro específico para evitar algo do tipo
AquisiÃÃo do plano: BÃsico
e ser Exibido na página de checkout isso:
Aquisição do plano: Básico