توسعه‌دهندگان

در این بخش روش‌های مختلف پیاده‌سازی و استفاده از سرویس‌های ارائه شده به فروشگاه‌ها، توضیح داده خواهد شد.

اسکریپت ردیابی

در صورتی که تیم فنی شما امکان پیاده‌سازی سرویس‌ها را ندارد یا تمایلی به پیاده‌سازی API ندارید می‌توانید برای ردیابی خریدهای انجام شده از اسکریپت ردیابی افیلی استفاده کنید.

ردیابی لینک‌ها:

قطعه کد زیر را در تگ هد همه صفحات سایت خود قرار دهید.

<script async src="https://analytics.affili.ir/scripts/affili-v2.js"></script>
<script>
  window.affiliData = window.affiliData || [];function affili(){affiliData.push(arguments);}
  affili('create');
</script>

ثبت مشتری:

در صورتی که ارائه دهنده سرویس SaaS هستید یا مشتری در ازای پرداخت حق عضویت از خدمات شما استفاده می‌کند و می‌خواهید در طول یک مدت زمان خاص یا برای تکرار خرید به بازاریاب پورسانت پرداخت کنید. نیاز است بعد از ثبت‌نام مشتری در سیستم شما از طریق قطعه کدی که در ادامه می‌آوریم، یک مشتری ایجاد کنید.

<script>
	affili('customer', customerId, metaData, function (affiliCustomerId) {
    	// Save affiliCustomerId in your DB
    });
</script>

پس از اینکه مشتری در افیلی تعریف ثبت شد شناسه مشتری در افیلی توسط تابع callback بازگردانده می‌شود. شما باید این مقدار را در دیتابیس خود ذخیره کنید. در قطعه کد بالا متغیرهای customerId و metaData باید با مقادیر صحیح توسط شما پر شوند که توضیح هر کدام را در ادامه می‌دهیم.

 customerId: 

شناسه یکتای مشتری در سیستم شماست. 

metaData:

آبجکتی حاوی اطلاعات اضافه راجع به مشتری است. ارسال این پارامتر اختیاری است. 

تذکر: در صورتی که مشتری از سمت افیلی نباشد، دیتایی سمت افیلی ذخیره نشده و تابع callback نیز فراخوانی نمی‌شود.

ثبت فروش:

برای ثبت فروش‌های انجام شده در thank you page قطعه کد زیر را قرار دهید.

<script async src="https://analytics.affili.ir/scripts/affili-v2.js"></script>
<script>
  window.affiliData = window.affiliData || [];function affili(){affiliData.push(arguments);}
  affili('create');
  affili('sale', uniqueSaleId, saleAmount, {
    coupon: couponCode,
    products: products,
    customer_id: affiliCustomerId
  });
</script>

دقت داشته باشید در کد بالا متغیرهای uniqueSaleId ،saleAmount ،couponCode ،products و affiliCustomerId باید توسط شما با مقادیر صحیح پر شود؛ که توضیح هر کدام در زیر آمده است.

uniqueSaleId:

یک شناسه یکتاست که باید در سیستم خود برای هر فروش ایجاد کنید. شما باید این متغیر را با یک تگ یا متغیر واقعی جایگزین کنید تا مقدار مربوطه را در هر فروش به صورت خودکار مقداردهی کند. شناسه یکتا میتواند هر چیزی که برای شما معنادار است باشد و باید برای هر فروش نیز منحصربفرد باشد. به طور مثال: شماره سفارش، شماره تراکنش و ... پس از ثبت فروش می‌توانید این شناسه را در پنل افیلی بخش کانورژنها مشاهده کنید. این امر باعث می‌شود که مدیریت داده‌های موجود در افیلی و سیستم شما آسانتر شود.

saleAmount:

مبلغ کل فروش یا همان مبلغ پرداختی کاربر بابت خرید است. دقت داشته باشید مبلغ مربوط به کرایه حمل و نقل و مالیات نباید لحاظ شده باشد.

couponCode:

در صورتی که مشتری هنگام خرید از کد تخفیف استفاده کرده باشد کد تخفیف مربوطه را باید وارد کنید در غیر اینصورت با مقدار null پر شود.

products:

آرایه‌ای از محصولاتی است که توسط مشتری خریداری شده، که به صورت زیر پر می‌شود.

products = [
  {
    "name": "محصول نمونه",
    "unit_price": 12000,
    "quantity": 3,
    "total_price": 36000
  },
  {
    "name": "محصول نمونه شماره دو",
    "unit_price": 43000,
    "quantity": 1,
    "total_price": 43000
  }
]

affiliCusomerId:

شناسه یکتای مشتری در افیلی است. ارسال این پارامتر اختیاری است. 

واحد پولی:

به صورت پیش‌فرض واحد پولی فروشگاه‌ها در افیلی ریال است در صورتی که از واحد پولی تومان استفاده می‌کنید به پشتیبانی فروشگاه‌ها اطلاع دهید تا واحد پولی شما تغییر کند.

ثبت لید:

برای ثبت لید هنگامی که اقدام مورد نظر رخ داد، قطعه کد زیر را فراخوانی کنید.

<script>
affili('lead', {
  meta_data: {
    form_id: "فرم صفحه لندیگ",
    first_name: "علی",
    last_name: "رمضانی",
    mobile: "09123456789",
    email: "test@exmpl.com",
  }
});
</script>

پارامتر form_id در متا دیتا برای هر فرم باید مقدار یکتایی داشته باشد. و ارسال آن الزامی است. این مقدار می‌تواند از نوع عدد یا یک رشته باشد. همچنین برای فرمهای لید همانند بالا می‌توانید سایر داده‌های فرم را در متغیر متا دیتا برای ما ارسال کنید. ارسال این اطلاعات برای تطبیق و جلوگیری از تقلب ناشران الزامی است.

سرویس کانورژن

برای ردیابی و مدیرت کانورژن‌ها و علاوه بر پیاده‌سازی اسکریپت می‌توانید از طریق API‌های سرویس کانورژن، اقدام به پیاده‌سازی سرویس همکاری در فروش نمایید. در ادامه به بررسی API‌های این سرویس و نحوه استفاده از آنها خواهیم پرداخت.

تعاریف

لینک افیلیت

به لینک کوتاه شده‌ای که توسط بازاریاب در افیلی ساخته می‌شود و مشتری پس از کلیک روی آن به وبسایت شما ارجاع داده می‌شود لینک افیلیت می‌گویند. هر لینک افیلیت پس از ارجاع به وبسایت فروشگاه شامل پارامترهای زیر خواهد بود.

نکته: مقدار 1- به معنای نامحدود است. و در صورت اعمال تا زمان معتبر بودن کوکی در صورت خرید مشتری به بازاریاب پورسانت تعلق می‌گیرد.

کانورژن

