Laravel: Cómo integrar pagos con PayPal
Tiempo de lectura: 1.79 minutos
Veamos brevemente cómo integrar PayPal en un proyecto Laravel.
Introducción
Esta guía muestra cómo integrar pagos con PayPal sobre un proyecto Laravel de propósito general.
Siguiendo la misma idea, podrás empezar a usar PayPal sobre proyectos de distintos tipos.
Tales como:
- Un e-commerce o un sistema de pedidos en línea
- Una aplicación para reserva de citas médicas
- Un sistema de asesoría legal
- Un juego de preguntas y respuestas
- Etcétera
Paso 1:
Añadir el PHP SDK de PayPal a nuestro proyecto Laravel:
composer require paypal/rest-api-sdk-php
Paso 2: Obtener credenciales
Lo primero que debes hacer es obtener tus credenciales para usar la API de PayPal.
Eso lo puedes hacer desde la página para desarrolladores de PayPal.
Tras entrar a la página e iniciar sesión, debes:
- Crear cuentas de prueba (Sandbox Accounts)
- Crear una aplicación en modo Sandbox
- Obtener tu Client ID y clave Secret
Paso 3: Definir tus rutas y controladores
Como mínimo vamos a necesitar 2 rutas: una para iniciar el proceso de pago, y la otra para confirmar y ejecutar el pago.
Respectivamente, las puedes definir del siguiente modo:
Route::get('/paypal/pay', 'PaymentController@payWithPayPal');
Route::get('/paypal/status', 'PaymentController@payPalStatus');
Puedes crear el controlador usando:
php artisan make:controler PaymentController
Y luego definir su contenido del siguiente modo:
class PaymentController extends Controller
{
private $apiContext;
public function __construct()
{
$payPalConfig = Config::get('paypal');
$this->apiContext = new ApiContext(
new OAuthTokenCredential(
$payPalConfig['client_id'],
$payPalConfig['secret']
)
);
$this->apiContext->setConfig($payPalConfig['settings']);
}
// ...
public function payWithPayPal()
{
$payer = new Payer();
$payer->setPaymentMethod('paypal');
$amount = new Amount();
$amount->setTotal('3.99');
$amount->setCurrency('USD');
$transaction = new Transaction();
$transaction->setAmount($amount);
// $transaction->setDescription('See your IQ results');
$callbackUrl = url('/paypal/status');
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl($callbackUrl)
->setCancelUrl($callbackUrl);
$payment = new Payment();
$payment->setIntent('sale')
->setPayer($payer)
->setTransactions(array($transaction))
->setRedirectUrls($redirectUrls);
try {
$payment->create($this->apiContext);
return redirect()->away($payment->getApprovalLink());
} catch (PayPalConnectionException $ex) {
echo $ex->getData();
}
}
public function payPalStatus(Request $request)
{
$paymentId = $request->input('paymentId');
$payerId = $request->input('PayerID');
$token = $request->input('token');
if (!$paymentId || !$payerId || !$token) {
$status = 'Lo sentimos! El pago a través de PayPal no se pudo realizar.';
return redirect('/paypal/failed')->with(compact('status'));
}
$payment = Payment::get($paymentId, $this->apiContext);
$execution = new PaymentExecution();
$execution->setPayerId($payerId);
/** Execute the payment **/
$result = $payment->execute($execution, $this->apiContext);
if ($result->getState() === 'approved') {
$status = 'Gracias! El pago a través de PayPal se ha ralizado correctamente.';
return redirect('/results')->with(compact('status'));
}
$status = 'Lo sentimos! El pago a través de PayPal no se pudo realizar.';
return redirect('/results')->with(compact('status'));
}
}
Paso 4: Verificar que el pago funciona
Para esto puedes iniciar sesión en PayPal (modo Sandbox) con tus cuentas de prueba, y verificar que el balance se haya actualizado correctamente, tanto para el cliente como para el negocio que recibe los pagos.
¿Buscas una explicación más detallada?
De ser así, te invito a ver el siguiente video: