PayPal Passaggio 2: creazione di una sottoscrizione per un utente che utilizza un contratto di fatturazione (esempio di nodo)


Esempio

Il secondo passaggio per creare un abbonamento per un utente è creare ed eseguire un contratto di fatturazione, in base a un piano di fatturazione attivato esistente. Questo esempio presuppone che tu abbia già eseguito e attivato un piano di fatturazione nell'esempio precedente e che un ID per tale piano di fatturazione faccia riferimento nell'esempio.

Quando imposti un contratto di fatturazione per creare un abbonamento per un utente, seguirai 3 passaggi, che potrebbero ricordare l'elaborazione di un pagamento PayPal:

  1. Si crea un contratto di fatturazione, facendo riferimento a un piano di fatturazione sottostante tramite l'ID.
  2. Una volta creato, reindirizza l'utente a PayPal (se paga tramite PayPal) per confermare l'abbonamento. Una volta confermato, PayPal reindirizza l'utente al tuo sito utilizzando il reindirizzamento fornito nel piano di fatturazione sottostante.
  3. Esegui quindi il contratto di fatturazione utilizzando un token restituito tramite il reindirizzamento PayPal.

Questo esempio sta configurando un server HTTP basato su Express per mostrare il processo del contratto di fatturazione.

Per iniziare l'esempio, dobbiamo prima impostare la nostra configurazione. Aggiungiamo quattro requisiti, l'SDK PayPal, body-parser per la gestione dei corpi codificati JSON, http per la nostra semplice integrazione con i server e express per il framework Express. Quindi definiamo il nostro ID client e segreto dalla creazione di un'applicazione, configuriamo l'SDK per la sandbox, quindi configuriamo bodyParser per la gestione dei corpi JSON.

var paypal = require('paypal-rest-sdk'),
    bodyParser = require('body-parser'),
    http = require('http'),
    app = require('express')();

var clientId = 'YOUR APPLICATION CLIENT ID';
var secret = 'YOUR APPLICATION SECRET';

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

app.use(bodyParser.json());

Il nostro primo passo nel contratto di fatturazione è creare un percorso per gestire la creazione di un contratto di fatturazione e reindirizzare l'utente su PayPal per confermare tale iscrizione. Supponiamo che un ID del piano di fatturazione venga passato come parametro della stringa di query, ad esempio caricando il seguente URL con un ID del piano dell'esempio precedente:

http://localhost:3000/createagreement?plan=P-3N543779E9831025ECYGDNVQ

Ora dobbiamo usare queste informazioni per creare il contratto di fatturazione.

app.get('/createagreement', function(req, res){
    var billingPlan = req.query.plan;
    
    var isoDate = new Date();
    isoDate.setSeconds(isoDate.getSeconds() + 4);
    isoDate.toISOString().slice(0, 19) + 'Z';

    var billingAgreementAttributes = {
        "name": "Standard Membership",
        "description": "Food of the World Club Standard Membership",
        "start_date": isoDate,
        "plan": {
            "id": billingPlan
        },
        "payer": {
            "payment_method": "paypal"
        },
        "shipping_address": {
            "line1": "W 34th St",
            "city": "New York",
            "state": "NY",
            "postal_code": "10001",
            "country_code": "US"
        }
    };

    // Use activated billing plan to create agreement
    paypal.billingAgreement.create(billingAgreementAttributes, function (error, billingAgreement){
        if (error) {
            console.error(error);
            throw error;
        } else {
            //capture HATEOAS links
            var links = {};
            billingAgreement.links.forEach(function(linkObj){
                links[linkObj.rel] = {
                    'href': linkObj.href,
                    'method': linkObj.method
                };
            })

            //if redirect url present, redirect user
            if (links.hasOwnProperty('approval_url')){
                res.redirect(links['approval_url'].href);
            } else {
                console.error('no redirect URI present');
            }
        }
    });
});

Iniziamo estraendo l'ID del piano di fatturazione dalla stringa di query e creando la data in cui il piano dovrebbe iniziare.

La successiva definizione dell'oggetto, billingAgreementAttributes , consiste in informazioni per la sottoscrizione. Contiene informazioni leggibili sul piano, un riferimento all'ID del piano di fatturazione, il metodo di pagamento e i dettagli di spedizione (se necessario per l'abbonamento).

Successivamente, viene effettuata una chiamata a billingAgreement.create(...) , passando nell'oggetto billingAgreementAttributes appena creato. Se tutto è andato a buon fine, dovremmo ricevere da noi un oggetto di contratto di fatturazione contenente i dettagli sul nostro abbonamento appena creato. Tale oggetto contiene anche una serie di collegamenti HATEOAS che ci forniscono i prossimi passi che possono essere intrapresi su questo accordo appena creato. Quello che ci interessa qui è etichettato come approval_url .

Passiamo in rassegna tutti i collegamenti forniti per metterli in un oggetto facilmente referenziato. Se approval_url è uno di quei link, reindirizziamo l'utente a quel link, che è PayPal.

A questo punto l'utente conferma l'iscrizione su PayPal e viene reindirizzato all'URL fornito nel piano di fatturazione sottostante. Insieme a tale URL, PayPal passerà anche un token lungo la stringa di query. Quel token è ciò che useremo per eseguire (o avviare) l'abbonamento.

Impostiamo questa funzionalità nel seguente percorso.

app.get('/processagreement', function(req, res){
    var token = req.query.token;
    
    paypal.billingAgreement.execute(token, {}, function (error, billingAgreement) {
        if (error) {
            console.error(error);
            throw error;
        } else {
            console.log(JSON.stringify(billingAgreement));
            res.send('Billing Agreement Created Successfully');
        }
    });
});

Estraiamo il token dalla stringa di query, quindi effettuiamo una chiamata a billingAgreement.execute , passando per quel token. Se tutto ha successo, ora abbiamo un abbonamento valido per l'utente. L'oggetto di reso contiene informazioni sul contratto di fatturazione attivo.

Infine, impostiamo il nostro server HTTP per ascoltare il traffico verso i nostri percorsi.

//create server
http.createServer(app).listen(3000, function () {
   console.log('Server started: Listening on port 3000');
});