A php library to facilitate the use of paypal
Easy paypal é um SDK para facilitar a integração do Paypal NVP API e Paypal IPN com sua aplicação., (*1)
As requisições a API são feitas por um objeto Request, este objeto deve ser criado com os seguintes parametros obrigatorios:, (*2)
Parametros opcionais:, (*3)
include "autoload.php"; $sandbox = true; $username = "conta-business_api1.test.com"; $password = "123456"; $signature = "AiPC9BjkCyDFQXbSkoZcgqH3hpacA-p.YLGfQjc0EobtODs.fMJNajCx"; $appUrl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $returnUrl = $appUrl; $cancelUrl = $appUrl; $request = new \easyPaypal\Request($sandbox, $username, $password, $signature, $returnUrl, $cancelUrl); $request->setHeaderImage('path/to/my/image'); $request->setLocalecode('pt_BR');
Express Checkout é uma solução de pagamento do PayPal indicada para sites e lojas online que tenham integrações de médio e grande porte. Para realizar o express checkout crie um objeto Checkout e atribua um objeto Request a ele. Em cada requisição pode ser criada até 10 transações, isso é feito criando objetos Seller e atribuindo objetos Item a eles. Cada Seller irá gerar uma transação. Os objetos Seller são atribuídos ao Checkout pelo método setParams()., (*4)
Um Seller é criado usando os seguintes parâmetros opcionais:, (*5)
O método setParams() deve ser chamado antes do método send() para que a requisição seja atualizada com os parâmetros adicionais se necessário., (*6)
O limite de pagamentos/seller é 10 por requisição., (*7)
include "autoload.php"; //Referencia / Invoice ID: Campo para o acompanhamento e controle interno do comerciante $ref=null; $request = new \easyPaypal\Request($sandbox, $username, $password, $signature, $returnUrl, $cancelUrl, $logoUrl); $nvp = new \easyPaypal\Checkout('expressCheckout'); $nvp->setRequest($request); //Create sellers $seller = new \easyPaypal\Seller($ref); //Add itens to sellers $item1 = new \easyPaypal\Item('Item 1', 'Description', 40.00, 1); $item2 = new \easyPaypal\Item('Item 2', 'Description', 40.00, 1); $seller->addItem($item1); $seller->addItem($item2); //Set request $nvp->setParams($seller); $response = $nvp->send();
O exemplo de express checkout passo a passo pode ser encontrado em examples/express_checkout/checkout_step_by_step.php, (*8)
Para criar um perfil de recorrência, um objeto Recurring é usado, este objeto é criado com os seguintes paramentros:, (*9)
Parâmetros opcionais:, (*10)
Pagamento inicial não recorrente, (*11)
Além da definição do perfil de pagamento recorrente e do período de experiência, podemos definir um pagamento que deverá ser efetuado no momento da criação do perfil. Para isso deve ser definido os seguintes parametros:, (*12)
$failedInitAmtAction = A ação que deverá ser tomada, caso o pagamento inicial falhe, valores aceitos ContinueOnFailure ou CancelOnFailure, (*13)
ContinueOnFailure – Caso o pagamento falhe, o perfil de pagamento recorrente será criado e o valor inicial será colocado no montante a pagar do perfil., (*14)
Exemplo de caso de uso:, (*15)
Cliente compra a assinatura mensal de uma revista, com valor de R$ 10.00 e com validade de 1 ano. A cobrança acontecerá a cada 3 meses:, (*16)
Isso criará um perfil de pagamento mensal, onde a cada três meses, o cliente pagará o equivalente a R$ 30,00 pela assinatura pela assinatura mensal, que terá duração de 1 ano., (*17)
O limite de pagamentos/seller é 10 por requisição., (*18)
$request = new \easyPaypal\Request(true, $username, $password, $signature, $returnUrl, $cancelUrl, $logoUrl); //Criando objeto Recurring usando parâmetros default $method = 'expressCheckout'; $amount = 100; $description = 'Recurring payment test'; $nvp = new \easyPaypal\Recurring($method, $amount, $description); //Alterando parâmetro do objeto Recurring $nvp->setTotalBillingCycles(12); $nvp->setBillingPeriod('Week'); $nvp->setBillingFrequency(4); $nvp->setRequest($request); //Create sellers $seller = new \easyPaypal\Seller(); //Add itens to sellers $item1 = new \easyPaypal\Item('Item 1', 'Description', 40.00, 1, 'RecurringPayments', 'Recurring payment item'); $seller->addItem($item1); //Set request $nvp->setParams($seller); $response = $nvp->send($seller);
Para este tipo de perfil é necessário especificar mais 4 parâmetro:, (*19)
$request = new \easyPaypal\Request(true, $username, $password, $signature, $returnUrl, $cancelUrl, $logoUrl); $nvp = new \easyPaypal\Recurring('expressCheckout', 100, 'Recurring payment test'); $nvp->setRequest($request); //Trial $nvp->setTrialAmt(0); $nvp->setTrialBillingFrequency(1); $nvp->setTrialBillingPeriod('Month');//(Month|Day|Week|Year) $nvp->setTrialTotalBillingCycles(1); //Create sellers $seller = new \easyPaypal\Seller(); //Add itens to sellers $item1 = new \easyPaypal\Item('Item 1', 'Description', 40.00, 1, 'RecurringPayments', 'Recurring payment item'); $seller->addItem($item1); //Set request $nvp->setParams($seller); $response = $nvp->send($seller);
O reembolso total ou parcial pode ser realizado apenas para transações criadas a menos de 60 dias. O reembolso é realizado utilizando o método refundTransaction da classe Transaction, este método aceita os seguintes parâmetros:, (*20)
No exemplo abaixo é buscado todas as transações realizadas nos últimos 30 dias, e então realizado um reembolso total em uma e um reembolso parcial em outra., (*21)
$request = new \easyPaypal\Request(true, $username, $password, $signature, $returnUrl, $cancelUrl, $logoUrl); //Create Transaction Object $transaction = new \easyPaypal\Transaction(); //Set start and end date $startDate = new \DateTime(); $endtDate = new \DateTime(); $startDate->sub(new DateInterval('P30D')); $transaction->setStartDate($startDate); $transaction->setEndDate($endtDate); //Set request $transaction->setRequest($request); //Search transactions by start and end dates $transactions = $transaction->transactionSearch(); //Get transaction details by ID $details = $transaction->getTransactionDetails($transactions[0]->getTxnId()); //Full Refund $response = $transaction->refundTransaction($details->getTxnId(), 'Full'); if(isset($response['ACK']) && $response['ACK'] == "Success"){ echo "Success on Full Refund transaction. REFUNDTRANSACTIONID: ".$response['REFUNDTRANSACTIONID']."<br/><br/>"; } //Get transaction details $details = $transaction->getTransactionDetails($transactions[1]->getTxnId()); //Partial Refund $response = $transaction->refundTransaction($details->getTxnId(), 'Partial', 1, $details->getCurrencyCode(), "Partial Refund test", $details->getCustomer()->getPaypalId()); if(isset($response['ACK']) && $response['ACK'] == "Success"){ echo "Success on Full Refund transaction. REFUNDTRANSACTIONID: ".$response['REFUNDTRANSACTIONID']."<br/><br/>"; }
Instant Payment Notification (IPN) é um serviço de mensagens que notifica sua aplicação sobre eventos relacionados às transações PayPal. Pode ser utilizado para automatizar seu back-office ou funções administrativas., (*22)
Fluxo:, (*23)
A classe Ipn possui um handler (o manipulador descrito acima) que simplifica este fluxo., (*24)
Configurar a URL de notificação:, (*25)
As ações tomadas quando se recebe uma notificação, são bastante específicas da aplicação., (*26)
Em examples/ipn/ há um exemplo de manipulador que armazena os dados das notificações recebidas em um banco de dados, no arquivo ipn.php é aguardado um HTTP POST que será enviado para o método handleIpn() da classe Ipn, neste método é realizado todos os passos do fluxo descrito acima se ocorrer algum erro o mesmo é retornado caso contrario é devolvido um array com os objetos Notification, Customer e Transaction que são armazenado no banco de dados., (*27)
$request = new \easyPaypal\Request(true, $username, $password, $signature, $returnUrl, $cancelUrl, $logoUrl); $nvp = new \easyPaypal\Recurring(); $nvp->setRequest($request); $response = $nvp->getRecurringProfileDetails($profileId); var_dump($response);
$request = new \easyPaypal\Request(true, $username, $password, $signature, $returnUrl, $cancelUrl, $logoUrl); //Create Transaction Object $transaction = new \easyPaypal\Transaction(); //Set start and end date $startDate = new \DateTime(); $endtDate = new \DateTime(); $startDate->sub(new DateInterval('P30D')); $transaction->setStartDate($startDate); $transaction->setEndDate($endtDate); //Set request $transaction->setRequest($request); //Search transaction $response = $transaction->transactionSearch(); foreach($response as $t){ echo $t->getCustomer()->getFirstName()."<br/>"; echo $t->getCustomer()->getLastName()."<br/>"; echo $t->getCustomer()->getEmail()."<br/>"; echo $t->getPaymentDate()."<br/>"; echo $t->getTxnId()."<br/>"; echo $t->getPaymentStatus()."<br/>"; echo $t->getTxnType()."<br/>"; echo $t->getGross()."<br/>"; echo $t->getCurrencyCode()."<br/>"; echo $t->getFee()."<br/>"; echo "<br/><br/>"; }
$request = new \easyPaypal\Request(true, $username, $password, $signature, $returnUrl, $cancelUrl, $logoUrl); //Create Transaction Object $transaction = new \easyPaypal\Transaction(); //Set start and end date $startDate = new \DateTime(); $endtDate = new \DateTime(); $startDate->sub(new DateInterval('P30D')); $transaction->setStartDate($startDate); $transaction->setEndDate($endtDate); //Set request $transaction->setRequest($request); //Search transaction $transactions = $transaction->transactionSearch(); //Get transaction details $details = $transaction->getTransactionDetails($transactions[0]->getTxnId()); echo $details->getCustomer()->getFirstName()."<br/>"; echo $details->getCustomer()->getLastName()."<br/>"; echo $details->getCustomer()->getEmail()."<br/>"; echo $details->getPaymentDate()."<br/>"; echo $details->getTxnId()."<br/>"; echo $details->getTxnType()."<br/>"; echo $details->getPaymentStatus()."<br/>"; echo $details->getGross()."<br/>"; echo $details->getCurrencyCode()."<br/>"; echo $details->getFee()."<br/>";