მთავარ შინაარსზე გადახტომა

PayPal-ის ინტეგრაციის მაგალითი

ამ გაწვდილი გაკვეთილში ჩვენ გაჩვენებთ, როგორ უნდა ინტეგრირდეთ PayPal-თან და განვიხილავთ ახალ ნოდებს.

1. შეკვეთის შექმნის მოვლენების მონიტორინგი

1.1. "შეკვეთა შექმნილია" მოვლენა "Events" მოდულში.

მოვლენების მონიტორინგისთვის "Integrations" მოდულში შექმენით მოვლენა "Events" მოდულში.

ბლოკ Events-ის დეტალური აღწერა შეგიძლიათ მოიძიოთ აქ.

1.2. შეკვეთის შექმნის მოვლენების მონიტორინგი.

  • გადატანეთ "events" ნოდი სამუშაო სივრცეში.
  • შეცვალეთ "Set" ველში მნიშვნელობა "orderEvent"-ზე.
  • მოვლენა შენახული იქნება "msg.orderEvent" ობიექტში და მისი გამოყენება შესაძლებელია სხვა ნოდებში.
  • აირჩიეთ სიიდან შექმნილი მოვლენა "შეკვეთა შექმნილია" და დააჭირეთ "submit".

ამ მაგალითში ჩვენ ვაწვდით შეკვეთის შექმნის მოვლენას და ვშენახავთ მოვლენას "msg.orderEvent"-ში შემდგომი გამოყენებისთვის.

ნოდის Events-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

2. გადახდის სესიის შექმნა

2.1. შექმენით გადახდის ანგარიში

ინტეგრაციის დაწყებამდე შექმენით პერსონალური ანგარიში PayPal-ისთვის.

როგორ უნდა გააკეთოთ ეს, შეგიძლიათ მოიძიოთ აქ.

2.2. შექმენით გადახდის სესია

  • გადატანეთ "api" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • აირჩიეთ "Create Payment Session" მეთოდი და ჩასვით ქვემოთ მოცემული კოდი "Data" ველში.

აქ ჩვენ ვიღებთ შეკვეთის იდენტიფიკატორს "msg.orderEvent" ობიექტიდან და ვფორმირებთ გადახდის სესიის შექმნის მოთხოვნას. სესიის შექმნის მოთხოვნა იღებს პარამეტრებს: "orderId" - იდენტიფიკატორი და "type" - გადახდის სესიის ტიპი (session ან intent).

{
"orderId": {{orderEvent.order.id}},
"type": "session"
}
ნოდის API-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

2.3. მიღებული იდენტიფიკატორის დაყენება msg.paymentSessionId-ში

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

აქ ჩვენ ვაყენებთ "msg.paymentSessionId"-ში გადახდის სესიის იდენტიფიკატორს, რომელიც მიღებულია წინა ნოდის შესრულების შედეგად.

msg.paymentSessionId = msg.payload.id;

return msg;
ნოდის Function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

3. PayPal-ში ავტენტიფიკაცია

3.1. დააყენეთ პარამეტრები PayPal-ის ავტენტიფიკაციისთვის

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

აქ ჩვენ ვაყენებთ მნიშვნელობებს "payload" და "headers" ობიექტში "msg". ეს მონაცემები საჭიროა შემდეგი ნოდის შესრულებისთვის.

// ვაყენებთ მოთხოვნის სხეულს
msg.payload = {
grant_type: 'client_credentials'
};
// ვაყენებთ სათაურებს
msg.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}

return msg;

დეტალური ინფორმაცია გადახდის პარამეტრებზე შეგიძლიათ მოიძიოთ PayPal-ის დოკუმენტაციაში

ნოდის Function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