به هر اقدامی که فروشگاه در ازای آن به بازاریاب پورسانت پرداخت می‌کند کانورژن می‌گویند. افیلی دو نوع کانورژن فروش و لید را پشتیبانی می‌کند.

دوره کوکی

مدت زمانی است که لینک افیلیت معتبر بوده و در صورت تحقق کانورژن در این بازه زمانی به بازاریاب پورسانت تعلق خواهد گرفت.

دوره مرجوعی

مدت زمانی است که پس از ایجاد کانورژن امکان ویرایش آن وجود دارد. پس از این مدت زمان کانورژن لاک شده و در اولین سیکل بررسی کانورژن‌های لاک شده، پورسانت آن از حساب فروشگاه کسر و به بازاریاب پرداخت خواهد شد.


پیش‌نیازها

برای استفاده از سرویس‌های تعریف شده، نیاز به ارسال Bearer توکن است. از طریق ارتباط با پشتیبانی می‌توانید توکن دسترسی را دریافت کنید.


آدرس پایه ارسال درخواست‌ها

https://core.affili.ir/services/conversions


API کانورژن‌ها

طبق توضیحات داده شده در جدول زیر، از سه API تعریف شده می‌توانید برای ایجاد، ویرایش و دریافت کانورژن‌ها استفاده کنید.

نوع عملیات نوع درخواست توضیحات uri
ایجاد POST ایجاد کانورژن جدید /
ویرایش POST ویرایش کانورژن ایجاد شده؛ conversionId شناسه کانورژن ایجاد شده در افیلی است. /{conversionId}
لیست GET دریافت لیست کانورژن‌های ثبت شده /

ایجاد کانورژن

بعد از اینکه مشتری از طریق لینک افیلیت وارد وبسایت شما شد پارامترهای referrer و dl را به مدت زمان طول دوره کوکی (مقدار پارامتر exp)، در کوکی مرورگر کاربر ذخیره می‌کنیم.

بعد از تحقق کانورژن (به طور مثال انجام خرید توسط مشتری) از طریق API ایجاد کانورژن، اطلاعات مربوطه به افیلی ارسال می‌شود. در ادامه به بررسی نمونه دیتای ارسالی و دریافتی در ایجاد کانورژن‌های فروش و لید خواهیم پرداخت.

تذکر: در صورتی که از قبل مشتری را تعریف کرده باشید و در API کانورژن شناسه مشتری را ارسال کنید نیازی به ارسال referrer نیست.  

آدرس ارسال درخواست

POST https://core.affili.ir/services/conversions

قالب درخواست ایجاد کانورژن

{
  "referrer": string,
  "order_id": string,
  "amount": double,
  "type": string,
  "products": [
    object (Product),
    ...
  ],
  "is_first_order": boolean,
  "meta_data": object (MetaData),
  "coupon": string,
  "customer_id": string,
}

پارامترها

نام اجباری توضیحات
referrer بلی

String

توکن ارجاع که قبلا در مرورگر کاربر ذخیر شده. ارسال این پارامتر زمانی که customer_id ارسال می‌شود، اختیاری است.

type بلی

String

نوع کانورژن که می‌تواند یکی از مقادیر "sale" یا "lead" باشد.

order_id بلی

String

شماره‌ی سفارش انجام شده

amount بلی

Double

مبلغ کل سبد خرید

products خیر

Array of Product Object

لیست محصولات خریداری شده توسط مشتری؛ این پارامتر در کانورژن‌هایی با نوع  فروش(sale) ارسال می‌شود.

coupon خیر

String

کد تخفیف استفاده شده در خرید

is_first_order خیر

Boolean

پارامتر مشخص‌کننده اولین خرید

meta_data بلی

MetaData Object

آبجکت حاوی اطلاعات لید ثبت شده؛ این پارامتر در کانورژن‌هایی با نوع لید(lead) ارسال می‌شود.

customer_id خیر

String

شناسه یکتای مشتری در افیلی

قالب پاسخ ایجاد کانورژن

{
  "status": "ok",
  "tag": "saveConversion",
  "api_version": "1.0.0",
  "data": {
    "id": string,
    "publisher": object (Publisher),
    "status": integer,
    "type": string,
    "is_closed": integer,
    "checked_out": integer,
    "checked_out_at": dateTime,
    "order_id": string,
  	"amount": double,
    "commission_amount": double,
    "wage": double,
    "products": [
      object (Product),
      ...
    ],
    "is_first_order": boolean,
    "meta_data": object (MetaData)
    "created_at": dateTime,
    "updated_at": dateTime,
    "currency": string,
    "customer_id": string,
  }
}

پارامترها

نام توضیحات
id

String

شناسه یکتای کانورژن ایجاد شده در افیلی

publisher

Publisher Object

آبجکت مربوط به اطلاعات بازاریاب.

status

Conversion Status Constant

وضعیت کانورژن که می‌تواند یکی از اعداد ۰(در انتظار تایید توسط سیستم)، ۱(تایید شده)، ۲(رد شده)، ۳(تکراری) یا ۴(نیازمند بررسی دستی) باشد.

type

String

نوع کانورژن که می‌تواند sale یا lead باشد.

is_closed

Integer

وضعیت لاک کانورژن را نشان می‌دهد و در صورتی که مقدار آن ۱ باشد امکان ویرایش کانورژن وجود نخواهد داشت.

checked_out

Integer

وضعیت تسویه با بازاریاب را نشان می‌دهد

checked_out_at

DateTime

تاریخ تسویه پورسانت با بازاریاب

amount

Double

مبلغ سبد خرید؛ این پارامتر تنها در صورتی که کانورژن از نوع فروش(sale) باشد نمایش داده می‌شود.

commission_amount

Double

مبلغ پورسانت

wage

Double

کارمزد افیلی

order_id

String

شماره سفارش

products

Array of Product Object

لیست محصولات خریداری شده توسط مشتری؛ این پارامتر تنها در صورتی که کانورژن از نوع فروش(sale)، نمایش داده می‌شود.

is_first_order

Boolean

پارامتر مشخص‌کننده اولین خرید

meta_data

MetaData Object

آبجکت حاوی اطلاعات لید ایجاد شده؛ این پارامتر تنها در کانورژن‌هایی از نوع لید(lead) نمایش می‌شود.

coupon

String

کد تخفیف استفاده شده در خرید؛ این پارامتر تنها در صورتی که کانورژن از نوع فروش(sale)، نمایش داده می‌شود.

created_at

DateTime

تاریخ ایجاد

updated_at

DateTime

تاریخ آخرین بروزرسانی

currency

String

واحد پولی کانورژن ثبت شده که می‌تواند یکی از مقادیر IRT(تومان) یا IRR(ریال) باشد.

customer_id

String

شناسه یکتای مشتری در افیلی

درخواست نمونه برای ایجاد کانورژن از نوع فروش

{
  "referrer": "63b01acf9bf8325c1a3a2325",
  "order_id": "1234598",
  "amount": "12000",
  "type": "sale",
  "products": [
    {
      "name": "محصول نمونه",
      "unit_price": "12000",
      "quantity": "3",
      "total_price": "36000"
    },
    {
      "name": "محصول نمونه شماره دو",
      "unit_price": "43000",
      "quantity": "1",
      "total_price": "43000"
    }
  ],
  "is_first_order": false,
  "coupon": null
}

پاسخ نمونه برای ایجاد کانورژن از نوع فروش

{
  "status": "ok",
  "tag": "saveConversion",
  "api_version": "1.0.0",
  "data": {
    "id": "zbndn",
    "publisher": {
      "id": "gedyj",
      "full_name": "نام بازاریاب"
    },
    "status": 0,
    "type": "sale",
    "is_closed": 0,
    "checked_out": 0,
    "checked_out_at": null,
    "order_id": "1234598",
  	"amount": 12000,
    "commission_amount": 408.8,
    "wage": 81.76,
    "products": [
      {
        "name": "محصول نمونه",
        "unit_price": "12000",
        "quantity": "3",
        "total_price": "36000"
      },
      {
        "name": "محصول نمونه شماره دو",
        "unit_price": "43000",
        "quantity": "1",
        "total_price": "43000"
      }
    ],
    "is_first_order": false,
    "created_at": "2022-12-31 19:27:32",
    "updated_at": "2022-12-31 19:27:32",
    "currency": "IRT",
    "customer_id": null
  }
}

درخواست نمونه برای ایجاد کانورژن از نوع لید

{
  "referrer": "63abe5089bf8325c1a3a231a",
  "type": "lead",
  "meta_data": {
    "form_id": "register-form",
    "uniq_param": "09123456789",
	"first_name": "First Name",
	"last_name": "Last Name"
  }
}

پاسخ نمونه برای ایجاد کانورژن از نوع لید

{
  "status": "ok",
  "tag": "saveConversion",
  "api_version": "1.0.0",
  "data": {
    "id": "ydnak",
    "publisher": {
      "id": "gedyj",
      "full_name": "نام بازاریاب"
    },
    "status": 1,
    "type": "lead",
    "is_closed": 0,
    "checked_out": 0,
    "checked_out_at": null,
    "commission_amount": 2000,
    "wage": 400,
    "order_id": "7007e72b-10d8-540e-9b48-32c14a4f5f6d",
    "created_at": "2022-12-31 19:36:20",
    "updated_at": "2022-12-31 19:36:20",
    "currency": "IRT",
    "meta_data": {
      "form_id": "register-form",
      "uniq_param": "09123456789",
      "first_name": "First Name",
      "last_name": "Last Name"
    },
    "customer_id": null
  }
}

ویرایش کانورژن

می‌توانید تا قبل از پایان دوره مرجوعی و لاک شدن کانورژن، آن را ویرایش کنید. دقت داشته باشید که بعد از لاک شدن امکان اعمال تغییرات وجود نخواهد داشت.

آدرس ارسال درخواست

POST https://core.affili.ir/services/conversions/{conversionId}

*پارامتر conversionId در آدرس، شناسه کانورژن ثبت شده در افیلی است.

قالب درخواست ویرایش کانورژن

{
  "order_id": string,
  "amount": double,
  "products": [
    object (Product),
    ...
  ],
  "is_first_order": boolean,
  "meta_data": object (MetaData),
  "coupon": string,
  "status": integer,
  "recalculate": integer
}

پارامترها

نام توضیحات
order_id

String

شماره‌ی سفارش انجام شده؛ این پارامتر در کانورژن‌هایی با نوع فروش(sale) ارسال می‌شود.

amount

Double

مبلغ کل سبد خرید؛ این پارامتر در کانورژن‌هایی با نوع فروش(sale) ارسال می‌شود.

products

Array of Product Object

لیست محصولات خریداری شده توسط مشتری؛ این پارامتر در کانورژن‌هایی با نوع  فروش(sale) ارسال می‌شود.

is_first_order

Boolean

پارامتر مشخص‌کننده اولین خرید

meta_data

MetaData Object

آبجکت حاوی اطلاعات لید ثبت شده؛ این پارامتر در کانورژن‌هایی با نوع لید(lead) ارسال می‌شود.

coupon

String

کد تخفیف استفاده شده در خرید؛ این پارامتر در کانورژن‌هایی با نوع فروش(sale) ارسال می‌شود.

status

Conversion Status Constant

وضعیت کانورژن که می‌تواند یکی از اعداد ۱(تایید شده)، ۲(رد شده) یا ۴(نیازمند بررسی دستی) باشد.

recalculate

Boolean

در صورت ویرایش پارامترهای تاثیرگذار در محاسبه پورسانت همانند مبلغ کل سبد خرید، محصولات خریداری شده و ... برای محاسبه مجدد پورسانت باید پارامتر recalculate برابر با مقدار یک یا true باشد.

لیست کانورژن‌ها

برای دریافت لیست کانورژن‌های ثبت شده از API زیر استفاده کنید.

آدرس ارسال درخواست

GET https://core.affili.ir/services/conversions

قالب پارامترهای ارسالی برای اعمال فیلتر

{
  "id": string,
  "status" integer,
  "type": string,
  "external_id": string,
  "is_closed": integer,
  "checked_out" integer,
  "min_commission_amount": double,
  "max_commission_amount": double,
  "min_created_at": dateTime,
  "max_created_at": dateTime,
  "min_updated_at": dateTime,
  "max_updated_at": dateTime,
  "min_amount": double,
  "max_amount" double,
}

پارامترها

نام توضیحات

id

String

شناسه یکتای کانورژن در افیلی

status

Conversion Status Constant

وضعیت کانورژن که می‌تواند یکی از اعداد ۰(در انتظار تایید توسط سیستم)، ۱(تایید شده)، ۲(رد شده)، ۳(تکراری) یا ۴(نیازمند بررسی دستی) باشد.

type

String

نوع کانورژن که می‌تواند sale یا lead باشد.

order_id

String

شماره سفارش

is_closed

Integer

وضعیت لاک کانورژن را نشان می‌دهد و در صورتی که مقدار آن ۱ باشد امکان ویرایش کانورژن وجود نخواهد داشت.

checked_out

Integer

وضعیت تسویه با بازاریاب را نشان می‌دهد

min_commission_amount

Double

حداقل مبلغ پورسانت کانورژن؛ این پارامتر برای فیلتر کانورژن‌هایی با پورسانت بیش‌تر یا مساوی این مقدار استفاده می‌شود.  

max_commission_amount

Double

حداکثر مبلغ پورسانت کانورژن؛ این پارامتر برای فیلتر کانورژن‌هایی با پورسانت کمتر یا مساوی این مقدار استفاده می‌شود.  

min_created_at

Double

