Ana məzmuna keçin

PayPal ilə inteqrasiya nümunəsi

Bu təlimatda biz PayPal-ı necə inteqrasiya edəcəyimizi göstərəcəyik və yeni nodları nəzərdən keçirəcəyik.

1. Sifariş yaradılması hadisəsini izləmək

1.1. "Events" modulunda "sifariş yaradıldı" hadisəsi.

"İnteqrasiya" modulunda hadisələri izləmək üçün "Events" modulunda hadisə yaradın.

Events blokunun ətraflı təsviri burada verilmişdir.

1.2. Sifariş yaradılması hadisəsini izləmək.

  • "events" nodunu iş sahəsinə sürükləyin.
  • "Set" sahəsindəki dəyəri "orderEvent" olaraq dəyişdirin.
  • Hadisə "msg.orderEvent" obyektində saxlanılacaq və digər nodlarda istifadə oluna biləcək.
  • Yaradılmış "sifariş yaradıldı" hadisəsini siyahıdan seçin və "submit" düyməsini basın.

Bu nümunədə biz sifariş yaradılması hadisəsinə abunə oluruq və hadisəni "msg.orderEvent" daxilində saxlayırıq ki, daha sonra istifadə edək.

Events nodu haqqında ətraflı məlumat burada verilmişdir.

2. Ödəniş sessiyası yaratmaq

2.1. Ödəniş hesabı yaradın

İnteqrasiya başlamazdan əvvəl PayPal üçün xüsusi hesab yaradın.

Bunu necə edəcəyiniz burada izah edilmişdir.

2.2. Ödəniş sessiyası yaradın

  • "api" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Create Payment Session" metodunu seçin və aşağıdakı təsvirə uyğun kodu "Data" sahəsinə yapışdırın.

Burada biz "msg.orderEvent" obyektindən sifariş identifikatorunu çıxarırıq və ödəniş sessiyasını yaratmaq üçün sorğu formalaşdırırıq. Sessiya yaratma sorğusu "orderId" - identifikator və "type" - ödəniş sessiyası növü (session və ya intent) parametrlərini qəbul edir.

{
"orderId": {{orderEvent.order.id}},
"type": "session"
}
API nodu haqqında ətraflı məlumat burada verilmişdir.

2.3. Alınan identifikatoru msg.paymentSessionId-də təyin edin

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Burada biz "msg.paymentSessionId" daxilində əvvəlki nodun icrası nəticəsində alınan ödəniş sessiyasının identifikatorunu təyin edirik.

msg.paymentSessionId = msg.payload.id;

return msg;
Function nodu haqqında ətraflı məlumat burada verilmişdir.

3. PayPal-da autentifikasiya

3.1. PayPal-da autentifikasiya üçün parametrləri təyin edin

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Burada biz "msg" obyektinin "payload" və "headers" sahələrinə dəyər təyin edirik. Bu dəyərlər növbəti nodun icrası üçün lazımdır.

// sorğu bədənini təyin edirik
msg.payload = {
grant_type: 'client_credentials'
};
// başlıqları təyin edirik
msg.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}

return msg;

Ödəniş parametrləri haqqında daha ətraflı məlumatı PayPal sənədində əldə edə bilərsiniz.

Function nodu haqqında ətraflı məlumat burada verilmişdir.

3.2. Access token almaq üçün sorğu

  • "http request" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Method" sahəsində "POST" seçin.
  • "Data" sahəsində "Send as request body" seçin.
  • "Link" sahəsinə https://api-m.sandbox.paypal.com/v1/oauth2/token linkini yapışdırın.
  • "Return" sahəsində "Object JSON" seçin.
  • "Use Authentication" seçin.
  • "Username" sahəsinə client ID-nizi, "Password" sahəsinə isə PayPal üçün client secret-inizi daxil edin.

Bu sorğu "access_token" almaq üçün lazımdır.

Autentifikasiya haqqında daha ətraflı məlumatı PayPal sənədində əldə edə bilərsiniz.

http request nodu haqqında ətraflı məlumat burada verilmişdir.

3.3. Ödəniş linki yaratmaq üçün parametrləri təyin edin

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Bu nümunədə əvvəlki nodlardan alınan məlumatlara əsaslanaraq ödəniş linki yaratmaq üçün sorğu formalaşdırılır.

