Привет!
У одного из клиентов возникла задача: в случае, если пользователь перешёл на сайт по аффилиатской ссылке, то всем заказам пользователя ВСЕГДА будет присваиваться идентификатор аффилиата, по ссылке которого он попал на сайта. [spoiler]
Штатно это "всегда" работать не будет, т.к. идентификатор аффилиата сохраняется в куках, а куки могут "умереть" или пользователь будет использовать в дальнейшем другой браузер/компьютер. Соответственно идентификатор нужно сохранить и подсовывать при оформлении заказа, в обход стандартного механизма. Решается эта задача 2-мя обработчиками:
Предварительно нужно создать строковое пользовательское поле для объекта USER и кодом UF_SALE_AFFILIATE. Таким образом при авторизации пользователя, если в куках есть идентификатор аффилиата и значение пользовательского поля UF_SALE_AFFILIATE не задано, то его значениеv становится идентификатор аффилиата из куков.
При оформлении заказа компонентом bitrix:sale.order.ajax поле AFFILIATE_ID подменяется значением из пользовательского свойства.
Конец!
У одного из клиентов возникла задача: в случае, если пользователь перешёл на сайт по аффилиатской ссылке, то всем заказам пользователя ВСЕГДА будет присваиваться идентификатор аффилиата, по ссылке которого он попал на сайта. [spoiler]
Штатно это "всегда" работать не будет, т.к. идентификатор аффилиата сохраняется в куках, а куки могут "умереть" или пользователь будет использовать в дальнейшем другой браузер/компьютер. Соответственно идентификатор нужно сохранить и подсовывать при оформлении заказа, в обход стандартного механизма. Решается эта задача 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 подменяется значением из пользовательского свойства.
Конец!