حداقل تاریخ ایجاد کانورژن؛ این پارامتر برای فیلتر کانورژن‌هایی با تاریخ ایجاد بیش‌تر یا مساوی این مقدار استفاده می‌شود.  

max_created_at

Double

حداکثر تاریخ ایجاد کانورژن؛ این پارامتر برای فیلتر کانورژن‌هایی با تاریخ ایجاد کمتر یا مساوی این مقدار استفاده می‌شود.

min_updated_at

Double

حداقل تاریخ ایجاد کانورژن؛ این پارامتر برای فیلتر کانورژن‌هایی با تاریخ ویرایش بیش‌تر یا مساوی این مقدار استفاده می‌شود.

max_updated_at

Double

حداکثر تاریخ ایجاد کانورژن؛ این پارامتر برای فیلتر کانورژن‌هایی با تاریخ ویرایش کمتر یا مساوی این مقدار استفاده می‌شود.

min_amount

Double

حداقل مبلغ سبد خرید؛ این پارامتر برای فیلتر کانورژن‌هایی با مبلغ سبد خرید بیش‌تر یا مساوی این مقدار استفاده می‌شود.

max_amount

Double

حداکثر تاریخ ایجاد کانورژن؛ این پارامتر برای فیلتر کانورژن‌هایی با مبلغ سبد خرید کمتر یا مساوی این مقدار استفاده می‌شود.


موجودیت‌ها

Product

قالب JSON

{
  "name": string,
  "unit_price": double,
  "quantity": integer,
  "total_price": double
}

پارامترها

name

String

نام محصول

unit_price

Double

قیمت واحد محصول در سبد خرید

quantity

Integer

تعداد محصول در سبد خرید

total_price

Double

مجموع قیمت محصول در سبد خرید

Meta Data

قالب JSON

"meta_data": {
  "form_id": string,
  "uniq_param": string,
  
  // Any other fields can be added as extra data.
}

پارامترها

 form_id

String

شناسه یکتای فرم مربوطه در وبسایت فروشگاه

uniq_param

String

پارامتر یکتای لید ثبت شده که می‌تواند داده‌ای نظیر شماره موبایل، ایمیل، کد ملی یا هر مقدار یکتای دیگری در فرم باشد.

Publisher

قالب JSON

{
  "id": string,
  "full_name": string
}

پارامترها

id شناسه یکتای بازاریاب در افیلی
full_name نام بازاریاب


ثابت‌ها

وضعیت کانورژن

۰ در انتظار تایید توسط سیستم
۱ تایید شده
۲ تکراری
۳ نیازمند بررسی دستی

سرویس محصول

در صورتی که بخواهید لیست محصولات شما به بازاریابان نمایش داده شود یا برای دسته‌بندی‌ها و محصولات مختلف پورسانت‌های متفاوتی را از طریق پنل کاربری اعمال کنید؛ نیاز است که محصولات فروشگاه خود را درون‌ریزی کنید. می‌توانید از طریق پیاده‌سازی وب سرویس یا از طریق ست کردن وب هوک  این کار را انجام دهید.

وب سرویس

پیش‌نیازها

برای استفاده، نیاز به ارسال Bearer توکن است. از طریق ارتباط با پشتیبانی می‌توانید توکن فروشگاه خود را دریافت کنید.

آدرس پایه ارسال درخواست‌ها

https://core.affili.ir/services/products

API محصولات

طبق توضیحات داده شده در جدول زیر، از API تعریف شده می‌توانید برای ایمپورت محصولات فروشگاه خود در افیلی استفاده کنید.

نوع عملیات نوع درخواست توضیحات uri
درون‌ریزی POST درون‌ریزی محصولات؛ می‌توانید حداکثر ۱۰۰۰ محصول را در هر بار فراخوانی سرویس  درون‌ریزی کنید. برای بروزرسانی هم می‌توانید از همین وب سرویس استفاده کنید. /import

درون‌ریزی محصولات

آدرس ارسال درخواست
POST https://core.affili.ir/services/products/import
قالب درخواست درون‌ریزی
{
  "products": [
  	object (Product),
    ...
  ]
}
پارامترها
نام اجباری توضیحات
products بلی

Array of Product Object

لیست محصولات


وب هوک

کافی است API‌ای با قالب پاسخی مطابق زیر آماده کرده و در اختیار پشتیبانی قرار دهید. تا کار ست کردن وب هوک توسط پشتیبانی برای فروشگاه شما انجام شود.

{
  "data": {
    "products": [
       object (Product),
      ...
    ]
  },
  "meta": {
    "page": object (Page)
  }
}

پارامترها

products

Product Object

لیست محصولات فروشگاه

page

Page Object

اطلاعات مربوط به صفحه دریافتی شامل شماره صفحه، تعداد آیتم‌ها در هر صفحه و ...

اعمال فیلتر

پیاده‌سازی بخش فیلتر نیازمند پیروی از قوانینی است که در ادامه به شرح آن‌ها خواهیم پرداخت.

۱- قابلیت اعمال فیلتر روی تمامی آیتم‌‌های آبجکت محصول و دسته‌بندی باید فعال باشد.

۲- برای اعمال فیلتر روی مقادیر old_price ،price و last_update که می‌توانند به صورت بازه‌ای از مقادیر باشند؛ از پیشوند _min برای تعریف پارامتر ارسالی حداقل و از پیشوند _max برای تعریف پارامتر ارسالی حداکثر استفاده می‌شود. به طور مثال برای اعمال فیلتر روی قیمت محصول در صورتی که پارامتر min_price از سمت افیلی ارسال شود به معنای فیلتر محصولاتی است که قیمت آنها بزرگتر مساوی مقدار پارامتر min_price باشد. برای پارامتر max_price هم به طور مشابه منظور فیلتر محصولاتی است که قیمت آنها کمتر مساوی مقدار پارامتر max_price باشد.

صفحه‌بندی

برای پیمایش در صفحات از پارامتر  page  برای ارسال شماره صفحه مدنظر و از پارامتر  per_page  برای تعیین تعداد محصولات هر صفحه استفاده می‌شود.


موجودیت‌ها

product

قالب JSON

{
  "pid": string,
  "name": string,
  "url": string,
  "price": double,
  "old_price": double,
  "in_stock": boolean,
  "images": [
    string,
    ...
  ],
  "categories": [
    object (Category)
  ],
  "created_at": dateTime,
  "updated_at": datetime
}

پارامترها

pid

String

شناسه یکتای محصول در وبسایت فروشگاه

name

String

نام محصول

url

String

آدرس صفحه محصول در وبسایت فروشگاه

price

Double

قیمت محصول

old_price

Double

قیمت قدیمی محصولی؛ در صورتی که محصول قیمت قدیمی ندارد مقدار این پارامتر برابر با null می‌شود.

in_stock

Boolean

وضعیت موجود بودن محصول؛ که می‌تواند یکی از مقادیر 0، 1، true یا false را داشته باشد.

