Ana içeriğe geç

PayPal ile Entegrasyon Örneği

Bu eğitimde PayPal entegrasyonunu nasıl yapacağınızı göstereceğiz ve yeni düğümleri inceleyeceğiz.

1. Sipariş Oluşturma Olayını İzleme

1.1. "Events" modülündeki "order created" olayı.

"Integrations" modülünde olayları izlemek için "Events" modülünde bir olay oluşturun.

Events bloğu burada ayrıntılı olarak açıklanmıştır.

1.2. Sipariş oluşturma olayını izleme.

  • "events" düğümünü çalışma alanına sürükleyin.
  • "Set" alanındaki değeri "orderEvent" olarak değiştirin.
  • Olay "msg.orderEvent" nesnesinde saklanacak ve diğer düğümlerde kullanılabilecektir.
  • Oluşturulan "order created" olayını listeden seçin ve "submit" butonuna tıklayın.

Bu örnekte, sipariş oluşturma olayına abone oluyoruz ve olayı "msg.orderEvent" içinde saklıyoruz, böylece daha sonra kullanabiliriz.

Events düğümü hakkında daha fazla bilgi burada bulunabilir.

2. Ödeme Oturumu Oluşturma

2.1. Ödeme hesabı oluşturun

Entegrasyona başlamadan önce PayPal için özel bir hesap oluşturun.

Bunu nasıl yapacağınız burada açıklanmıştır.

2.2. Ödeme oturumu oluşturun

  • "api" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • "Create Payment Session" yöntemini seçin ve aşağıdaki açıklamada verilen kodu "Data" alanına yapıştırın.

Burada, "msg.orderEvent" nesnesinden sipariş kimliğini alıyoruz ve ödeme oturumu oluşturma isteği oluşturuyoruz. Oturum oluşturma isteği, "orderId" - kimlik ve "type" - ödeme oturumu türü (session veya intent) parametrelerini alır.

{
"orderId": {{orderEvent.order.id}},
"type": "session"
}
API düğümü hakkında daha fazla bilgi burada bulunabilir.

2.3. Alınan kimliği msg.paymentSessionId olarak ayarlayın

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Burada, önceki düğümün çalıştırılması sonucunda elde edilen ödeme oturumu kimliğini "msg.paymentSessionId" olarak ayarlıyoruz.

msg.paymentSessionId = msg.payload.id;

return msg;
Function düğümü hakkında daha fazla bilgi burada bulunabilir.

3. PayPal'da Kimlik Doğrulama

3.1. PayPal'da kimlik doğrulama için parametreleri ayarlayın

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Burada, "msg" nesnesinin "payload" ve "headers" alanlarına değer atıyoruz. Bu değerler, bir sonraki düğümün çalıştırılması için gereklidir.

// isteğin gövdesini ayarlıyoruz
msg.payload = {
grant_type: 'client_credentials'
};
// başlıkları ayarlıyoruz
msg.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}

return msg;

Ödeme parametreleri hakkında daha fazla bilgi için PayPal belgelerine göz atabilirsiniz.

Function düğümü hakkında daha fazla bilgi burada bulunabilir.

3.2. Erişim belirteci almak için istek

  • "http request" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • "Method" alanında "POST" seçeneğini seçin.
  • "Data" alanında "Send as request body" seçeneğini seçin.
  • "Link" alanına https://api-m.sandbox.paypal.com/v1/oauth2/token bağlantısını yapıştırın.
  • "Return" alanında "Object JSON" seçeneğini seçin.
  • "Use Authentication" seçeneğini işaretleyin.
  • "Username" alanına client ID'nizi, "Password" alanına ise PayPal için client secret'ınızı girin.

Bu istek, "access_token" almak için gereklidir.

Kimlik doğrulama hakkında daha fazla bilgi için PayPal belgelerine göz atabilirsiniz.

http request düğümü hakkında daha fazla bilgi burada bulunabilir.

3.3. Ödeme bağlantısı oluşturmak için parametreleri ayarlayın

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Bu örnekte, önceki düğümlerden alınan verilere dayanarak bir ödeme bağlantısı oluşturma isteği oluşturulmaktadır.

