✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Integración de la pasarela de pago de PayPal en PHP mediante la API REST de PayPal

591

PayPal es una de las pasarelas de pago más confiables de Internet. Se usa ampliamente en sitios web para aceptar pagos en línea. Sin embargo, la documentación de la API de PayPal no es fácil de comprender. Para un desarrollador que va a integrar la pasarela de pago de PayPal por primera vez, le tomará muchas horas tener éxito en ella. Pasé una gran cantidad de horas leyendo la documentación de la API de PayPal. Y luego darse cuenta de que no es necesario leer la documentación de Paypal en profundidad para integrarla.

En este artículo, estudiamos cómo integrar una pasarela de pago de PayPal utilizando la API REST de PayPal. Vamos a utilizar la biblioteca de GitHub proporcionada por Omnipay. Omnipay proporciona una forma limpia y fácil de integrar diferentes pasarelas de pago en su aplicación web. Su estructura de código también es limpia y eficiente. A los desarrolladores les encantaría.

Obtenga el ID de cliente y el secreto del cliente de PayPal

Para la integración de PayPal en el sitio web, primero debe crear una aplicación API REST en una cuenta de desarrollador de PayPal. Una vez que haya creado la aplicación, obtendrá la identificación del cliente y el secreto del cliente que requerirá en los siguientes pasos.

Para crear la aplicación REST API, vaya a su cuenta de desarrollador de PayPal e inicie sesión en el panel de control.

En el panel del desarrollador, haga clic en el menú ‘Mis aplicaciones y credenciales’. Haga clic en el botón ‘Crear aplicación’ en la sección de aplicaciones de la API REST.

En el siguiente paso, complete el nombre de la aplicación y obtendrá su identificación de cliente y su secreto de cliente. En mi caso, en la siguiente captura de pantalla puedo ver las credenciales de la zona de pruebas. Pueden ser credenciales en vivo en su caso. O también puede probar con sus credenciales de sandbox.

Integración de la pasarela de pago de PayPal en PHP mediante la API REST de PayPal

Instalación de la biblioteca y configuración básica

Como dije, usaremos Omnipay para la integración de la API REST de PayPal. Primero debemos instalar sus bibliotecas usando Composer. Ejecute el siguiente comando para instalar las bibliotecas.

composer require league/omnipay omnipay/paypal

Después de instalar la biblioteca, creamos un archivo de configuración donde almacenamos nuestras credenciales API, escribimos la conexión DB e inicializamos la puerta de enlace.

config.php

<?php
require_once "vendor/autoload.php";
 
use OmnipayOmnipay;
 
define('CLIENT_ID', 'PAYPAL_CLIENT_ID_HERE');
define('CLIENT_SECRET', 'PAYPAL_CLIENT_SECRET_HERE');
 
define('PAYPAL_RETURN_URL', 'YOUR_SITE_URL/success.php');
define('PAYPAL_CANCEL_URL', 'YOUR_SITE_URL/cancel.php');
define('PAYPAL_CURRENCY', 'USD'); // set your currency here
 
// Connect with the database
$db = new mysqli('localhost', 'MYSQL_DB_USERNAME', 'MYSQL_DB_PASSWORD', 'MYSQL_DB_NAME'); 
 
if ($db->connect_errno) {
    die("Connect failed: ". $db->connect_error);
}
 
$gateway = Omnipay::create('PayPal_Rest');
$gateway->setClientId(CLIENT_ID);
$gateway->setSecret(CLIENT_SECRET);
$gateway->setTestMode(true); //set it to 'false' when go live

Aquí, pasé el parámetro ‘Paypal_Rest’ al método de creación de Omnipay. Omnipay en segundo plano llama a la API REST de PayPal mientras realiza el pago a través de ella.

A continuación, cree un formulario simple donde un usuario puede ingresar la cantidad. Para propósitos de demostración, solo mantengo un campo en el formulario. Puede ampliar el formulario según sus necesidades.

form.html

<form action="charge.php" method="post">
    <input type="text" name="amount" value="20.00" />
    <input type="submit" name="submit" value="Pay Now">
</form>

Cuando se complete el pago, debemos guardar los detalles de la transacción en la tabla de la base de datos. Cree una tabla de base de datos ejecutando la siguiente consulta SQL.

CREATE TABLE `payments` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `payment_id` varchar(255) NOT NULL,
 `payer_id` varchar(255) NOT NULL,
 `payer_email` varchar(255) NOT NULL,
 `amount` float(10,2) NOT NULL,
 `currency` varchar(255) NOT NULL,
 `payment_status` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Esta tabla no contiene ninguna clave externa, ya que es solo para fines de demostración. El usuario puede agregar una columna user_id en esta tabla para hacer referencia al pago con el usuario.

Integración de la pasarela de pago de PayPal en PHP mediante la API REST de PayPal

Al utilizar la API REST de PayPal, el usuario lo redireccionará a PayPal para completar el pago. Después de realizar el pago, el usuario lo redirigirá a nuestra aplicación en función del estado de éxito o fracaso. Definimos estas URL en el config.phparchivo anterior.

Una vez que el usuario vuelve a redirigir a nuestra aplicación con una respuesta exitosa, debemos ejecutar el pago en nuestro archivo PHP, que es success.phpen nuestro caso. También almacenamos la información de pago después de ejecutar el pago mediante la API REST de PayPal. Entonces nuestro código será el siguiente.

charge.php

<?php
require_once 'config.php';
 
if (isset($_POST['submit'])) {
 
    try {
        $response = $gateway->purchase(array(
            'amount' => $_POST['amount'],
            'currency' => PAYPAL_CURRENCY,
            'returnUrl' => PAYPAL_RETURN_URL,
            'cancelUrl' => PAYPAL_CANCEL_URL,
        ))->send();
 
        if ($response->isRedirect()) {
            $response->redirect(); // this will automatically forward the customer
        } else {
            // not successful
            echo $response->getMessage();
        }
    } catch(Exception $e) {
        echo $e->getMessage();
    }
}

success.php

<?php
require_once 'config.php';
 
// Once the transaction has been approved, we need to complete it.
if (array_key_exists('paymentId', $_GET) && array_key_exists('PayerID', $_GET)) {
    $transaction = $gateway->completePurchase(array(
        'payer_id'             => $_GET['PayerID'],
        'transactionReference' => $_GET['paymentId'],
    ));
    $response = $transaction->send();
 
    if ($response->isSuccessful()) {
        // The customer has successfully paid.
        $arr_body = $response->getData();
 
        $payment_id = $arr_body['id'];
        $payer_id = $arr_body['payer']['payer_info']['payer_id'];
        $payer_email = $arr_body['payer']['payer_info']['email'];
        $amount = $arr_body['transactions'][0]['amount']['total'];
        $currency = PAYPAL_CURRENCY;
        $payment_status = $arr_body['state'];
 
        // Insert transaction data into the database
        $isPaymentExist = $db->query("SELECT * FROM payments WHERE payment_id = '".$payment_id."'");
 
        if($isPaymentExist->num_rows == 0) {
            $insert = $db->query("INSERT INTO payments(payment_id, payer_id, payer_email, amount, currency, payment_status) VALUES('". $payment_id ."', '". $payer_id ."', '". $payer_email ."', '". $amount ."', '". $currency ."', '". $payment_status ."')");
        }
 
        echo "Payment is successful. Your transaction id is: ". $payment_id;
    } else {
        echo $response->getMessage();
    }
} else {
    echo 'Transaction is declined';
}

cancel.php

<h3>User is canceled the payment.</h3>

Enviar información del producto a PayPal

En el código anterior, estamos enviando la cantidad a pagar en PayPal. Es posible que también desee enviar información sobre el producto. Sus clientes pueden ver los detalles de estos productos en la página de pago antes de realizar un pago.

Para enviar la información del producto, debe pasar la matriz ‘elementos’ al purchase método de la siguiente manera.

$response = $gateway->purchase(array(
    'amount' => $_POST['amount'],
    'items' => array(
        array(
            'name' => 'Course Subscription',
            'price' => $_POST['amount'],
            'description' => 'Get access to premium courses.',
            'quantity' => 1
        ),
    ),
    'currency' => PAYPAL_CURRENCY,
    'returnUrl' => PAYPAL_RETURN_URL,
    'cancelUrl' => PAYPAL_CANCEL_URL,
))->send();

Aquí he pasado los detalles del producto de forma estática. Debes dinamizarlo dependiendo de tu producto.

Espero que conozca la integración de la pasarela de pago de PayPal en PHP. Me gustaría escuchar sus pensamientos o sugerencias en la sección de comentarios a continuación.

Artículos relacionados

Fuente de grabación: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More