Crear un formulario de inscripción por SMS Parte 2

Bienvenido a la segunda parte de este tutorial sobre el uso de la tecnología SMS para crear un formulario de registro. Anteriormente, en la primera parte de esta serie, utilizamos HTML, JavaScript, MySQL y PHP para crear un formulario de registro. En este tutorial cubriremos la integración con una pasarela SMS y el código necesario para finalizar el procesamiento del formulario de registro..


Paso 1: donde lo dejamos

En la primera parte de esta serie, creamos dos funciones: registrarse y activar. Como lo indican los nombres, el primero se utiliza para registrarse en el formulario y el segundo para ingresar el código de activación. Continuaremos demostrando cómo usar dos servicios de pasarela SMS diferentes para enviar mensajes. ¿Qué es una puerta de enlace SMS? Es esencialmente un servicio que proporciona acceso al tráfico de la red móvil con uno o varios operadores de telefonía celular. Entonces, ¿por qué usar dos servicios diferentes? Mi primera opción fue Clickatell, pero para enviar mensajes SMS en los Estados Unidos sin un código corto, tuve que encontrar otro servicio. SmsMatrix es un gran servicio que puede enviar mensajes a muchos países diferentes, incluido Estados Unidos. Podría haber usado SmsMatrix solo, pero en cambio, usaré ambos servicios para demostrar cómo permitiría al servidor seleccionar un servicio según el país en el que se encuentre apuntando Esto puede suceder en el mundo real, ya que puede variar las puertas de enlace para ahorrar en el costo por mensaje o como respaldo en caso de que el primer servicio que intente responda con un código de error.


Paso 2: La Clase Clickatell

Clickatell se encuentra entre las mayores puertas de enlace de SMS disponibles en línea. Según la información en su sitio web, Clickatell actualmente es compatible con 221 países y territorios. Tienen muchas características, como SMS simples, SMS bidireccionales y SMS de código corto. También tienen una impresionante base de usuarios, que atiende a más de 10,000 clientes en todo el mundo. Algunos de estos clientes incluyen CNN, Continental Airlines, Vodafone, Oracle, Nokia y otros grandes jugadores en TI y negocios. Lo bueno de Clickatell es que puede registrarse para obtener una cuenta gratuita y usar 10 créditos gratuitos para enviar mensajes SMS mientras aprende. Las puertas de enlace SMS normalmente funcionan con los créditos que usted compra para enviar mensajes SMS. La cantidad de créditos que costará un solo mensaje SMS dependerá de dónde (geográficamente) se envíe el mensaje. Vaya a Clickatell y regístrese para obtener una cuenta gratuita. Cuando envíe con los créditos de prueba, el contenido del mensaje se reemplazará con información sobre las pruebas, pero eso debería funcionar bien para nuestras necesidades. Cuando se registre, tenga cuidado de registrarse en Clickatell Central y seleccione Cobertura excluyendo los EE. UU., Ya que necesita un número de código breve especial para enviar a EE. UU..

Una vez que haya activado exitosamente su cuenta y haya iniciado sesión, haga clic en el enlace "haga clic aquí para crear una nueva conexión". Esto configurará un api_id con el que puede enviar SMS.

Seleccione HTTP como el tipo de conexión. Clickatell ofrece muchas opciones para enviar SMS, la más fácil es probablemente enviar un correo electrónico a una determinada dirección. Soportan muchos protocolos como XML, SOAP e incluso FTP para mensajes masivos. La conexión HTTP es todo lo que necesitaremos.

Continuar y hacer clic en Obtener ID de API. Obtendrá una página con una cadena de ejemplo. Copie la cadena de ejemplo en su navegador y reemplace el nombre de usuario, la contraseña y los parámetros con su nombre de usuario, contraseña y número de teléfono móvil. Obtendrá un resultado en el navegador con un mensaje "OK" o "ERR" seguido de un código. Esto es lo que necesitamos para construir nuestra biblioteca de Clickatell..