3.2. Access token-ის მიღების მოთხოვნა

  • გადატანეთ "http request" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • აირჩიეთ "POST" მეთოდი "Method" ველში.
  • აირჩიეთ "Send as request body" "Data" ველში.
  • ჩასვით "Link" ველში ლინკი https://api-m.sandbox.paypal.com/v1/oauth2/token.
  • აირჩიეთ "Object JSON" "Return" ველში.
  • დააწკაპეთ "Use Authentication".
  • "Username" ველში ჩაწერეთ თქვენი client ID, ხოლო "Password" ველში თქვენი client secret PayPal-ისთვის.

ეს მოთხოვნა საჭიროა "access_token"-ის მისაღებად.

დეტალური ინფორმაცია ავტენტიფიკაციის შესახებ შეგიძლიათ მოიძიოთ PayPal-ის დოკუმენტაციაში

ნოდის http request-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

3.3. გადახდის ლინკის შექმნის პარამეტრების დაყენება

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

ამ მაგალითში ფორმირდება მოთხოვნა გადახდის ლინკის შექმნისთვის წინა ნოდებიდან მიღებული მონაცემების საფუძველზე.

// access_token PayPal-ისთვის, მიღებული "paypal auth" ნოდაში
const accessToken = msg.payload.access_token;
// შეკვეთის მონაცემები, მიღებული "order created" ნოდაში
// ობიექტი order შეესაბამება შეკვეთას orders api https://oneentry.cloud/instructions/api
const order = msg.orderEvent.order;
// გადახდის სესიის იდენტიფიკატორი, მიღებული "create payment session" ნოდაში
const paymentSessionId = msg.paymentSessionId;

// ვფორმირებთ მონაცემებს PayPal-ისთვის შეკვეთის მონაცემების საფუძველზე
const items = order.products.map(product => {
return {
name: product.title,
description: 'თქვენი აღწერა',
quantity: String(product.quantity),
unit_amount: {
currency_code: order.currency,
value: product.price
}
}
})

const totalSum = parseFloat(order.totalSum)

const data = {
intent: 'CAPTURE',
purchase_units: [
{
items,
custom_id: String(paymentSessionId),
amount: {
currency_code: order.currency,
value: totalSum,
breakdown: {
item_total: {
currency_code: order.currency,
value: totalSum,
},
},
},
payment_instruction: {
billingId: String(order.id),
},
},
],
payment_source: {
paypal: {
experience_context: {
payment_method_preference: 'UNRESTRICTED',
payment_method_selected: 'PAYPAL',
brand_name: 'EXAMPLE INC',
locale: 'en-US',
landing_page: 'LOGIN',
shipping_preference: 'NO_SHIPPING',
user_action: 'PAY_NOW',
return_url: "https://example.com/return",
cancel_url: "https://example.com/cancel",
},
},
},
}