images

Array

آرایه‌ای از آدرس عکس‌های محصول

categories

Array of Category Object

لیست دسته‌بندی‌های محصول

created_at

DateTime

تاریخ ایجاد محصول

updated_at

DateTime

تاریخ آخرین بروزرسانی محصول

Category

قالب JSON

{
  "cid": string,
  "name": string,
  "url": string,
  "parent_cid": string,
  "is_primary": boolean
}

پارامترها

cid

String

شناسه یکتای دسته‌بندی در وبسایت فروشگاه

name

String

نام دسته‌بندی

url

String

آدرس صفحه دسته‌بندی در وبسایت فروشگاه

parent_cid

String

دسته والد؛ در صورتی که دسته‌بندی، دسته والد ندارد مقدار این پارامتر برابر با null می‌شود.

is_primary

Boolean

دسته‌بندی شاخص؛ در صورتی که این دسته‌بندی، دسته‌بندی شاخص محصول است مقدار این پارامتر برابر با ۱ یا true و در غیر این صورت برابر با ۰ یا false می‌شود.

Page

قالب JSON

{
  "current": integer,
  "per": integer,
  "last": integer,
  "total": integer
}

پارامترها

current

Integer

شماره صفحه فعلی

per

Integer

تعداد محصولات در هر صفحه، مقدار این پارامتر می‌تواند حداکثر ۱۰۰۰ باشد.

last

Integer

شماره آخرین صفحه

total

Integer

تعداد کل محصولات

سرویس مشتری

در صورتی که ارائه دهنده سرویس SaaS هستید یا مشتری در ازای پرداخت حق عضویت از خدمات شما استفاده می‌کند و می‌خواهید در طول یک مدت زمان خاص یا برای تکرار خرید به بازاریاب پورسانت پرداخت کنید. نیاز است از طریق APIهای ارائه شده در این صفحه مشتریانی که از طریق بازاریابهای افیلی در سیستم شما ثبت نام می‌کنند را در افیلی تعریف کنید.

تعاریف

مشتری:

کاربری که برای استفاده از خدمات در سایت یا اپلیکیشن شما ثبت نام کرده است.

پیش‌نیازها

برای استفاده از سرویس‌های تعریف شده، نیاز به ارسال Bearer توکن است. از طریق ارتباط با پشتیبانی می‌توانید توکن دسترسی را دریافت کنید.

آدرس پایه ارسال درخواست‌ها

https://core.affili.ir/services/customers

API مشتری‌ها

طبق توضیحات داده شده در جدول زیر، از سه API تعریف شده می‌توانید برای ایجاد، ویرایش و دریافت مشتری‌ها استفاده کنید.

نوع عملیات نوع درخواست توضیحات uri
ایجاد POST ایجاد مشتری جدید

ویرایش

POST ویرایش مشتری ایجاد شده؛ customerId شناسه مشتری ایجاد شده در افیلی است. /{customerId}

لیست

GET دریافت لیست مشتری‌های ثبت شده

ایجاد مشتری

بعد از اینکه کاربر از طریق لینک افیلیت وارد وبسایت شما شد پارامتر referrer را به مدت زمان طول دوره کوکی (مقدار پارامتر exp)، در کوکی مرورگر وی ذخیره می‌کنیم.

بعد از ثبت نام کاربر، از طریق API مربوط به ایجاد مشتری اطلاعات مربوطه به افیلی ارسال می‌شود. همچنین دقت داشته باشید که مقدار شناسه مشتری در افیلی باید توسط شما ذخیره گردد تا در زمان ثبت کانورژن بتوانید از آن استفاده کنید. در ادامه به بررسی نمونه دیتای ارسالی و دریافتی در ایجاد مشتری خواهیم پرداخت.

آدرس ارسال درخواست

POST https://core.affili.ir/services/customers

قالب درخواست ایجاد مشتری

{
  "referrer": string,
  "mcs_id": string,
  "meta_data": object (MetaData)
}

پارامترها

نام اجباری

توضیحات

referrer بلی

String

توکن ارجاع که قبلا در مرورگر کاربر ذخیر شده.

mcs_id بلی

String

شناسه یکتای مشتری در سیستم شما

meta_data خیر

MetaData Object

آبجکت حاوی اطلاعات اضافه راجع به مشتری

قالب پاسخ ایجاد مشتری

{
  "status": "ok",
  "tag": "saveCustomer",
  "api_version": "1.0.0",
  "data": {
    "id": string,
    "mcs_id": string,
    "meta_data": object (MetaData)
    "created_at": dateTime,
    "updated_at": dateTime,
    "publisher": object (Publisher)
  }
}

پارامترها

نام توضیحات
id

String

شناسه یکتای مشتری ایجاد شده در افیلی

mcs_id

String

شناسه مشتری در سیستم شما

meta_data

MetaData Object

آبجکت حاوی اطلاعات اضافه راجع به مشتری

publisher

Publisher Object

آبجکت حاوی اطلاعات بازاریاب

created_at

DateTime

تاریخ ایجاد

updated_at

DateTime

تاریخ آخرین بروزرسانی

ویرایش مشتری

برای تغییر در اطلاعات مشتری می‌توانید از API زیر استفاده کنید.

POST https://core.affili.ir/services/customers/{customerId}

*پارامتر customerId در آدرس، شناسه مشتری ثبت شده در افیلی است.

قالب درخواست ویرایش مشتری

{
  "mcs_id": string,
  "meta_data": object (MetaData)
}

لیست مشتری‌ها

برای دریافت لیست مشتری‌های ثبت شده از API زیر استفاده کنید.

آدرس ارسال درخواست

GET https://core.affili.ir/services/customers

قالب پارامترهای ارسالی برای اعمال فیلتر

{
  "id": string,
  "mcs_id" string,
  "min_created_at": dateTime,
  "max_created_at": dateTime,
  "min_updated_at": dateTime,
  "max_updated_at": dateTime,
  "publisher_id": integer
}

موجودیت‌ها

Meta Data

قالب JSON

{
  "first_name": string,
  "last_name": string,
  "mobile": string,
  "email": string
  
  // Any other fields can be added as extra data.
}

Publisher

قالب JSON

{
  "id": string,
  "full_name": string
}

پیاده‌سازی برای سایت‌ساز پرتال

برای پیاده‌سازی کافی است فایل payment.html را مطابق زیر تغییر دهید.