Para comenzar a crear la biblioteca de Clickatell, cree un nuevo archivo llamado Clickatell_api.php en el aplicación / bibliotecas carpeta. Ingrese el siguiente código:

 clase Clickatell_api // cambie esto al usuario real y a la contraseña private $ username = 'username'; contraseña privada $ = 'contraseña'; privado $ api_id = 'api id'; private $ url = 'http://api.clickatell.com/http/sendmsg'; función pública send_sms ($ phone, $ text) $ url = $ this-> url. '? usuario ='. $ this-> nombre de usuario. '& contraseña ='. $ esta-> contraseña. '& api_id ='. $ esto-> api_id. '& to ='. $ teléfono. '& text ='. urlencode ($ text); $ r = @archivo ($ url); $ res = substr ($ r [0], 0, 2); if ($ res == 'ER') return false;  devuelve true; 

El código es bastante autoexplicativo, pero antes de comenzar a revisarlo, tenga en cuenta que, en un entorno de producción, este script debe residir en un directorio fuera de la raíz web o confiar en la configuración de su servidor para evitar el acceso público. Lo último que desea es que alguien pueda llamar a este script directamente desde un navegador u otro script..

En el ejemplo anterior, creamos una clase Clickatell_api que tiene algunos miembros: nombre de usuario, contraseña, api_id y la url sobre la que construiremos. Reemplace con su propio nombre de usuario, contraseña y api_id. Dentro de la clase tenemos una sola. enviar SMS() Función que acepta un número de teléfono y el mensaje de texto a enviar. La clase construye la url concatenando a los miembros de la clase y formando una url final. Usamos urlencode () para codificar el texto en la url y luego pasarlo a expediente(). Por supuesto, para los servidores que tienen la función file () bloqueada, puede usar CURL, pero ese no es el punto del tutorial. Entonces obtenemos el resultado y lo usamos. subtr () para obtener los dos primeros caracteres de la primera línea. Si la respuesta es 'ER', que proviene de ERROR, devolvemos false, de lo contrario, devolveremos true. Esto es todo lo que hace la clase, pero aún es mejor usar una clase, ya que puede reutilizarla más tarde en cualquier aplicación..


Paso 3: La clase SmsMatrix

SmsMatrix es otro servicio poderoso. Este tiene muchas cosas más avanzadas, como conversión de texto a voz, respuesta programable ("presione 2 para sí o 1 para no") y mensajes de voz, pero lo más importante para nosotros es que no es así. requieren que tenga un número de código abreviado para enviar mensajes SMS en los Estados Unidos. También tienen una opción de cuenta gratuita que le otorga 5 créditos para probar su aplicación SMS. La configuración con SmsMatrix es más simple que con Clickatell: crea la cuenta y luego usa su nombre de usuario y contraseña para enviar el mensaje SMS. Necesitará la guía de envío de SMS, pero la idea es la misma: usted forma una URL especial y accede a ella con PHP. Vamos a crear una biblioteca smsmatrix_api para esto. Crea un archivo llamado Smsmatrix_api.php en el aplicación / bibliotecas Carpeta y escribe lo siguiente:

 class Smsmatrix_api // cambie esto al usuario real y a la contraseña private $ username = 'username'; contraseña privada $ = 'contraseña'; private $ url = 'http://www.smsmatrix.com/matrix'; función pública send_sms ($ phone, $ text) $ url = $ this-> url. '? username ='. urlencode ($ this-> username). '& contraseña ='. urlencode ($ this-> password). '& phone ='. $ teléfono. '& txt ='. urlencode ($ text); $ r = @archivo ($ url); $ res = substr ($ r [2], 11); if ($ res> 399) return false;  devuelve true; 

Nuevamente, creamos una clase con el nombre de usuario, contraseña y miembros y creamos la misma enviar SMS() función. Lo llamamos igual, por lo que las clases podrían ser intercambiables. Creamos la url final, accedemos a ella con expediente() Y obtenemos el código de resultado. El código de resultado se encuentra en la tercera línea de la cadena de resultados, por lo que usamos subtrs ($ r [2], 11) para obtener el número después de la cadena 'STATUSCODE ='. Obtuve los códigos de error de la guía pdf y, básicamente, cualquier código inferior a 399 es exitoso, por lo que devolvemos el valor verdadero;.