// paypal için erişim belirteci, "paypal auth" düğümünde alınmıştır
const accessToken = msg.payload.access_token;
// sipariş verileri, "order created" düğümünde alınmıştır
// order nesnesi, orders api'den gelen siparişe karşılık gelir https://oneentry.cloud/instructions/api
const order = msg.orderEvent.order;
// "create payment session" düğümünde alınan ödeme oturumu kimliği
const paymentSessionId = msg.paymentSessionId;

// sipariş verilerine dayanarak paypal için verileri oluşturuyoruz
const items = order.products.map(product => {
return {
name: product.title,
description: 'açıklamanız',
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",
},
},
},
}

// İsteğin gövdesi
msg.payload = data;
// İsteğin başlıkları
msg.headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`,
'Prefer': 'return=representation',
};

return msg;

Daha fazla bilgi için PayPal belgelerine göz atabilirsiniz.

Function düğümü hakkında daha fazla bilgi burada bulunabilir.

4. Ödeme Bağlantısı Oluşturma

Bu örnekte "http request" düğümü kullanılmaktadır. HTTP istekleri yapmak için kullanılabilir.

  • "http request" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • "Method" alanında "POST" seçeneğini seçin.
  • "Data" alanında "Send as request body" seçeneğini seçin.
  • "Link" alanına https://api-m.sandbox.paypal.com/v2/checkout/orders bağlantısını yapıştırın.
  • "Return" alanında "Object JSON" seçeneğini seçin.

Bu örnekte, önceki düğümden alınan verilerle PayPal'a ödeme bağlantısı oluşturma isteği yaptık.

Daha fazla bilgi için PayPal belgelerine göz atabilirsiniz.

http request düğümü hakkında daha fazla bilgi burada bulunabilir.

5. Ödeme Oturumunu Güncelleme

  • "api" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • "Update Payment Session" yöntemini seçin ve aşağıdaki açıklamada verilen kodu "Data" alanına yapıştırın.

Burada, "msg.paymentSessionId" ödeme bağlantısı kimliğini ve önceki isteklerden "msg.payload.links[0].href" ödeme bağlantısını alıyoruz.

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

Daha fazla bilgi için PayPal belgelerine göz atabilirsiniz.

API düğümü hakkında daha fazla bilgi burada bulunabilir.

6. Ödeme Bağlantısını Alma için Endpoint Ekleme

6.1. "createPaymentLink" konusunu ayarlayın

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Bu, mevcut akışı tanımlamak için gereklidir.

msg.topic = 'createPaymentLink';

return msg;
Function düğümü hakkında daha fazla bilgi burada bulunabilir.

6.2. Ödeme bağlantısını almak için bir endpoint oluşturun

  • "http in" düğümünü çalışma alanına sürükleyin.
  • "POST" yöntemini seçin.
  • /get-payment-link bağlantısını girin.

Bu endpoint, güncel ödeme bağlantısını almak için gereklidir.

http in düğümü hakkında daha fazla bilgi burada bulunabilir.

6.3. "getPaymentLink" konusunu ayarlayın

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Bu, mevcut akışı tanımlamak için gereklidir.

msg.topic = 'getPaymentLink';

return msg;
Function düğümü hakkında daha fazla bilgi burada bulunabilir.

6.4. Verileri bağlamda saklayın

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Bu, yanıtın oluşturulması için gereklidir.

// mevcut sipariş kimliğini al
const orderId = msg.payload.orderId;
// mevcut bağlam anahtarı
const contextKey = `payment_link_${orderId}`;
// OneEntry api'yi al
const api = global.get('api');
// mevcut bağlam verileri
const contextData = flow.get(contextKey) || {};
// konuya göre bağlamda verileri ayarla
if (msg.topic === 'createPaymentLink') {
contextData.paymentSessionId = msg.paymentSessionId;
contextData.createPaymentLinkCompleted = true;
}
if (msg.topic === 'getPaymentLink') {
contextData.getPaymentLinkCompleted = true;
contextData.res = msg.res;
}
// bağlam verilerini bağlama ayarla
flow.set(contextKey, contextData);
// createPaymentLink ve getPaymentLink tamamlandığında, mevcut oturumla yanıt gönder
if (contextData.createPaymentLinkCompleted && contextData.getPaymentLinkCompleted) {
// api'den kimliğe göre ödeme oturumunu al
const paymentSession = await api.getPaymentSessionById({ id: contextData.paymentSessionId });
msg.payload = paymentSession;
msg.res = contextData.res;

// api'yi temizle
flow.set(contextKey, null);

return msg;
}

return null;
Function düğümü hakkında daha fazla bilgi burada bulunabilir.

6.5. Ödeme bağlantısı için çıkış noktası

  • "http response" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.

Bu, isteğe yanıt vermek için gereklidir.

http response düğümü hakkında daha fazla bilgi burada bulunabilir.

7. PayPal için Webhook Ayarlama

7.1. PayPal için giriş noktası

  • "http in" düğümünü çalışma alanına sürükleyin.
  • "POST" yöntemini seçin.
  • /paypal bağlantısını girin.

Bu endpoint, PayPal üzerinden ödeme durumunu güncellemek için gereklidir.

http in düğümü hakkında daha fazla bilgi burada bulunabilir.

7.2. İsteğe yanıt

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Bu, yanıtın oluşturulması için gereklidir.

msg.payload = {
ok: true
}

return msg;
function düğümü hakkında daha fazla bilgi burada bulunabilir.

7.3. PayPal için çıkış noktası

  • "http response" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.

Bu düğüm, isteğe yanıt vermek için gereklidir.

http response düğümü hakkında daha fazla bilgi burada bulunabilir.

7.4. Ödeme durumunu alma

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Bu düğümde, "paypal webhook" düğümünden alınan değeri alıyoruz ve "msg.status" içine kaydediyoruz, böylece bir sonraki düğümde kullanabiliriz.

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

return msg;
Function düğümü hakkında daha fazla bilgi burada bulunabilir.

7.5. Ödeme durumunu kontrol etme

  • "swith" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • "Property" alanına "status" değerini yazın.
  • Kontrol için ilk kuralı ekleyin. "==" koşulunu seçin, değere "APPROVED" yazın.
  • Kontrol için ikinci kuralı ekleyin. "else" koşulunu seçin.

Bu düğüm, "msg.status" içindeki değeri belirlenen kurallara göre kontrol edecektir. Eğer değer "APPROVED" ise, ilk dalın düğümleri çalıştırılacak, aksi takdirde ikinci dalın düğümleri çalıştırılacaktır.

switch düğümü hakkında daha fazla bilgi burada bulunabilir.

7.6. Ödeme oturumu kimliğini alma

  • "function" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • Örnekten kodu "Function" alanına yapıştırın.

Bu düğümde, "set payment data" düğümünde sakladığımız ödeme oturumu kimliğini alıyoruz.

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

return msg;

Daha fazla bilgi için PayPal belgelerine göz atabilirsiniz.

Function düğümü hakkında daha fazla bilgi burada bulunabilir.

7.7. Ödeme durumunu güncelleme

  • "api" düğümünü çalışma alanına sürükleyin ve önceki adımda oluşturduğunuz düğümle bağlayın.
  • "Update Payment Session" yöntemini seçin ve aşağıdaki açıklamada verilen kodu "Data" alanına yapıştırın.

Burada, "msg.paymentSessionId" içindeki kimliğe göre ödeme durumunu güncelliyoruz.

{
"id": {{paymentSessionId}},
"status": "completed"
}
api düğümü hakkında daha fazla bilgi burada bulunabilir.

7. PayPal'da Webhook Ekleyin

Projenizin bağlantısı + /api/admin/workflows/endpoints/paypal

Örnek:

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

Daha fazla bilgi için PayPal belgelerine göz atabilirsiniz.

8. Entegrasyonu Kontrol Etme

8.1. Sipariş oluşturun

IMG1

IMG2

Sipariş oluşturma hakkında API belgelerinde bilgi bulabilirsiniz.

8.2. Ödeme bağlantısını alın

IMG3

  • https://integrations-study.oneentry.cloud/api/admin/workflows/endpoints/get-payment-link adresine POST isteği yapın, https://integrations-study.oneentry.cloud yerine projenizin bağlantısını koyun.

  • İsteğin gövdesinde daha önce oluşturduğunuz siparişin kimliğini belirtin:

{
"orderId": 15
}

8.3. Siparişi ödeyin

IMG4

8.4. Siparişin durumunu kontrol edin

IMG5