<include name="layouts/header.html" />
<!--main-->
<main class="page-container cart-payment-container" cart-payment>
	<div class="container">
		<div class="page-context cart-payment-context bg-white rounded shadow-sm p-25 p-sm-30 p-md-35 p-lg-40" ng-switch="model.mode">
			<h1 class="page-title cart-payment-title">
				@@title
			</h1>
			<div ng-hide="loading" auto-show>
				<div ng-hide="ready">
					<scope name="cart-payment">
						<include name="layouts/validation.html" />
					</scope>
				</div>
				<div ng-show="ready">
					<div class="page-description cart-payment-description">
						لطفا از طریق فرم زیر اقدام به پرداخت سفارش کنید.
					</div>
					<hr class="page-separator cart-payment-separator">
					
					<!-- Written By Affili -->
					<span id="affili-payment-paid-status" style="display:none;">{{paid}}</span>
					<span id="affili-payment-model" style="display:none;">{{model}}</span>
					<!-- /Written By Affili -->
					
					<div class="cart-payment-paid" ng-show="paid">
						<div class="alert alert-success cart-payment-paid-description">
							پرداخت سفارش با موفقیت انجام شده.
						</div>
						<a href="/user/store/orders/{{model.id}}" ng-hide="anonymouse" class="btn btn-primary cart-payment-paid-details">
							مشاهده جزئیات
						</a>
						<a href="/user/store/orders/download" class="btn btn-success cart-payment-paid-download" ng-show="downloadable && !anonymouse">
							دانلود
						</a>
					</div>
					<div ng-hide="paid">
						<form name="payment" ng-submit="payment.$valid && submit()" dynamic-form novalidate>
							<div class="alert alert-success cart-payment-succeed" ng-class="{'mb-5':succeed}" ng-show="succeed">
								<span ng-bind="succeed.description"></span>
							</div>
							<div ng-hide="succeed && succeed.paid !== false">
								<div class="cart-payment-shipping" ng-show="shippings">
									<h4 class="cart-payment-shipping-title">
										<span class="badge badge-primary cart-payment-shipping-badge">
											{{step(0)}}
										</span>
										برنامه ارسال
									</h4>
									<div class="cart-payment-shipping-description">
										لطفا برنامه ارسال خود را انتخاب کنید.
									</div>
									<div class="cart-payment-shipping-items">
										<div class="cart-payment-shipping-item my-2" ng-repeat="item in shippings">
											<div class="custom-control custom-radio cart-payment-shipping-item-control">
												<input type="radio" id="cart-payment-shipping-item-{{item.id}}" class="custom-control-input cart-payment-shipping-item-input" ng-value="item.id" ng-model="model.shipping_id" ng-disabled="progress">
												<label class="custom-control-label cart-payment-shipping-item-label" for="cart-payment-shipping-item-{{item.id}}">
													{{item.title}} / {{item.cost ? (item.cost | number) + ' تومان' : 'رایگان'}} {{item.description ? '/' : ''}}
													<i class="fa fa-question-circle text-muted" data-toggle="tooltip" data-original-title="{{item.description}}" ng-show="item.description"></i>
												</label>
											</div>
										</div>
									</div>
								</div>
								<hr class="page-separator cart-payment-separator" ng-show="shippings">
								<div class="cart-payment-details">
									<h4 class="cart-payment-details-price">
										<span class="badge badge-primary cart-payment-details-price-badge">
											{{step(1)}}
										</span>
										مبلغ قابل پرداخت: {{model.remaining_price|number}} تومان
									</h4>
									<span class="cart-payment-details-created">
										ثبت سفارش: {{model.created.subtract}}
									</span>
									<span class="cart-payment-details-duedate" ng-show="model.due_date">
										، سررسید پرداخت: {{model.due_date.subtract}}
									</span>
								</div>
								<hr class="page-separator cart-payment-separator">
								<div class="cart-payment-method">
									<h4 class="cart-payment-method-title">
										<span class="badge badge-primary cart-payment-method-title-badge">
											{{step(2)}}
										</span>
										روش پرداخت
									</h4>
									<div class="cart-payment-method-description">
										لطفا نوع پرداخت مورد نظر خود را از طریق گزینه‌های زیر انتخاب کنید.
									</div>
									<div class="custom-control custom-radio cart-payment-method-online my-2" ng-show="model.payment.online">
										<input type="radio" id="cart-payment-method-online" name="method" class="custom-control-input cart-payment-method-online-input" value="online_payment" ng-model="model.mode" ng-disabled="progress">
										<label class="custom-control-label cart-payment-method-online-label" for="cart-payment-method-online">
											پرداخت الکترونیک از طریق کارت‌های عضو شتاب
										</label>
									</div>
									<div class="custom-control custom-radio cart-payment-method-bank my-2" ng-show="model.payment.bank">
										<input type="radio" id="cart-payment-method-bank" name="method" class="custom-control-input cart-payment-method-bank-input" value="bank" ng-model="model.mode" ng-disabled="progress">
										<label class="custom-control-label cart-payment-method-bank-label" for="cart-payment-method-bank">
											پرداخت از طریق واریز به حساب
										</label>
									</div>
									<div class="custom-control custom-radio cart-payment-method-wallet my-2" ng-show="model.payment.wallet">
										<input type="radio" id="cart-payment-method-wallet" name="method" class="custom-control-input cart-payment-method-wallet-input" value="wallet" ng-model="model.mode" ng-disabled="progress">
										<label class="custom-control-label cart-payment-method-wallet-label" for="cart-payment-method-wallet">
											پرداخت از طریق کیف‌پول
										</label>
									</div>
									<div class="custom-control custom-radio cart-payment-method-cod my-2" ng-show="model.payment.cash_on_delivery">
										<input type="radio" id="cart-payment-method-cod" name="method" class="custom-control-input cart-payment-method-cod-input" value="cash_on_delivery" ng-model="model.mode" ng-disabled="progress">
										<label class="custom-control-label cart-payment-method-cod-label" for="cart-payment-method-cod">
											پرداخت در محل
										</label>
									</div>
								</div>
								<hr class="page-separator cart-payment-separator" ng-show="model.mode">
								<div class="cart-payment-bank-form" ng-switch-when="bank">
									<h4 class="cart-payment-bank-title">
										<span class="badge badge-primary cart-payment-bank-title-badge">
											{{step(3)}}
										</span>
										حساب بانکی
									</h4>
									<div class="cart-payment-bank-description">
										لطفا حساب بانکی مورد نظر خود را انتخاب کنید.
									</div>
									<div class="row">
										<div class="col-md-6 col-xl-4 form-group">
											<div class="cart-payment-bank-gateway">
												<select name="gateway_id" class="form-control cart-payment-bank-gateway-input" ng-model="model.gateway_id" ng-disabled="progress" required>
													<option ng-value="item" ng-repeat="item in accounts">
														{{item.title}}
													</option>
												</select>
												<div class="validation-inline cart-payment-inline-error text-danger" ng-messages="payment.gateway_id.$error" ng-show="payment.$submitted || payment.gateway_id.$dirty">
													<span ng-message="required">
														حساب بانکی را انتخاب کنید.
													</span>
													<span ng-message="server">
														<span ng-bind="validation.gateway_id"></span>
													</span>
												</div>
											</div>
										</div>
									</div>
								</div>
								<div class="cart-payment-transfer" ng-switch-when="bank" ng-show="model.gateway_id">
									<hr class="page-separator cart-payment-separator">
									<h4 class="cart-payment-transfer-title">
										<span class="badge badge-primary cart-payment-transfer-title-badge">
											{{step(4)}}
										</span>
										واریز به حساب
									</h4>
									<div class="cart-payment-transfer-description">
										لطفا مبلغ سفارش را به حساب با اطلاعات زیر واریز کنید:
									</div>
									<div class="cart-payment-transfer-name">
										عنوان:
										<b class="cart-payment-transfer-name-value">
											{{model.gateway_id.title}}
										</b>
									</div>
									<div class="cart-payment-transfer-owner">
										صاحب حساب:
										<b class="cart-payment-transfer-owner-value">
											{{model.gateway_id.owner}}
										</b>
									</div>
									<div class="cart-payment-transfer-pan" ng-show="model.gateway_id.pan">
										شماره کارت:
										<b class="cart-payment-transfer-pan-value">
											{{model.gateway_id.pan}}
										</b>
									</div>
									<div class="cart-payment-transfer-iban" ng-show="model.gateway_id.iban">
										شماره شبا:
										<b class="cart-payment-transfer-iban-value">
											{{model.gateway_id.iban}}
										</b>
									</div>
									<div class="cart-payment-transfer-account" ng-show="model.gateway_id.account">
										شماره حساب:
										<b class="cart-payment-transfer-account-value">
											{{model.gateway_id.account}}
										</b>
									</div>
								</div>
								<div class="cart-payment-fish" ng-switch-when="bank" ng-show="model.gateway_id">
									<hr class="page-separator cart-payment-separator">
									<h4 class="cart-payment-fish-title">
										<span class="badge badge-primary cart-payment-fish-title-badge">
											{{step(5)}}
										</span>
										سند پرداخت
									</h4>
									<scope name="cart-payment">
										<include name="layouts/validation.html" />
									</scope>
									<div class="cart-payment-fish-description">
										اطلاعات سند پرداخت خود را از طریق فرم زیر ثبت کنید.
									</div>
									<div class="row">
										<div class="col-md-6 col-lg-4 form-group">
											<div class="cart-payment-fish-reference">
												<label for="reference_id" class="cart-payment-fish-reference-label">
													کد پیگیری
												</label>
												<input type="text" name="reference_id" id="reference_id" class="form-control cart-payment-fish-reference-input" maxlength="100" ng-model="model.reference_id" ng-disabled="progress" required>
												<div class="validation-inline cart-payment-inline-error text-danger" ng-messages="payment.reference_id.$error" ng-show="payment.$submitted || payment.reference_id.$dirty">
													<span ng-message="required">
														کد پیگیری را بنویسید.
													</span>
													<span ng-message="server">
														<span ng-bind="validation.reference_id"></span>
													</span>
												</div>
											</div>
										</div>
									</div>
									<div class="row">
										<div class="col-md-12 col-lg-8 form-group">
											<div class="cart-payment-fish-description-field">
												<label for="description" class="cart-payment-fish-description-field-label">
													توضیحات
												</label>
												<textarea type="text" name="description" id="description" class="form-control cart-payment-fish-description-field-input" maxlength="4000" rows="5" ng-model="model.description" ng-disabled="progress"></textarea>
												<div class="validation-inline cart-payment-inline-error text-danger" ng-messages="payment.description.$error" ng-show="payment.$submitted || payment.description.$dirty">
													<span ng-message="maxlength">
														توضیحات را کم‌تر از 4000 حرف بنویسید.
													</span>
													<span ng-message="server">
														<span ng-bind="validation.description"></span>
													</span>
												</div>
											</div>
										</div>
									</div>
									<button class="btn btn-lg btn-success cart-payment-fish-submit" ng-switch="model.mode" ng-disabled="progress">
										ثبت سند پرداخت
									</button>
								</div>
								<div class="cart-payment-online-form" ng-switch-when="online_payment">
									<h4 class="cart-payment-online-title">
										<span class="badge badge-primary cart-payment-online-title-badge">
											{{step(3)}}
										</span>
										درگاه پرداخت
									</h4>
									<scope name="cart-payment">
										<include name="layouts/validation.html" />
									</scope>
									<div class="cart-payment-online-description">
										لطفا درگاه پرداخت مورد نظر خود را انتخاب کنید.
									</div>
									<div class="row">
										<div class="col-md-6 col-xl-4 form-group">
											<div class="cart-payment-online-gateway">
												<select name="gateway_id" class="form-control cart-payment-online-gateway-input" ng-model="model.gateway_id" ng-disabled="progress" required>
													<option ng-value="item" ng-repeat="item in gateways">
														{{item.title}}
													</option>
												</select>
												<div class="validation-inline cart-payment-inline-error text-danger" ng-messages="payment.gateway_id.$error" ng-show="payment.$submitted || payment.gateway_id.$dirty">
													<span ng-message="required">
														درگاه پرداخت را انتخاب کنید.
													</span>
													<span ng-message="server">
														<span ng-bind="validation.gateway_id"></span>
													</span>
												</div>
											</div>
										</div>
									</div>
									<button class="btn btn-lg btn-success cart-payment-online-submit" ng-switch="model.mode" ng-disabled="progress">
										پرداخت
									</button>
								</div>
								<div class="cart-payment-wallet-form" ng-switch-when="wallet">
									<div class="alert alert-warning cart-payment-wallet-description" ng-show="user && model.remaining_price > user.credit">
										از آنجایی که شارژ کیف‌پول شما کم‌تر از مبلغ قابل پرداخت است؛ اگر بر روی دکمه‌ی پرداخت کلیک کنید، کل موجودی کیف‌پول شما به مقدار {{user.credit|number}} تومان از صورت‌حساب کسر خواهد شد و باقیمانده‌ی آن را می‌توانید از دیگر روش‌های موجود پرداخت کنید.
									</div>
									<scope name="cart-payment">
										<include name="layouts/validation.html" />
									</scope>
									<button class="btn btn-lg btn-success cart-payment-wallet-submit" ng-disabled="progress">
										پرداخت
									</button>
								</div>
								<div class="cart-payment-cod-form" ng-switch-when="cash_on_delivery">
									<scope name="cart-payment">
										<include name="layouts/validation.html" />
									</scope>
									<button class="btn btn-lg btn-success cart-payment-cod-submit" ng-disabled="progress">
										ثبت درخواست
									</button>
								</div>
								<div class="page-loading cart-payment-loading" ng-show="loading">
									<i class="fa fa-refresh fa-spin fa-fw"></i>
									کمی صبر کنید...
								</div>
							</div>
						</form>
					</div>
				</div>
			</div>
			<div class="page-loading cart-loading" ng-show="loading">
				<i class="fa fa-refresh fa-spin fa-fw"></i>
				کمی صبر کنید...
			</div>
		</div>
	</div>
