+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


"Бессмертный" аффилиат

Привет!

У одного из клиентов возникла задача: в случае, если пользователь перешёл на сайт по аффилиатской ссылке, то всем заказам пользователя ВСЕГДА будет присваиваться идентификатор аффилиата, по ссылке которого он попал на сайта.
Штатно это "всегда" работать не будет, т.к. идентификатор аффилиата сохраняется в куках, а куки могут "умереть" или пользователь будет использовать в дальнейшем другой браузер/компьютер. Соответственно идентификатор нужно сохранить и подсовывать при оформлении заказа, в обход стандартного механизма. Решается эта задача 2-мя обработчиками:

AddEventHandler("main", "OnAfterUserLogin",  "SetImmortalAffiliate");
AddEventHandler("sale", "OnSaleComponentOrderOneStepComplete",  "SetImmortalAffiliateOrder");
   
   
function SetImmortalAffiliate(&$fields)
   {
      global $USER;
      $USER_ID=$USER->GetID();
      if (($USER->IsAuthorized())&&($_COOKIE[COption::GetOptionString("main", "cookie_name", "0").'_SALE_AFFILIATE']))
      {
         $rsUsers = $USER->GetList(($by="id"), ($order="desc"), Array('ID'=>$USER_ID),array('SELECT'=>Array('UF_*'))); 
           if($arUSER=$rsUsers->Fetch())
               if(!$arUSER['UF_SALE_AFFILIATE'])
                  {                  
                     $arFields['UF_SALE_AFFILIATE']=$_COOKIE[COption::GetOptionString("main", "cookie_name", "0").'_SALE_AFFILIATE'];
                     $USER->Update($USER_ID),$arFields);
                  }
         
      }
   
   }
function SetImmortalAffiliateOrder($ID,$arFields)
      {
         global $USER;
         $rsUsers = $USER->GetList(($by="id"), ($order="desc"), Array('ID'=>$USER->GetID()),array('SELECT'=>Array('UF_*'))); 
           if(($arUSER=$rsUsers->Fetch())&&(IntVal($arUSER['UF_SALE_AFFILIATE'])))
                  CSaleOrder::Update($arFields['ID'],Array('AFFILIATE_ID'=>$arUSER['UF_SALE_AFFILIATE']));
                     
         
      }


Предварительно нужно создать строковое пользовательское поле для объекта USER и кодом UF_SALE_AFFILIATE. Таким образом при авторизации пользователя, если в куках есть идентификатор аффилиата и значение пользовательского поля UF_SALE_AFFILIATE не задано, то его значениеv становится идентификатор аффилиата из куков.
При оформлении заказа компонентом bitrix:sale.order.ajax поле AFFILIATE_ID подменяется значением из пользовательского свойства.

Конец! :)  

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA