Программирование, веб-кодинг

Связка Yii2 + Justclick

Делаем доступ в личный кабинет на Yii2 для купивших продукт через систему Justclick

Связка Yii2 + Justclick

Опишу суть работы с API Justclick для Yii2. Например, вы продаёте какой-то информационный продукт через систему Justclick.ru и решили организовать личные кабинеты для удобства ваших покупателей.

При оплате курса в системе justclick, она устанавливает и отправляет данные для конкретного купившего через api функцию. Там указывается paid=true (или например дата оплаты) и justclick отправляет данные в наше приложение для функции signupj().

Эта наша функция должна либо создать нового user, если такого email ещё нет, либо создать связь many-to-many для существующего пользователя с его курсами в связанной таблице course_to_user_bound. То есть надо проверить есть ли user с таким email, который пришёл из джаста. Если да, то как-то надо обновить связанную таблицу...

Для этого есть метод link()

$course = Course::findOne(123);
$user = new User();
...
$user->link('course', $course);

Вся функция:

public function actionSignupj()
    {
        $user = User::findOne([ // ищем зарегистрирован ли уже пользователь с email, пришедшим от Джаста
            'email' => $_POST['email'],
        ]);
        
        $course = Course::findOne([ // находим у нас курс, который только что оплатил человек на Джасте
            'alias' => $_POST['items'][0]['id'],
        ]);
        
        
        $courses = $user->courses; // получаем массив какие курсы есть у пользователя с указанным email (связь courses объявлена с помощью промежуточной таблицы)

        if(!$user) { // если нет пользователя с таким email
            $user = new User();
            $user->first_name = $_POST['first_name'];
            $user->email = $_POST['email'];
            $user->order_id = $_POST['id'];
            $user->course_id = $_POST['items'][0]['id']; // это не обязательно 
            $user->save();
        }
        
        $user->link('courses', $course);
        
        Yii::$app->getSession()->setFlash('success', 'Check your email for further instructions.');

        return $this->goHome();
   
    }