</main>
<!--/main-->
<!-- Written By Affili -->
<script type="text/javascript">
let affiliCounter = 0;
let affiliSaleTrackInterval = setInterval(function() {
    try {
        let paidStatus = document.querySelector('#affili-payment-paid-status');
        let model = document.querySelector('#affili-payment-model');

        if (paidStatus && model && (paidStatus.textContent === 'true' || paidStatus.textContent === true)) {
            model = JSON.parse(model.textContent)
            affili('sale', model.id, model.price, {
                coupon: model.coupons && model.coupons.constructor === Array ? model.coupons[0] : null,
                products: model.items.map(item => {
                    return {
                        pid: item.id,
                        name: item.title,
                        unit_price: item.product.variant.price,
                        quantity: item.quantity,
                        total_price: item.price,
                    }
                }),
            }, true, function() {
                clearInterval(affiliSaleTrackInterval)
            });
            affiliCounter++
            if (affiliCounter > 3) {
                clearInterval(affiliSaleTrackInterval);
            }
        }
    } catch (e) {
        console.log(e)
    }
}, 100);
</script>
<!-- /Written By Affili -->
<include name="layouts/footer.html" />

سرویس ساب دامنه

برای پیاده‌سازی سرویس ساب دامنه بعد از خرید و فعال‌سازی سرویس، می‌توانید برای ردیابی خریدهای انجام شده از اسکریپت ردیابی افیلی استفاده کنید.