// მოთხოვნის სხეული
msg.payload = data;
// მოთხოვნის სათაურები
msg.headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`,
'Prefer': 'return=representation',
};

return msg;

დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ PayPal-ის დოკუმენტაციაში

ნოდის Function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

4. გადახდის ლინკის შექმნა

ამ მაგალითში გამოიყენება "http request" ნოდი. მისი გამოყენება შესაძლებელია http მოთხოვნების გასაკეთებლად.

  • გადატანეთ "http request" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • აირჩიეთ "POST" მეთოდი "Method" ველში.
  • აირჩიეთ "Send as request body" "Data" ველში.
  • ჩასვით "Link" ველში ლინკი https://api-m.sandbox.paypal.com/v2/checkout/orders.
  • აირჩიეთ "Object JSON" "Return" ველში.

ამ მაგალითში ჩვენ გავაკეთეთ მოთხოვნა PayPal-ისთვის გადახდის ლინკის ფორმირებისთვის წინა ნოდებიდან მიღებული მონაცემების საფუძველზე.

დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ PayPal-ის დოკუმენტაციაში

ნოდის http request-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

5. გადახდის სესიის განახლება

  • გადატანეთ "api" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • აირჩიეთ "Update Payment Session" მეთოდი და ჩასვით ქვემოთ მოცემული კოდი "Data" ველში.

აქ ჩვენ ვიღებთ გადახდის ლინკის იდენტიფიკატორს "msg.paymentSessionId" და გადახდის ლინკს "msg.payload.links[0].href" წინა მოთხოვნებიდან.

{
"id": {{paymentSessionId}},
"paymentUrl": "{{{payload.links.1.href}}}"
}

დეტალური ინფორმაცია დაბრუნებული მნიშვნელობების შესახებ შეგიძლიათ მოიძიოთ PayPal-ის დოკუმენტაციაში

ნოდის API-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

6. endpoint-ის დამატება გადახდის ლინკის მიღებისთვის

6.1. დააყენეთ თემა "createPaymentLink"

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

ეს საჭიროა მიმდინარე ნაკადის იდენტიფიკაციისთვის.

msg.topic = 'createPaymentLink';

return msg;
ნოდის Function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

6.2. შექმენით endpoint გადახდის ლინკის მიღებისთვის

  • გადატანეთ "http in" ნოდი სამუშაო სივრცეში.
  • აირჩიეთ "POST" მეთოდი.
  • ჩაწერეთ ლინკი /get-payment-link.

ეს endpoint საჭირო იქნება актуალური გადახდის ლინკის მისაღებად.

ნოდის http in-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

6.3. დააყენეთ თემა "getPaymentLink"

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

ეს საჭიროა მიმდინარე ნაკადის იდენტიფიკაციისთვის.

msg.topic = 'getPaymentLink';

return msg;
ნოდის Function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

6.4. მონაცემების შენახვა კონტექსტში

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

ეს საჭიროა პასუხის ფორმირებისთვის.

// მიმდინარე შეკვეთის id-ის მიღება
const orderId = msg.payload.orderId;
// მიმდინარე კონტექსტის გასაღები
const contextKey = `payment_link_${orderId}`;
// OneEntry API-ის მიღება
const api = global.get('api');
// მიმდინარე კონტექსტის მონაცემები
const contextData = flow.get(contextKey) || {};
// მონაცემების კონტექსტში დაყენება თემის მიხედვით
if (msg.topic === 'createPaymentLink') {
contextData.paymentSessionId = msg.paymentSessionId;
contextData.createPaymentLinkCompleted = true;
}
if (msg.topic === 'getPaymentLink') {
contextData.getPaymentLinkCompleted = true;
contextData.res = msg.res;
}
// კონტექსტის მონაცემების დაყენება კონტექსტში
flow.set(contextKey, contextData);
// თუ createPaymentLink და getPaymentLink დასრულდა, გამოაგზავნეთ პასუხი მიმდინარე სესიით
if (contextData.createPaymentLinkCompleted && contextData.getPaymentLinkCompleted) {
// მიიღეთ გადახდის სესია id-ის მიხედვით API-დან
const paymentSession = await api.getPaymentSessionById({ id: contextData.paymentSessionId });
msg.payload = paymentSession;
msg.res = contextData.res;

// გაწმინდეთ API
flow.set(contextKey, null);

return msg;
}

return null;
ნოდის Function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

6.5. გადახდის ლინკის პასუხის წერტილი

  • გადატანეთ "http response" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.

ეს საჭიროა პასუხის გასაცემად მოთხოვნაზე.

ნოდის http response-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

7. PayPal-ის ვებჰუკების კონფიგურაცია

7.1. PayPal-ისთვის შესვლის წერტილი

  • გადატანეთ "http in" ნოდი სამუშაო სივრცეში.
  • აირჩიეთ "POST" მეთოდი.
  • ჩაწერეთ ლინკი /paypal.

ეს endpoint საჭირო იქნება PayPal-ის საშუალებით გადახდის სტატუსის განახლებისთვის.

ნოდის http in-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

7.2. მოთხოვნის პასუხი

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

ეს საჭიროა პასუხის ფორმირებისთვის.

msg.payload = {
ok: true
}

return msg;
ნოდის function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

7.3. PayPal-ის გამოსვლის წერტილი

  • გადატანეთ "http response" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.

ეს ნოდი საჭიროა პასუხის გასაცემად მოთხოვნაზე.

ნოდის http response-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

7.4. გადახდის სტატუსის მიღება

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

ამ ნოდაში ჩვენ ვიღებთ მნიშვნელობას, რომელიც მიღებულია "paypal webhook"-დან და ვწერთ მას "msg.status"-ში, რათა გამოვიყენოთ შემდეგ ნოდაში.

msg.status = msg.payload.resource.status;

return msg;
ნოდის Function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

7.5. გადახდის სტატუსის შემოწმება

  • გადატანეთ "swith" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • "Property"-ში ჩაწერეთ "status".
  • დაამატეთ პირველი წესი შემოწმებისთვის. აირჩიეთ "==" პირობა, მნიშვნელობაში ჩაწერეთ "APPROVED".
  • დაამატეთ მეორე წესი შემოწმებისთვის. აირჩიეთ "else" პირობა.

ამ ნოდამ უნდა შეამოწმოს "msg.status"-ის მნიშვნელობა заданным წესებზე. თუ მნიშვნელობა "APPROVED"-ს შეესაბამება, მაშინ შესრულდება პირველი შტოს ნოდები, წინააღმდეგ შემთხვევაში - მეორე.

ნოდის switch-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

7.6. გადახდის სესიის იდენტიფიკატორის მიღება

  • გადატანეთ "function" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • ჩასვით მაგალითში მოცემული კოდი "Function" ველში.

ამ ნოდაში ჩვენ ვიღებთ გადახდის სესიის იდენტიფიკატორს, რომელიც შევინახეთ "set payment data" ნოდაში.

msg.paymentSessionId = parseInt(msg.payload.resource.purchase_units[0].custom_id, 10);

return msg;

დეტალური ინფორმაცია დაბრუნებული მნიშვნელობების შესახებ შეგიძლიათ მოიძიოთ PayPal-ის დოკუმენტაციაში

ნოდის Function-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

7.7. გადახდის სტატუსის განახლება

  • გადატანეთ "api" ნოდი სამუშაო სივრცეში და შეაერთეთ წინა ნაბიჯის ნოდასთან.
  • აირჩიეთ "Update Payment Session" მეთოდი და ჩასვით ქვემოთ მოცემული კოდი "Data" ველში.

აქ ჩვენ განვახორციელებთ გადახდის სტატუსის განახლებას მისი იდენტიფიკატორის მიხედვით "msg.paymentSessionId"-დან.

{
"id": {{paymentSessionId}},
"status": "completed"
}
ნოდის API-ის დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ აქ.

7. დაამატეთ webhook თქვენს PayPal-ის პირად ანგარიშზე

თქვენი პროექტის ლინკი + /api/admin/workflows/endpoints/paypal

მაგალითი:

https://integrations-study.oneentry.cloud/api/admin/workflows/endpoints/paypal

დეტალური ინფორმაცია შეგიძლიათ მოიძიოთ PayPal-ის დოკუმენტაციაში

8. ინტეგრაციის შემოწმება

8.1. შექმენით შეკვეთა

IMG1

IMG2

როგორ უნდა შექმნათ შეკვეთა, შეგიძლიათ მოიძიოთ API დოკუმენტაციაში

8.2. მიიღეთ გადახდის ლინკი

IMG3

  • გააკეთეთ POST მოთხოვნა https://integrations-study.oneentry.cloud/api/admin/workflows/endpoints/get-payment-link, https://integrations-study.oneentry.cloud-ის ნაცვლად ჩაწერეთ თქვენი პროექტის ლინკი.

  • მოთხოვნის სხეულში მიუთითეთ ადრე შექმნილი შეკვეთის იდენტიფიკატორი:

{
"orderId": 15
}

8.3. გადაიხადეთ შეკვეთა

IMG4

8.4. შეამოწმეთ შეკვეთის სტატუსი

IMG5