Paso 4: Integración del controlador

Ok, es hora de volver a nuestro controlador de registro. Ir a la funcion proceso() e ingrese el siguiente código después de la inserción de la base de datos:

 // enviar auth SMS si en EE. UU. if ($ this-> input-> post ('country') == 1) $ this-> load-> library ('smsmatrix_api'); $ this-> smsmatrix_api-> send_sms ($ registro ['móvil'], $ registro ['activación']);  else // cuando no es USA $ this-> load-> library ('clickatell_api'); $ this-> clickatell_api-> send_sms ($ registro ['móvil'], $ registro ['activación']); 

Primero, verificamos el código del país, si es 1 (es decir, Estados Unidos) usaremos SmsMatrix, así que lo cargamos $ this-> load-> library ('smsmatrix_api'). Si el país no es Estados Unidos, cargamos el clickatell_api. De cualquier manera, usamos enviar SMS() para enviar el código de activación al número de móvil. Notará que el número de teléfono móvil se inserta antes en la base de datos al concatenar el valor del país (que contiene el prefijo para ese país) con el número de teléfono móvil. De hecho, podríamos completar el segundo parámetro en la carga de la biblioteca para acceder a él con un nombre determinado, y solo usar enviar en la biblioteca:

 // enviar auth sms si en EE. UU. if ($ this-> input-> post ('country') == 1) $ this-> load-> library ('smsmatrix_api', 'sms_api');  else // cuando no esté en US $ this-> load-> library ('clickatell_api', 'sms_api');  $ this-> sms_api-> send_sms ($ registro ['móvil'], $ registro ['activación']);

De esta manera, cargamos solo la biblioteca apropiada con el mismo nombre, accediendo a ella con 'sms_api', pero es lo mismo. Básicamente las dos bibliotecas comparten la misma interfaz. Además, si obtiene falso como valor de retorno, puede enviar el SMS con la otra biblioteca como respaldo.


Paso 5: Redirección de cookies

Si configuramos una cookie 'firmada' después de enviar el mensaje SMS, podemos usarla más adelante para evitar que se envíen varios mensajes. Necesitamos hacerlo de tal manera que cuando el usuario navegue fuera del formulario de registro y luego vuelva a intentarlo, lo redirigiremos automáticamente a la función de activación. Añade esto en la parte superior de la Regístrate() función:

 índice de función () si (get_cookie ('firmado')) redirigir ('registrarse / activar');  $ this-> config-> load ('countries', true); $ datos ['países'] = $ this-> config-> item ('países'); $ this-> load-> view ('registro', $ data); 

De esta manera, si se registra una vez y trata de acceder nuevamente al formulario de registro, accederá a la misma función de activación que le indica que ingrese el código de activación. Cuidemos la activación a continuación..


Paso 6: La función de activación

Ahora crearemos el proceso de activación:

 la función activar () si (! get_cookie ('firmado')) redirigir ('registro');  $ data ['error'] = "; if ($ this-> input-> post ('signup')) // si se envía $ where = array ('uid' => get_cookie ('signed'), ' activación '=> $ this-> input-> post (' code ')); $ result = $ this-> db-> where ($ where) -> count_all_results (' users '); if ($ result < 1 ) $data['error'] = '
El código de autorización no es correcto!
'; else delete_cookie ('signed'); $ this-> db-> set (array ('active' => 1,'ctiv '=> ")) -> where (' uid ', get_cookie (' signed ')) -> update (' users '); redirigir ('registro / éxito'); $ this-> load-> view ('activar', $ data);

Permítame explicarle lo que está sucediendo aquí: hago lo contrario, si la cookie no está configurada, redirigiré para registrarme. Luego, configuro el mensaje de error a ", porque ahora no tenemos ningún error. Si se ha establecido el campo de publicación de registro (es decir, si se ha enviado el formulario), busco una entrada en la tabla con el ID de La cookie y la activación son iguales al código enviado. Es importante nunca tener una identificación de 0 en la base de datos, ya que esto haría que la cookie sea falsa y habría un bucle de redirección. Esta verificación se puede hacer, pero es mejor configurarlo en la base de datos.

