Olá, tudo bem?
Estou desenvolvendo uma integração do pagseguro com checkout transparente e pagamento recorrente. Na documentação oficial: https://dev.pagseguro.uol.com.br/documentacao/pagamentos/pagamento-recorrente-transparente esta falando que preciso enviar os seguinte requisição:
{
"preApproval": {
"name": "Assinatura da Revista Fictícia",
"charge": "AUTO",
"period": "MONTHLY",
"amountPerPayment": 100.00,
"expiration": {
"value": 1,
"unit": "YEARS"
}
},
"receiver": {
"email": "seu@email.com.br"
}
}
Para a URL: https://ws.pagseguro.uol.com.br/pre-approvals/request?email=a@b.com&token=123ABC
Mas eu não tenho a menor ideia de como fazer isso, nunca trabalhei com json como funciona este envio??
Estou tentando assim (seguindo um tutorial que encontrei na net):
<?php
$servidor = "https://ws.sandbox.pagseguro.uol.com.br/pre-approvals/request?email=financeiro@lumihost.com.br&token=DC351FB3A06742D289FE052738AA8F6D";
$req = '{
"preApproval": {
"name": "Assinatura da Revista Fictícia",
"charge": "AUTO",
"period": "MONTHLY",
"amountPerPayment": 100.00,
"expiration": {
"value": 1,
"unit": "YEARS"
}
},
"receiver": {
"email": "seu@email.com.br"
}
}';
$contents = file_get_contents($servidor, null, $req);
$resposta = json_decode($contents); //Parser da resposta Json
echo $resposta;
Mas o resultado é sempre uma tela em branco
Muito obrigado :D
Para a parte de JavaScript, está tudo aqui: http://download.uol.com.br/pagseguro/docs/pagseguro-checkout-transparente.pdf
A parte de PHP, não encontro mais nada, mas deve ser realizada pela classe PagSeguroDirectPaymentRequest.
Eu limpei o pouco do código que eu localizei, pode lhe ajudar.
Primeiro é a inicialização do checkout.
\PagSeguroLibrary::init();
\PagSeguroConfig::setEnvironment($environment);
$credentials = new \PagSeguroAccountCredentials(
$email,
$token//cada ambiente tem seu próprio token
);
$sessionId = PagSeguroSessionService::getSession($credentials);
esse session ID precisa ser enviado para o JavaScript
<script type="text/javascript">
PagSeguroDirectPayment.setSessionId('sessionId');
</script>
Agora o checkout:
$directPaymentRequest = new \PagSeguroDirectPaymentRequest();
$directPaymentRequest->setPaymentMode('DEFAULT'); // GATEWAY
$directPaymentRequest->setPaymentMethod('CREDIT_CARD');//tipo de pagamento (aqui, em específico, cartão de crédito)
$directPaymentRequest->setCurrency("BRL");
$directPaymentRequest->setReference($referenceCode);//código de referência para o que está sendo vendido (ordem de venda, registro, etc...)
$directPaymentRequest->setReceiverEmail($pagSeguroEmail);//e-mail do cadastro do PagSeguro
$directPaymentRequest->addItem(
$itemCodigo,
$descricao,
1,//quantidade
$valor
);
//comprador
$directPaymentRequest->setSender(
$nome,
$email,
$ddd,
$telefone,
'CPF',//TIPO: CPF ou CNPJ
$cpf//CPF ou CNPJ
);
// esse é gerado pelo javascript
$directPaymentRequest->setSenderHash($post['sender-hash']);
//parcelas, para cartão de crédito
$installments = new \PagSeguroInstallment(
array(
'quantity' => '1',
'value' => $valor
)
);
$address = new \PagSeguroAddress(
array(
'postalCode' => $cep,
'street' => $logradouro,
'number' => $numero,
'complement' => $complemento,
'district' => $bairro,
'city' => $cidade,
'state' => $uf,
'country' => $pais
)
);
//endereço para o pagamento
$billingAddress = new \PagSeguroBilling($address);
$directPaymentRequest->setBillingAdress($billingAddress);
//quando não há frete. Na época era obrigatório adicionar o frete zerado com endereço
$directPaymentRequest->setShipping($address , \PagSeguroShippingType::getCodeByType('NOT_SPECIFIED'));
$directPaymentRequest->setShippingCost(0);
//informações sobre o cartão de crédito. Dados pessoais são do dono do cartão
$creditCardHolder = new \PagSeguroCreditCardHolder(
array(
'name' => ,
'birthDate' => $dataNascimente,
'areaCode' => $ddd,
'number' => $telefone,
'documents' => array(
'type' => 'CPF',
'value' => $cpfCartao
)
)
);
$creditCardData = new \PagSeguroCreditCardCheckout(
array(
'token' => $creditCardToken,//gerado pelo javascript
'installment' => $installments,
'billing' => $billingAddress,
'holder' => $creditCardHolder
)
);
try {
$directPaymentRequest->setCreditCard($creditCardData);
$response = $directPaymentRequest->register($this->entity->getApplication()->getAccountCredentials());
} catch (\PagSeguroServiceException $exception) {
}
Entretanto, isso é apenas 50% do necessário, a parte client-side com o javascript já é trabalhosa o suficiente.
Use e muito a SandBox. E, antes de colocar o código em produção, você precisa pedir liberação para o PagSeguro e peça com antecedência, eles vão demorar. Se não me engano, o endereço de e-mail para liberação está no PDF acima linkado.
Edit---
https://pagseguro.uol.com.br/v2/guia-de-integracao/documentacao-da-biblioteca-pagseguro-em-php.html#checkout-transparente