WebWost WebWostbeta

Создаем реферальную программу для сайт

Создание реферальных на PHP для сайта. Теория и рабочий пример

PHP

Al-Sher

Сегодня я решил поделиться статьей на тему партнерской программы и реферальных ссылок на PHP. Начнем с главного, а именно с вопроса: Что такое реферальные ссылки и для чего их используют на сайте?

Вопрос, конечно, актуальный для немногих, но, всё же, если начинать рассказывать, то с самого начала. И так, что же это такое? На данный вопрос даже википедия может ответить и вот цитата:

Реферальная ссылка — это идентификационная ссылка предназначенная для привлечения рефералов для конкретного пользователя (реферера).

Судя из этой цитаты, реферальная ссылка предназначена для привлечения новых клиентов. Данный вид партнерской программы очень популярный и используется во многих сервисах, например Dropbox и reg.ru, поэтому и вам я рекомендую вам использовать такой вид поощрения ваших пользователей.

Давайте подумаем о том, что нам необходимо для этого. Итак, для начала нам надо добавить в таблицу пользователей 2 поля. Конечно намного лучше реализовать свою таблицу для реф. ссылок, так как это, в теории, должно увеличить скорость подсчета рефералов, но мы же делаем что-то простое. Вот SQL-код, который буду использовать я для нашего примера

CREATE TABLE `user` ( 
    `id` INT(255) NOT NULL AUTO_INCREMENT , 
    `name` VARCHAR(255) NOT NULL , 
    `email` VARCHAR(255) NOT NULL , 
    `referral` VARCHAR(255) NOT NULL , 
    `owner` INT(255) NOT NULL DEFAULT '0' , 
    PRIMARY KEY (`id`)
)

Тут мы создаем таблицу user с полями id(индификатор пользователя), name(Имя пользователя), email(Email пользователя), referral(Реферальная ссылка пользователя), owner(Чьим рефералом является пользователь).

На этом теоретическую часть можно заканчивать и начинать "творить" код. Давайте начнем с генерации уникального кода, то есть реферальной ссылки. Конечно я сразу же выложу готовый код, который будет генерировать ссылку, пользуясь данными email:

function referralGenerator($email) { 
    return md5($email);
}

Это является самой простой функцией для реализации уникального ключа, но он будет уникальным лишь при условии уникальности email-адреса в БД.

Как добавлять данные в таблицу я думаю описывать не стоит, поэтому перейдем к реализации страницы, обрабатывающей данные коды. Назовем нашу страницу ref.php и положим её в корень, то есть адрес должен получиться следующим: http://domen.ru/ref.php. На этой же странице мы делаем проверку на наличие кода, если он отсутствует, то сразу "редиректим" пользователя на главную сайта.

if(!isset($_GET['r'])) header("Location: http://domen.ru");

Мы используем переменную r для передачи нашего кода. Раз мы используем md5 хеш для генерации ссылки, то можно сразу проверить и длину кода, ведь если верить документациям md5 занимает 128 бит, но, так как мы получаем сами символы, его вес увеличивается до 256 бит и занимает 32 символа.

if(strlen($_GET['r'])!=32) header("Location: http://domen.ru");

И так, самые простые проверки мы реализовали, поэтому остались лишь проверки данных в БД. Надеюсь все уже знакомы с mysqli и его описание здесь не требуется. Давайте соединимся с нашей БД.

$db=new mysqli('localhost','user','password','table');
$db->set_charset('utf-8);

Тут я сразу указал кодировку utf-8, так как считаю это важной частью. Она способна избавить от лишних поисков проблем с кодировкой, что сохранит вам время. Вернемся к проверкам в ref.php. Следующей проверкой нам необходимо узнать, есть ли такой код в БД. Давайте узнаем это:

$rq=$db->query("SELECT `id` FROM `user` WHERE `referral`='".$_GET['r']."'"); 
$r=$rq->fetch_array();
if(isset($r['id']) and $r['id']!='') {
    setCookie('ref',$r['id'],time()+2678400);
    header("Location: http://domen.ru");
} else header("Location: http://domen.ru");

Давайте разберем код. Сначала мы выполняем проверку реферальной ссылки и если она существует, то создаем куку ref с id пользователя, которому принадлежит ссылка, сроком в месяц, иначе делаем редирект на главную. Стоит заметить, что редирект на главную происходит и при правильном коде, сделано это для скрытия информации о реферальной ссылки. Конечно пользователь легко может поймать редирект с помощью консоли браузера или найти куку ref, но мы же тренируемся, нам это простительно ?

Осталось лишь дополнить регистрацию новых пользователей... Так как процесс регистрации на каждом сайте проходит по своему, дать универсальный код у меня нет возможности, но я готов предложить набросок с проверкой наличия ref куки.

$ref = ((isset($_COOKIE['ref']) and $_COOKIE['ref']>0)) ? $_COOKIE['ref'] : 0;

Пользователь, зашедший без реферальной ссылки, должен получить owner=0, то есть не является рефералом.

Кстати, для скрытия реферальных ссылок люди используют сервисы коротких ссылок, как, например, наш сервис ur0.ru.

Вот такая небольшая статья вышла, но из неё можно реализовать настоящую реферальную систему! Спасибо за внимание и удачи в вашем творчестве

8 комментариев

Загрузить еще комментариев

Новый комментарий