В завершение проделанной работы нам остаётся отправить SMS и записать успешную верификацию.
Для начала проверяем ,что это действительно номер телефона, а не пустое поле:
if (!empty(Tools::getValue('phone')) && Validate::isPhoneNumber(Tools::getValue('phone')))
Затем проведём проверку на существование в базе данных телефонного номера:
Db::getInstance()->getValue('SELECT EXISTS
(SELECT phone FROM '.DB_PREFIX.'customer
WHERE phone = '.(int)Tools::getValue('phone').')')
Как только все условия были выполнены, мы отправляем SMS и записываем сгенерированный код в cookie для дальнейшего сравнения:
Не важно каким именно Вы пользуетесь сервисом - как только отправили SMS, вводите код в поле verification_number и отправляйте на адрес /login?action=compare_code. Для этого, соответственно, нужно в методе phoneVerification() добавить проверку параметра
action=compare_code:
if (Tools::getValue('action') == 'compare_code') {
и написать нашу функцию отправки кода подтверждения:
$.ajax({
type: "POST",
headers: {"cache-control": "no-cache"},
async: true,
cache: false,
url: '/login?action=compare_code',
data:'code_verification='+$('input[name="verification_number"]').val(),
dataType: "json",
Осталось проверить код и записать, что телефон подтверждён, где именно это сделать показано ниже, на screenshot:
Записать о удачном сравнении можно, создав в таблице customer поле под названием is_verification и добавив в файл переопределения Customer.php строчку кода :
'is_verification' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
После чего нам останется добавить в файл переопределения дополнительное поле:
$format['is_verification'] = (new FormField)
->setName('is_verification')
->setType('hidden')
->setValue(0)
;
В случае удачной верификации оно запишет к данному пользователю флаг об успешном подтверждении номера телефона.