Вы здесь

Как сделать регистрацию по номеру телефона с отправкой проверочного кода?

4

Нужен сервис, который позволяет отправлять смс с кодом подтверждения на мобильник при регистрации на сайте.

Версия Drupal: 
7.x
Вопрос задан 16.11.2016 - 12:58

Ответы

4

Есть https://www.drupal.org/project/otp_verification, но не проверял, когда надо было - писал вручную, логика там простая довольно.

Вот пример куда копать (простите, просто копипаст откуда-то из старого хлама):

function custom_register_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_register_form') {
    $form['account']['name']['#title'] = t('Your phone number');
    $form['account']['name']['#description'] = t('Phone number in format 79999999999');
    $form['account']['name']['#type'] = 'masked_input';
    $form['account']['name']['#mask'] = '79999999999';
//    $form['account']['mail']['#required'] = false;
  }


  elseif ($form_id == 'user_login') {
    $form['name']['#title'] = t('Your phone number');
    $form['name']['#description'] = t('Phone number in format 79999999999');
    $form['name']['#type'] = 'masked_input';
    $form['name']['#mask'] = '79999999999';
}

  elseif ($form_id == 'user_profile_form') {
    $form['account']['name']['#disabled'] = TRUE;
    $form['account']['name']['#title'] = t('Your phone number');
    $form['account']['name']['#description'] = t("You can't edit this field after registration");
    $form['account']['name']['#type'] = 'masked_input';
    $form['account']['name']['#mask'] = '79999999999';
    $form['field_pin']['#disabled'] = TRUE;
    $form['field_pin']['#access'] = FALSE;
  }
}

function custom_register_menu() {
  $items = array(
    'title' => 'Проверка номера телефона',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('custom_register_form_pin'),
    'access arguments' => array('access content'),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );

  return $items;
}


/*
 *  Проверка PIN
*/

function custom_register_form_pin($form, &$form_state) {
  $form['pin'] = array(
    '#type' => 'textfield',
    '#size' => 5,
    '#maxlength' => 5,
    '#description' => 'Введите полученный вами по CMC PIN код',
  );

  $form['captcha'] = array( '#type' => 'captcha', '#captcha_type' => 'default', );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Отправить'
  );
  $form['send_pin'] = array(
    '#type' => 'submit',
    '#submit' => array('custom_register_send_pin'),
    '#value' => 'Повторно выслать PIN'
  );

  return $form;
}

function custom_register_form_pin_validate($form, &$form_state) {
  global $user;
  $user_wrapper = entity_metadata_wrapper('user', $user->uid);

  if ($form['pin']['#value'] == $user_wrapper->field_pin->value()) {
    return TRUE;
  }

  else {
    form_error($form, 'PIN не верен');
  }
}

function custom_register_form_pin_submit($form, &$form_state) {

  // Изменение роли пользователя
  global $user;
  $role_name = 'Подтвержденный пользователь';
  if ($role = user_role_load_by_name($role_name)) {
    user_multiple_role_edit(array($user->uid), 'add_role', $role->rid);
  }
}

/*
 * Генерация PIN
*/

function custom_register_generate_pin() {
  global $user;
  $user_wrapper = entity_metadata_wrapper('user', $user->uid);
  $user_wrapper->field_pin = rand(10000, 99999);
  $user_wrapper->save();
}

/*
 * Отправка SMS с пином
*/

function custom_register_send_pin() {
  global $user;
  $user_wrapper = entity_metadata_wrapper('user', $user->uid);
  // запрос к вашему sms-гейту.
  //dpm('СМС отправлена ' . $user_wrapper->field_pin->value() . ' пользователю ' . $user->uid);
}
Ответ дан 16.11.2016 - 14:00