PayPal Realizar un pago con una tarjeta de crédito abovedada (nodo)


Ejemplo

En este ejemplo, veremos cómo almacenar una tarjeta de crédito utilizando la bóveda de PayPal, luego haremos referencia a esa tarjeta de crédito almacenada para procesar una transacción de tarjeta de crédito para un usuario.

La razón por la que querríamos usar la bóveda es para no tener que almacenar información confidencial de tarjetas de crédito en nuestros propios servidores. Simplemente hacemos referencia al método de pago a través de un ID de almacenamiento proporcionado, lo que significa que no tenemos que lidiar con muchas regulaciones de cumplimiento de PCI con el almacenamiento de las tarjetas de crédito por nosotros mismos.

Al igual que con las muestras anteriores, comenzamos con la configuración de nuestro entorno.

var paypal = require('paypal-rest-sdk'),
    uuid = require('node-uuid');

var client_id = 'YOUR CLIENT ID';
var secret = 'YOUR SECRET';

paypal.configure({
  'mode': 'sandbox', //sandbox or live
  'client_id': client_id,
  'client_secret': secret
});

La única diferencia con respecto a las muestras anteriores aquí es que requerimos un nuevo paquete, node-uuid , que se utilizará para generar UUID únicos para los pagadores cuando se almacena la tarjeta. Puede instalar ese paquete a través de:

npm install node-uuid

A continuación, definimos el objeto JSON de la tarjeta de crédito que se enviará a la bóveda de PayPal para su almacenamiento. Contiene información de la tarjeta, así como un ID de pagador único que generamos mediante el uso de node-uuid . Debe almacenar este payer_id único en su propia base de datos, ya que se utilizará al crear un pago con la tarjeta de almacenamiento.

var create_card_details = {
    "type": "visa",
    "number": "4417119669820331",
    "expire_month": "11",
    "expire_year": "2018",
    "first_name": "John",
    "last_name": "Doe",
    "payer_id": uuid.v4()
};

Por último, debemos almacenar la tarjeta de crédito y procesar el pago utilizando esa tarjeta. Para credit_card.create(...) una tarjeta de crédito, llamamos credit_card.create(...) , pasando el objeto credit_card_details que acabamos de crear. Si todo va bien, deberíamos devolver un objeto con detalles sobre la tarjeta abovedada. Por el bien de un pago con esa tarjeta, solo necesitamos realmente dos datos: el payer_id que ya almacenamos y el Id. De la bóveda, que también debe almacenarse como referencia en nuestra propia base de datos.

paypal.credit_card.create(create_card_details, function(error, credit_card){
    if(error){
        console.error(error);
    } else {
        var card_data = {
            "intent": "sale",
            "payer": {
                "payment_method": "credit_card",
                "funding_instruments": [{
                    "credit_card_token": {
                        "credit_card_id": credit_card.id,
                        "payer_id": credit_card.payer_id
                    }
                }]
            },
            "transactions": [{
                "amount": {
                    "total": "7.47",
                    "currency": "USD",
                    "details": {
                        "subtotal": "7.41",
                        "tax": "0.03",
                        "shipping": "0.03"
                    }
                },
                "description": "This is the payment transaction description." 
            }]
        };
        
        paypal.payment.create(card_data, function(error, payment){
            if(error){
                console.error(error);
            } else {
                console.log(JSON.stringify(payment));
            }
        });
    }
});

En la sección que sigue a la bóveda exitosa de la tarjeta de crédito, simplemente estamos definiendo los detalles de la tarjeta y procesando el pago, como hicimos con el ejemplo anterior del procesamiento de la tarjeta de crédito. La principal diferencia en la estructura del objeto card_data es la sección funding_instruments , que definimos bajo payer . En lugar de definir la información de la tarjeta de crédito, en su lugar usamos el siguiente objeto que contiene la referencia de la ID de la bóveda y la ID del pagador:

"credit_card_token": {
    "credit_card_id": credit_card.id,
    "payer_id": credit_card.payer_id
}

Así es como utilizamos una tarjeta abovedada para procesar un pago.