مثال على التكامل مع 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. أنشئ جلسة دفع
- اسحب العقدة "admin-api" إلى مساحة العمل وصِلها بالعقدة من الخطوة السابقة.
- اختر الطريقة "Creating a payment session"، والصق الكود التالي في الحقل "Request body".
{
"orderId": {{orderEvent.order.id}},
"type": "session"
}
هنا نستخرج معرّف الطلب من الكائن "msg.orderEvent" ونكوّن طلبًا لإنشاء جلسة دفع.
يقبل طلب إنشاء الجلسة المعاملين: "orderId" (المعرّف) و"type" (نوع جلسة الدفع: session أو intent).
المزيد عن العقدة admin-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" إلى مساحة العمل وصِلها بالعقدة من الخطوة السابقة.
- في الحقل Method اختر "POST".
- في الحقل Data اختر "Send as request body".
- في الحقل Link الصق الرابط
https://api-m.sandbox.paypal.com/v1/oauth2/token. - في الحقل Return اختر "Object JSON".
- فعّل "Use Authentication".
- أدخل client ID الخاص بك في PayPal في الحقل "Username"، وclient secret في الحقل "Password".
يُستخدم هذا الطلب للحصول على "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: 'your 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 هنا.
(يفتح في علامة تبويب جديدة)