// paypal üçün access_token, "paypal auth" nodunda alınmışdır
const accessToken = msg.payload.access_token;
// sifariş məlumatları, "sifariş yaradıldı" nodunda alınmışdır
// order obyekti orders api https://oneentry.cloud/instructions/api ilə uyğun gəlir
const order = msg.orderEvent.order;
// "create payment session" nodunda alınmış ödəniş sessiyasının identifikatoru
const paymentSessionId = msg.paymentSessionId;

// sifariş məlumatlarına əsaslanaraq paypal üçün məlumatları formalaşdırırıq
const items = order.products.map(product => {
return {
name: product.title,
description: 'sizin təsvir',
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",
},
},
},
}

// Sorğu bədəni
msg.payload = data;
// Sorğu başlıqları
msg.headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`,
'Prefer': 'return=representation',
};

return msg;

Daha ətraflı məlumatı PayPal sənədində əldə edə bilərsiniz.

Function nodu haqqında ətraflı məlumat burada verilmişdir.

4. Ödəniş linki yaratmaq

Bu nümunədə "http request" nodu istifadə olunur. Bu nod http sorğuları göndərmək üçün istifadə oluna bilər.

  • "http request" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Method" sahəsində "POST" seçin.
  • "Data" sahəsində "Send as request body" seçin.
  • "Link" sahəsinə https://api-m.sandbox.paypal.com/v2/checkout/orders linkini yapışdırın.
  • "Return" sahəsində "Object JSON" seçin.

Bu nümunədə biz PayPal-a ödəniş linki yaratmaq üçün əvvəlki noddan alınan məlumatlarla sorğu göndərmişik.

Daha ətraflı məlumatı PayPal sənədində əldə edə bilərsiniz.

http request nodu haqqında ətraflı məlumat burada verilmişdir.

5. Ödəniş sessiyasını yeniləmək

  • "api" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Update Payment Session" metodunu seçin və aşağıdakı təsvirə uyğun kodu "Data" sahəsinə yapışdırın.

Burada biz "msg.paymentSessionId" ödəniş linkinin identifikatorunu və əvvəlki sorğulardan "msg.payload.links[0].href" ödəniş linkini çıxarırıq.

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

Daha ətraflı məlumatı PayPal sənədində əldə edə bilərsiniz.

API nodu haqqında ətraflı məlumat burada verilmişdir.

6. Ödəniş linkini almaq üçün endpoint əlavə edin

6.1. "createPaymentLink" mövzusunu təyin edin

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Bu, cari axını identifikasiya etmək üçün lazımdır.

msg.topic = 'createPaymentLink';

return msg;
Function nodu haqqında ətraflı məlumat burada verilmişdir.

6.2. Ödəniş linkini almaq üçün son nöqtə yaradın

  • "http in" nodunu iş sahəsinə sürükləyin.
  • "POST" metodunu seçin.
  • /get-payment-link linkini daxil edin.

Bu son nöqtə, aktual ödəniş linkini almaq üçün lazım olacaq.

http in nodu haqqında ətraflı məlumat burada verilmişdir.

6.3. "getPaymentLink" mövzusunu təyin edin

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Bu, cari axını identifikasiya etmək üçün lazımdır.

msg.topic = 'getPaymentLink';

return msg;
Function nodu haqqında ətraflı məlumat burada verilmişdir.

6.4. Məlumatları kontekstdə saxlayın

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Bu, cavabı formalaşdırmaq üçün lazımdır.

// cari sifariş identifikatorunu alırıq
const orderId = msg.payload.orderId;
// cari kontekst açarı
const contextKey = `payment_link_${orderId}`;
// OneEntry api-ni alırıq
const api = global.get('api');
// cari kontekst məlumatları
const contextData = flow.get(contextKey) || {};
// mövzuya görə kontekstdə məlumatları təyin edirik
if (msg.topic === 'createPaymentLink') {
contextData.paymentSessionId = msg.paymentSessionId;
contextData.createPaymentLinkCompleted = true;
}
if (msg.topic === 'getPaymentLink') {
contextData.getPaymentLinkCompleted = true;
contextData.res = msg.res;
}
// kontekst məlumatlarını kontekstdə saxlayırıq
flow.set(contextKey, contextData);
// createPaymentLink və getPaymentLink tamamlandıqda, cari sessiya ilə cavab göndəririk
if (contextData.createPaymentLinkCompleted && contextData.getPaymentLinkCompleted) {
// api-dən id ilə ödəniş sessiyasını alırıq
const paymentSession = await api.getPaymentSessionById({ id: contextData.paymentSessionId });
msg.payload = paymentSession;
msg.res = contextData.res;

// api-ni təmizləyirik
flow.set(contextKey, null);

return msg;
}

return null;
Function nodu haqqında ətraflı məlumat burada verilmişdir.

6.5. Ödəniş linki üçün çıxış nöqtəsi

  • "http response" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.

Bu, sorğuya cavab vermək üçün lazımdır.

http response nodu haqqında ətraflı məlumat burada verilmişdir.

7. PayPal üçün vebhook-ları konfiqurasiya edin

7.1. PayPal üçün giriş nöqtələri

  • "http in" nodunu iş sahəsinə sürükləyin.
  • "POST" metodunu seçin.
  • /paypal linkini daxil edin.

Bu son nöqtə, PayPal vasitəsilə ödəniş statusunu yeniləmək üçün lazım olacaq.

http in nodu haqqında ətraflı məlumat burada verilmişdir.

7.2. Sorğuya cavab

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Bu, cavabı formalaşdırmaq üçün lazımdır.

msg.payload = {
ok: true
}

return msg;
function nodu haqqında ətraflı məlumat burada verilmişdir.

7.3. PayPal üçün çıxış nöqtəsi

  • "http response" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.

Bu nod, sorğuya cavab vermək üçün lazımdır.

http response nodu haqqında ətraflı məlumat burada verilmişdir.

7.4. Ödəniş statusunu almaq

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Bu nodda biz "paypal webhook" nodundan alınan dəyəri alırıq və "msg.status" daxilində saxlayırıq ki, növbəti nodda istifadə edək.

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

return msg;
Function nodu haqqında ətraflı məlumat burada verilmişdir.

7.5. Ödəniş statusunu yoxlamaq

  • "swith" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Property" sahəsində "status" dəyərini yazın.
  • Yoxlamaq üçün birinci qaydanı əlavə edin. "==" şərtini seçin, dəyər olaraq "APPROVED" daxil edin.
  • Yoxlamaq üçün ikinci qaydanı əlavə edin. "else" şərtini seçin.

Bu nod "msg.status" dəyərini təyin edilmiş qaydalara uyğunluğunu yoxlayacaq. Dəyər "APPROVED" olduqda, birinci budağın nodları icra olunacaq, əks halda ikinci budağın nodları icra olunacaq.

switch nodu haqqında ətraflı məlumat burada verilmişdir.

7.6. Ödəniş sessiyasının identifikatorunu almaq

  • "function" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Function" sahəsinə nümunədən kodu yapışdırın.

Bu nodda biz "set payment data" nodunda saxladığımız ödəniş sessiyasının identifikatorunu alırıq.

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

return msg;

Daha ətraflı məlumatı PayPal sənədində əldə edə bilərsiniz.

Function nodu haqqında ətraflı məlumat burada verilmişdir.

7.7. Ödəniş statusunu yeniləmək

  • "api" nodunu iş sahəsinə sürükləyin və əvvəlki addımdakı nodla birləşdirin.
  • "Update Payment Session" metodunu seçin və aşağıdakı təsvirə uyğun kodu "Data" sahəsinə yapışdırın.

Burada biz "msg.paymentSessionId" daxilindəki ödəniş identifikatoruna əsaslanaraq ödəniş statusunu yeniləyirik.

{
"id": {{paymentSessionId}},
"status": "completed"
}
API nodu haqqında ətraflı məlumat burada verilmişdir.

7. PayPal-da webhook əlavə edin

Sizin layihənizin linki + /api/admin/workflows/endpoints/paypal

Nümunə:

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

Daha ətraflı məlumatı PayPal sənədində əldə edə bilərsiniz.

8. İnteqrasiyanı yoxlayın

8.1. Sifariş yaradın

IMG1

IMG2

Sifariş yaratmağın necə olduğunu API sənədində öyrənə bilərsiniz.

8.2. Ödəniş linkini alın

IMG3

  • https://integrations-study.oneentry.cloud/api/admin/workflows/endpoints/get-payment-link ünvanına POST sorğusu göndərin, https://integrations-study.oneentry.cloud yerinə layihənizin linkini daxil edin.

  • Sorğunun bədənində daha əvvəl yaradılmış sifarişin identifikatorunu göstərin:

{
"orderId": 15
}

8.3. Sifarişi ödəyin

IMG4

8.4. Sifarişin statusunu yoxlayın

IMG5