PayPal
Dokonanie płatności kartą kredytową (węzeł)
Szukaj…
Parametry
| Parametr | Detale |
|---|---|
| dane_kartowe | Obiekt JSON zawierający informacje o płatności dla transakcji |
| szczegóły karty kredytowej | Obiekt JSON zawierający dane karty kredytowej, który jest wysyłany do PayPal w celu przechowania |
| Identyfikator klienta | Twój identyfikator klienta aplikacji PayPal (poświadczenia OAuth 2) |
| paypal | Odwołanie do zestawu SDK do węzła PayPal |
| sekret | Tajny wniosek PayPal (dane uwierzytelniające OAuth 2) |
| uuid | Odwołanie do pakietu UUID dla węzła |
Uwagi
Ta próbka zabiera użytkownika poprzez uznanie prostej transakcji kartą kredytową przy użyciu zestawów SDK PayPal.
Próbka węzła
Zacznij od instalacji modułu węzła PayPal z NPM
npm install paypal-rest-sdk
W pliku aplikacji dodaj informacje o konfiguracji zestawu 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
});
Dodajemy wymaganie dotyczące zestawu SDK, a następnie konfigurujemy zmienne dla identyfikatora klienta i hasła, które zostały uzyskane podczas tworzenia aplikacji . Następnie konfigurujemy naszą aplikację przy użyciu tych szczegółów i określamy środowisko, w którym pracujemy (na żywo lub w piaskownicy).
Następnie konfigurujemy obiekt JSON, który zawiera informacje o płatności dla płatnika.
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."
}]};
Dodaj intent na sale i payment_method z credit_card . Następnie dodaj dane karty i adres karty kredytowej w funding_instruments oraz kwotę, którą należy obciążyć w ramach transactions . Można tu umieścić wiele obiektów transakcji.
Na koniec wysyłamy żądanie do payment.create(...) , przekazując nasz obiekt card_data w celu przetworzenia płatności.
paypal.payment.create(card_data, function(error, payment){
if(error){
console.error(error);
} else {
console.log(payment);
}
});
Jeśli transakcja się powiodła, powinniśmy zobaczyć obiekt odpowiedzi podobny do następującego:
{
"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
}
W tym obiekcie zwrotnym state approved informuje nas, że transakcja się powiodła. Pod obiektem links znajduje się szereg łączy HATEOAS, które zapewniają potencjalne następne kroki, które można podjąć w sprawie właśnie wykonanej akcji. W tym przypadku możemy pobierać informacje o płatności dokonując żądanie GET do self końcowego przewidzianego.
Dokonanie płatności za pomocą sklepionej karty kredytowej (węzeł)
W tym przykładzie przyjrzymy się, jak przechowywać kartę kredytową za pomocą skarbca PayPal, a następnie odniesiemy się do tej zapisanej karty kredytowej, aby przetworzyć transakcję kartą kredytową dla użytkownika.
Powodem, dla którego chcielibyśmy korzystać ze skarbca, jest to, że nie musimy przechowywać poufnych informacji o karcie kredytowej na naszych własnych serwerach. Po prostu odwołujemy się do metody płatności za pomocą dostarczonego identyfikatora skarbca, co oznacza, że nie musimy sami zajmować się wieloma przepisami dotyczącymi zgodności z PCI przy przechowywaniu kart kredytowych.
Podobnie jak w przypadku poprzednich próbek, zaczynamy od konfiguracji naszego środowiska.
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
});
Jedną różnicą w stosunku do poprzednich próbek jest to, że potrzebujemy nowego pakietu, UUID node-uuid , który będzie używany do generowania unikalnych UUID dla płatników podczas przechowywania karty. Możesz zainstalować ten pakiet poprzez:
npm install node-uuid
Następnie definiujemy obiekt JSON karty kredytowej, który zostanie wysłany do przechowalni PayPal w celu przechowywania. Zawiera informacje z karty, a także unikalny identyfikator płatnika, który generujemy za pomocą identyfikatora node-uuid . Powinieneś przechowywać ten unikalny payer_id we własnej bazie danych, ponieważ będzie on używany podczas tworzenia płatności za pomocą karty sklepionej.
var create_card_details = {
"type": "visa",
"number": "4417119669820331",
"expire_month": "11",
"expire_year": "2018",
"first_name": "John",
"last_name": "Doe",
"payer_id": uuid.v4()
};
Wreszcie musimy przechowywać kartę kredytową i przetwarzać płatność przy użyciu tej karty. Aby przeskoczyć kartę kredytową, wywołujemy credit_card.create(...) , przekazując właśnie utworzony obiekt credit_card_details . Jeśli wszystko pójdzie dobrze, powinniśmy zwrócić obiekt ze szczegółami na temat sklepionej karty. Aby dokonać płatności za pomocą tej karty, naprawdę potrzebujemy tylko dwóch informacji: id_płaciciela, który już przechowaliśmy, oraz identyfikator skarbca, które powinny być również przechowywane jako odniesienie w naszej własnej bazie danych.
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));
}
});
}
});
W sekcji po pomyślnym przejściu na kartę kredytową po prostu określamy szczegóły karty i przetwarzamy płatność, podobnie jak w poprzednim przykładzie przetwarzania karty kredytowej. Główną różnicą w strukturze card_data obiektu jest funding_instruments sekcji, które określamy na podstawie payer . Zamiast definiować informacje o karcie kredytowej, zamiast tego używamy następującego obiektu zawierającego odwołanie do identyfikatora skarbca i identyfikator płatnika:
"credit_card_token": {
"credit_card_id": credit_card.id,
"payer_id": credit_card.payer_id
}
W ten sposób przetwarzamy płatność za pomocą karty sklepionej.