Cuento las filas devueltas y, si no obtengo ninguna, muestro un error que indica que la autorización no es correcta. Como el usuario solo puede tener un determinado código de activación, cuando ingresa el código incorrecto, la base de datos no encontrará ninguna fila y devolverá 0. Si encontramos una fila, eliminamos la cookie, ya que no la necesitamos más, configuramos la columna activa en 1 y la activación en "y actualizamos la tabla. A partir de este momento, el usuario está activado y sabemos con certeza que es su teléfono, y probablemente podamos enviar una oferta especial como un sms. También redirigir al usuario a la éxito() Función, que es una vista simple con este mensaje de éxito:

    
Activar

Éxito

Gracias, tu cuenta ha sido activada.!

Paso 7: El Código del Controlador Final

Este es el código del controlador de registro final:

 la clase Suscripción extiende el Controlador función Suscripción () padre :: Controlador ();  índice de función () si (get_cookie ('firmado')) redirigir ('registrarse / activar');  $ this-> config-> load ('countries', true); $ datos ['países'] = $ this-> config-> item ('países'); $ this-> load-> view ('registro', $ data);  proceso de función () $ this-> load-> library ('form_validation'); if ($ this-> form_validation-> run ()) $ signup = array (); $ registro ['nombre'] = $ esto-> entrada-> publicación ('nombre'); $ registro ['email'] = $ this-> input-> post ('email'); $ registro ['país'] = $ esto-> entrada-> publicación ('país'); $ signup ['mobile'] = $ this-> input-> post ('country'). $ this-> input-> post ('mobile'); // generar el código de activación único mt_rand (); $ registro ['activación'] = rand (11111, 99999); // inserte en db $ this-> db-> insert ('users', $ signup); // enviar auth sms // si en Estados Unidos if ($ this-> input-> post ('country') == 1) $ this-> load-> library ('smsmatrix_api'); $ this-> smsmatrix_api-> send_sms ($ registro ['móvil'], $ registro ['activación']);  else $ this-> load-> library ('clickatell_api'); $ this-> clickatell_api-> send_sms ($ registro ['móvil'], $ registro ['activación']);  set_cookie ('signed', $ this-> db-> insert_id (), 86500); // redirigir redirigir ('registrarse / activar');  else $ this-> config-> load ('países', verdadero); $ datos ['países'] = $ this-> config-> item ('países'); $ this-> load-> view ('registro', $ data);  function check_email_exists ($ email) $ rs = $ this-> db-> where ('email', $ email) -> count_all_results ('users'); $ this-> form_validation-> set_message ('check_email_exists', 'Lo sentimos, este correo electrónico ya existe!'); si ($ rs < 1 ) return true;  return false;  function activate() if( !get_cookie('signed') ) redirect('signup');  $data['error'] ="; if( $this->entrada-> publicación ('registro')) // si se envía $ where = array ('uid' => get_cookie ('firmado'), 'activación' => $ this-> entrada-> publicación ('código') ); $ result = $ this-> db-> where ($ where) -> count_all_results ('usuarios'); si ($ resultado < 1 ) $data['error'] = '
El código de autorización no es correcto!
'; else delete_cookie ('signed'); $ this-> db-> set (array ('active' => 1,'ctiv '=> ")) -> where (' uid ', get_cookie (' signed ')) -> update (' users '); redirect ('signup / success'); $ this-> load-> view ('active', $ data); function success () $ this-> load-> view ('success');

Conclusión

Gracias por leer este tutorial! Como el resultado de este tutorial es pequeño y las pruebas son caras, no tenemos una vista previa, pero puede ejecutarlas desde las fuentes provistas con sus propias cuentas de prueba. Esto es solo una pequeña parte de lo que se puede hacer con Clickatell y SmsMatrix. Hay muchas cosas que puede probar, como enviar a varios teléfonos, publicidad masiva, enviar un archivo de voz por correo electrónico para crear un mensaje de voz, mensajes TTS, etc. Espero que haya disfrutado de mi tutorial, y espero que lo use en su aplicación de SMS de próxima generación. Gracias por seguir mi tutorial y escribir en los comentarios lo que ha encontrado.!