ردیابی لینک‌ها:

قطعه کد زیر را در تگ هد همه صفحات سایت خود قرار دهید.

<script async src="https://yourdomain.com/core/scripts/tracker.js"></script>
<script>
  window.adTrackData = window.adTrackData || [];function affili(){adTrackData.push(arguments);}
  adtrack('create');
</script>

ثبت مشتری:

در صورتی که ارائه دهنده سرویس SaaS هستید یا مشتری در ازای پرداخت حق عضویت از خدمات شما استفاده می‌کند و می‌خواهید در طول یک مدت زمان خاص یا برای تکرار خرید به بازاریاب پورسانت پرداخت کنید. نیاز است بعد از ثبت‌نام مشتری در سیستم شما از طریق قطعه کدی که در ادامه می‌آوریم، یک مشتری ایجاد کنید.

<script>
	adtrack('customer', customerId, metaData, function (adTrackCustomerId) {
    	// Save adTrackCustomerId in your DB
    });
</script>

پس از اینکه مشتری در سرویس ثبت شد شناسه مشتری توسط تابع callback بازگردانده می‌شود. شما باید این مقدار را در دیتابیس خود ذخیره کنید. در قطعه کد بالا متغیرهای customerId و metaData باید با مقادیر صحیح توسط شما پر شوند که توضیح هر کدام را در ادامه می‌دهیم.

 customerId: 

شناسه یکتای مشتری در سیستم شماست. 

metaData:

آبجکتی حاوی اطلاعات اضافه راجع به مشتری است. ارسال این پارامتر اختیاری است. 

تذکر: در صورتی که مشتری از سمت بازاریاب نباشد، دیتایی سمت سرویس ذخیره نشده و تابع callback نیز فراخوانی نمی‌شود.

ثبت فروش:

برای ثبت فروش‌های انجام شده در thank you page قطعه کد زیر را قرار دهید.

<script async src="https://yourdomain.com/core/scripts/tracker.js"></script>
<script>
  window.adTrackData = window.adTrackData || [];function affili(){adTrackData.push(arguments);}
  adtrack('create');
  adtrack('sale', uniqueSaleId, saleAmount, {
    coupon: couponCode,
    products: products,
    customer_id: adTrackCustomerId
  });
</script>

دقت داشته باشید در کد بالا متغیرهای uniqueSaleId ،saleAmount ،couponCode ،products و adTrackCustomerId باید توسط شما با مقادیر صحیح پر شود؛ که توضیح هر کدام در زیر آمده است.

uniqueSaleId:

یک شناسه یکتاست که باید در سیستم خود برای هر فروش ایجاد کنید. شما باید این متغیر را با یک تگ یا متغیر واقعی جایگزین کنید تا مقدار مربوطه را در هر فروش به صورت خودکار مقداردهی کند. شناسه یکتا میتواند هر چیزی که برای شما معنادار است باشد و باید برای هر فروش نیز منحصربفرد باشد. به طور مثال: شماره سفارش، شماره تراکنش و ... پس از ثبت فروش می‌توانید این شناسه را در پنل افیلی بخش کانورژنها مشاهده کنید. این امر باعث می‌شود که مدیریت داده‌های موجود در افیلی و سیستم شما آسانتر شود.

saleAmount:

مبلغ کل فروش یا همان مبلغ پرداختی کاربر بابت خرید است. دقت داشته باشید مبلغ مربوط به کرایه حمل و نقل و مالیات نباید لحاظ شده باشد.

couponCode:

در صورتی که مشتری هنگام خرید از کد تخفیف استفاده کرده باشد کد تخفیف مربوطه را باید وارد کنید در غیر اینصورت با مقدار null پر شود.

products:

آرایه‌ای از محصولاتی است که توسط مشتری خریداری شده، که به صورت زیر پر می‌شود.

products = [
  {
    "name": "محصول نمونه",
    "unit_price": 12000,
    "quantity": 3,
    "total_price": 36000
  },
  {
    "name": "محصول نمونه شماره دو",
    "unit_price": 43000,
    "quantity": 1,
    "total_price": 43000
  }
]

adTrackCusomerId:

شناسه یکتای مشتری در افیلی است. ارسال این پارامتر اختیاری است. 

واحد پولی:

به صورت پیش‌فرض واحد پولی فروشگاه‌ها ریال است در صورتی که از واحد پولی تومان استفاده می‌کنید به پشتیبانی فروشگاه‌ها اطلاع دهید تا واحد پولی شما تغییر کند.

ثبت لید:

برای ثبت لید هنگامی که اقدام مورد نظر رخ داد، قطعه کد زیر را فراخوانی کنید.

<script>
adtrack('lead', {
  meta_data: {
    form_id: "فرم صفحه لندیگ",
    uniq_param: "پارامتر یکتا که می‌تواند شماره تماس، آیدی، کد ملی و ... باشد"
    first_name: "علی",
    last_name: "رمضانی",
    mobile: "09123456789",
    email: "test@exmpl.com",
  }
});
</script>

پارامتر form_id در متا دیتا برای هر فرم باید مقدار یکتایی داشته باشد. و ارسال آن الزامی است. این مقدار می‌تواند از نوع عدد یا یک رشته باشد. همچنین برای فرمهای لید همانند بالا می‌توانید سایر داده‌های فرم را در متغیر متا دیتا برای ما ارسال کنید. ارسال این اطلاعات برای تطبیق و جلوگیری از تقلب ناشران الزامی است.