PayPal
Effettuare un pagamento con carta di credito (nodo)
Ricerca…
Parametri
| Parametro | Dettagli |
|---|---|
| card_data | Oggetto JSON contenente le informazioni di pagamento per la transazione |
| dettagli della carta di credito | Oggetto JSON contenente dati della carta di credito che viene inviato a PayPal per essere classificato |
| Identificativo cliente | Il tuo ID client dell'applicazione PayPal (credenziali OAuth 2) |
| paypal | Riferimento dell'SDK del nodo PayPal |
| segreto | La tua applicazione PayPal segreta (credenziali OAuth 2) |
| uuid | Riferimento al pacchetto node-uuid |
Osservazioni
Questo esempio porta l'utente a riaccreditare una semplice transazione con carta di credito utilizzando gli SDK PayPal.
Esempio di nodo
Inizia installando il modulo Node PayPal da NPM
npm install paypal-rest-sdk
Nel file dell'applicazione, aggiungere le informazioni di configurazione per l'SDK
var paypal = require('paypal-rest-sdk');
var client_id = 'YOUR CLIENT ID';
var secret = 'YOUR SECRET';
paypal.configure({
'mode': 'sandbox', //sandbox or live
'client_id': client_id,
'client_secret': secret
});
Aggiungiamo il requisito per l'SDK, quindi impostiamo le variabili per l'ID client e il segreto che sono stati ottenuti durante la creazione di un'applicazione . Configuriamo quindi la nostra applicazione utilizzando questi dettagli e specificando l'ambiente in cui operiamo (live o sandbox).
Quindi, impostiamo l'oggetto JSON che contiene le informazioni di pagamento per il pagatore.
var card_data = {
"intent": "sale",
"payer": {
"payment_method": "credit_card",
"funding_instruments": [{
"credit_card": {
"type": "visa",
"number": "4417119669820331",
"expire_month": "11",
"expire_year": "2018",
"cvv2": "874",
"first_name": "Joe",
"last_name": "Shopper",
"billing_address": {
"line1": "52 N Main ST",
"city": "Johnstown",
"state": "OH",
"postal_code": "43210",
"country_code": "US" }}}]},
"transactions": [{
"amount": {
"total": "7.47",
"currency": "USD",
"details": {
"subtotal": "7.41",
"tax": "0.03",
"shipping": "0.03"}},
"description": "This is the payment transaction description."
}]};
Aggiungere un intent di sale , ed una payment_method di credit_card . Successivamente, aggiungere i dettagli della carta e dell'indirizzo per la carta di credito sotto funding_instruments e l'importo da addebitare nelle transactions . Qui possono essere posizionati più oggetti di transazione.
Infine, facciamo una richiesta a payment.create(...) , passando il nostro oggetto card_data , al fine di elaborare il pagamento.
paypal.payment.create(card_data, function(error, payment){
if(error){
console.error(error);
} else {
console.log(payment);
}
});
Se la transazione ha avuto successo, dovremmo vedere un oggetto risposta simile al seguente:
{
"id": "PAY-9BS08892W3794812YK4HKFQY",
"create_time": "2016-04-13T19:49:23Z",
"update_time": "2016-04-13T19:50:07Z",
"state": "approved",
"intent": "sale",
"payer": {
"payment_method": "credit_card",
"funding_instruments": [
{
"credit_card": {
"type": "visa",
"number": "xxxxxxxxxxxx0331",
"expire_month": "11",
"expire_year": "2018",
"first_name": "Joe",
"last_name": "Shopper",
"billing_address": {
"line1": "52 N Main ST",
"city": "Johnstown",
"state": "OH",
"postal_code": "43210",
"country_code": "US"
}
}
}
]
},
"transactions": [
{
"amount": {
"total": "7.47",
"currency": "USD",
"details": {
"subtotal": "7.41",
"tax": "0.03",
"shipping": "0.03"
}
},
"description": "This is the payment transaction description.",
"related_resources": [
{
"sale": {
"id": "0LB81696PP288253D",
"create_time": "2016-04-13T19:49:23Z",
"update_time": "2016-04-13T19:50:07Z",
"amount": {
"total": "7.47",
"currency": "USD"
},
"state": "completed",
"parent_payment": "PAY-9BS08892W3794812YK4HKFQY",
"links": [
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/payments\/sale\/0LB81696PP288253D",
"rel": "self",
"method": "GET"
},
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/payments\/sale\/0LB81696PP288253D\/refund",
"rel": "refund",
"method": "POST"
},
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/payments\/payment\/PAY-9BS08892W3794812YK4HKFQY",
"rel": "parent_payment",
"method": "GET"
}
],
"fmf_details": {
},
"processor_response": {
"avs_code": "X",
"cvv_code": "M"
}
}
}
]
}
],
"links": [
{
"href": "https:\/\/api.sandbox.paypal.com\/v1\/payments\/payment\/PAY-9BS08892W3794812YK4HKFQY",
"rel": "self",
"method": "GET"
}
],
"httpStatusCode": 201
}
In questo oggetto di reso, lo state di approved ci dice che la transazione ha avuto successo. Sotto l'oggetto links sono una serie di link HATEOAS che forniscono potenziali passi successivi che possono essere intrapresi sull'azione appena eseguita. In questo caso, siamo in grado di recuperare informazioni sul pagamento effettuando una richiesta GET al self endpoint fornito.
Effettuare un pagamento con una carta di credito a volta (nodo)
In questo esempio, vedremo come memorizzare una carta di credito utilizzando il vault di PayPal, quindi fare riferimento a quella carta di credito memorizzata per elaborare una transazione con carta di credito per un utente.
Il motivo per cui vorremmo utilizzare il vault è che non dobbiamo archiviare informazioni sensibili sulle carte di credito sui nostri server. Facciamo semplicemente riferimento al metodo di pagamento tramite un ID del vault fornito, il che significa che non dobbiamo occuparci di molte norme di conformità PCI con l'archiviazione delle carte di credito da noi.
Come con i campioni precedenti, iniziamo con l'impostazione del nostro ambiente.
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
});
L'unica differenza rispetto ai campioni precedenti è che stiamo richiedendo un nuovo pacchetto, node-uuid , che deve essere usato per generare UUID univoci per i pagatori quando si memorizza la carta. Puoi installare quel pacchetto tramite:
npm install node-uuid
Successivamente, definiamo l'oggetto JSON della carta di credito che verrà inviato al vault di PayPal per l'archiviazione. Contiene informazioni dalla carta e un ID di pagamento unico che generiamo usando node-uuid . È necessario memorizzare questo payer_id univoco nel proprio database poiché verrà utilizzato durante la creazione di un pagamento con la carta payer_id .
var create_card_details = {
"type": "visa",
"number": "4417119669820331",
"expire_month": "11",
"expire_year": "2018",
"first_name": "John",
"last_name": "Doe",
"payer_id": uuid.v4()
};
Infine, dobbiamo conservare la carta di credito ed elaborare il pagamento utilizzando quella carta. Per classificare una carta di credito, chiamiamo credit_card.create(...) , passando l'oggetto credit_card_details che abbiamo appena creato. Se tutto va bene, dovremmo avere un oggetto restituito con dettagli sulla carta coperta. Per il pagamento con quella carta, abbiamo solo bisogno di due informazioni: il payer_id che abbiamo già memorizzato e l'ID del vault, che dovrebbe anche essere memorizzato come riferimento nel nostro database.
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));
}
});
}
});
Nella sezione successiva al vaulting riuscito della carta di credito, stiamo semplicemente definendo i dettagli della carta ed elaborando il pagamento, come abbiamo fatto con il precedente esempio di elaborazione della carta di credito. La differenza principale nella struttura del card_data oggetto è la funding_instruments sezione, che definiamo sotto payer . Invece di definire le informazioni sulla carta di credito, utilizziamo invece il seguente oggetto che contiene il riferimento dell'ID del vault e l'ID del beneficiario:
"credit_card_token": {
"credit_card_id": credit_card.id,
"payer_id": credit_card.payer_id
}
È così che utilizziamo una carta blindata per elaborare un pagamento.