Դիտել հիմնական բովանդակությունը

PayPal-ով ինտեգրման օրինակ

Այս ուսուցողական դասում մենք ցույց կտանք, թե ինչպես ինտեգրել PayPal և կքննարկենք նոր նոդերը

1. Պատվերի ստեղծման իրադարձության հետևում

1.1. "order created" իրադարձությունը "Events" մոդուլում։

Իրադարձությունների հետևելու համար "Integrations" մոդուլում ստեղծեք իրադարձություն "Events" մոդուլում

Events բլոկի մանրամասները նկարագրված են այստեղ:

1.2. Պատվերի ստեղծման իրադարձության հետևում։

  • Տեղափոխեք "events" նոդը աշխատանքային տարածք։
  • Փոխեք "Set" դաշտի արժեքը "orderEvent"։
  • Իրադարձությունը կպահպանվի "msg.orderEvent" օբյեկտում և այն կարելի է օգտագործել այլ նոդերում։
  • Ընտրեք ստեղծված "order created" իրադարձությունը ցուցակից և սեղմեք "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. Վճարման հղման ստացման վերջնակետ ավելացնել

6.1. "createPaymentLink" թեման տեղադրեք

  • Տեղափոխեք "function" նոդը աշխատանքային տարածք և միացրեք նախորդ քայլի նոդին։
  • Ներառեք օրինակից կոդը "Function" դաշտում։

Այս անհրաժեշտ է ընթացիկ հոսքը նույնականացնելու համար։

msg.topic = 'createPaymentLink';

return msg;
Function նոդի մասին մանրամասները կարելի է գտնել այստեղ:

6.2. Ստեղծեք վերջնակետ վճարման հղման ստացման համար

  • Տեղափոխեք "http in" նոդը աշխատանքային տարածք։
  • Ընտրեք "POST" մեթոդը
  • Մուտքագրեք /get-payment-link հղումը

Այս վերջնակետը անհրաժեշտ կլինի актуալ վճարման հղումը ստանալու համար

http in նոդի մասին մանրամասները կարելի է գտնել այստեղ:

6.3. "getPaymentLink" թեման տեղադրեք

  • Տեղափոխեք "function" նոդը աշխատանքային տարածք և միացրեք նախորդ քայլի նոդին։
  • Ներառեք օրինակից կոդը "Function" դաշտում։

Այս անհրաժեշտ է ընթացիկ հոսքը նույնականացնելու համար։

msg.topic = 'getPaymentLink';

return msg;
Function նոդի մասին մանրամասները կարելի է գտնել այստեղ:

6.4. Տվյալները պահպանեք կոնտեքստում

  • Տեղափոխեք "function" նոդը աշխատանքային տարածք և միացրեք նախորդ քայլի նոդին։
  • Ներառեք օրինակից կոդը "Function" դաշտում։

Այս անհրաժեշտ է պատասխան ձևավորելու համար։

// ստանում ենք ընթացիկ պատվերի նույնականացուցիչը
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-ի համար webhook-ների կարգավորում

7.1. PayPal-ի համար մուտքային վերջնակետ

  • Տեղափոխեք "http in" նոդը աշխատանքային տարածք։
  • Ընտրեք "POST" մեթոդը
  • Մուտքագրեք /paypal հղումը

Այս վերջնակետը անհրաժեշտ կլինի վճարման կարգավիճակը թարմացնելու համար 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 .