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