Permite el envío de SMS a nuestros clientes registrados

URL del recurso

https://restapi.marketext.com/sms/{api_id}

Autenticación

Nuestra API Rest utiliza un esquema de autenticación basado en esta especificación OAuth 2.

Authorization: MAC

Todas las solicitudes de envío deberán incluir el encabezado Authorization con el siguiente formato:

Authorization: MAC id="su ID de usuario", ts="1455281539", nonce="caracteres_aleatorios", mac="hash-codificado-base64"
Importante: Algunas especificaciones OAuth 2 muestran este encabezado dividido en varias líneas. Nuestra API no acepta esto. Asegúrese de enviar el encabezado en una sola línea.

Campos a incluir en el encabezado Authorization

id El ID de usuario de su cuenta en Marketext. Se recomienda crear un usuario exclusivo en la cuenta para el uso de la API.


ts La marca de hora (Unix timestamp) del instante en el que se realiza el solicitud.


nonce Cadena de caracteres aleatorios. Asegúrese de que sea única para cada solicitud. Máx. 32 caracteres.


mac Firma (hash) de la solicitud codificada en base 64


¿Cómo calcular la firma(hash) mac?

La firma se genera como resultado de aplicar el algoritmo SHA-256 a una serie de datos concatenados relacionados con la solicitud que son:

      Timestamp
      Nonce
      HTTP request method
      HTTP request URI
      HTTP host
      HTTP port
      Optional extra data
    
Cada línea de la cadena debe estar separada por el caracter de avance de línea (\n o 0x0A; No es válido usar \r o \r\n). La cadena también deberá finalizar con el caracter avance de línea. A continuación se muestra un ejemplo de una solicitud POST.
NOTA: Se muestra el caracter \n para clarificar donde se debe incluir.

      1455281539\n
      ec120228fa6fd17e2545703b4cd3eba2\n
      POST\n
      /sms/demouser\n
      restapi.marketext.com\n
      80\n
      \n
    

Tenga en cuenta que el campo Optional extra data se encuentra en blanco. Nuestra API no usa ese campo, pero debe incluirse en la firma tal como lo indica la especificación OAuth 2. Una vez que se tiene la cadena de datos se debe calcular la firma usando el método HMAC utilizando el md5 de la contraseña del usuario como llave.

Nuestra API utiliza el algoritmo SHA-256 para calcular la firma. Se recomienda que utilice librerías nativas ya que el cálculo debe ser exacto.

Asegúrese que el resultado del hash sea en binario y no en hexadecimal. Finalmente codifique el hash calculado utilizando base 64.

Ejemplo en PHP para realizar el cálculo de la firma


      // Obtener la marca de hora (timestamp)
      $timestamp = time();

      // Obtener la cadena aleatoria
      $nonce = md5(function_exists("openssl_random_pseudo_bytes") ? openssl_random_pseudo_bytes(10) :
                  (function_exists("random_bytes") ? random_bytes(10) : mt_rand()) );

      // Definir el método de la solicitud
      $method = "POST";

      // Especificar la URI
      $URI = "/sms/democompany";

      // Especificar el host
      $host = "restapi.marketext.com";

      // Especificar el puerto
      $port = 80;

      // Definir una variable en blanco para los parámetros extra
      $extra = "";

      // Preoparar la cadena base
      $mac = $timestamp . "\n" .
          $nonce . "\n" .
          $method . "\n" .
          $URI . "\n" .
          $host . "\n" .
          $port . "\n" .
          $extra . "\n";

      // Calcular la firma usando el algoritmo SHA-256 y el md5 de la contraseña del usuario como llave
      $hmac = hash_hmac ( "sha256", $mac, md5("clave123456"), TRUE);
      // el parámetro final puesto a TRUE garantiza que el resultado sea devuelto en binario

      // Codificar la firma en base64
      $base64Data = base64_encode( $hmac );

      // Finalmente armar la cadena que se enviará en los encabezados
      $headers = array("Authorization: MAC id=\"demouser\",ts=\"{$timestamp}\", nonce=\"{$nonce}\", mac=\"{$base64Data}\"");
      Importante: el encabezado debe enviarse siempre con comillas dobles, no se puede usar comilla simple.
    

Resultado


    Tomando como ejemplo la siguiente cadena:
    
1455281539\n ec120228fa6fd17e2545703b4cd3eba2\n POST\n /sms/democompany\n restapi.marketext.com\n 80\n \n
y utilizando la contraseña: clave123456 para generar el hash SHA-256 obtenermos la siguiente firma después de codificar en base64:
gGYlFChF2R2k0ecCS2HluJpjRuonl8LsdBhO9Ne96j8=
La cadena de encabezado quedaría así:
Authorization: MAC id="demouser", ts="1455281539", nonce="ec120228fa6fd17e2545703b4cd3eba2", mac="gGYlFChF2R2k0ecCS2HluJpjRuonl8LsdBhO9Ne96j8="

Parámetros

ParámetroDescripciónRequeridoValor Predeterminado
destination Número de destino, si su cuenta es internacional deberá anteponer el prefijo del país al que desea enviar el SMS Obligatorio
text Mensaje a enviar, si la longitud es mayor a 160 caracteres, se partirá en múltiples SMS de 160 caracteres cada una Obligatorio
senderid Remitente personalizado puede contener entre 4 y 11 caracteres A-Za-z0-9 Disponibilidad depende del operador / No disponible para ningún operador en Colombia Opcional
smstype Tipo de envío: instant Inmediato / scheduled Programado Opcional instant
date_delivery Si el SMS es programado, debe definir la fecha de envío en formato AAAA-MM-DD Opcional
time_delivery Si el SMS es programado, debe definir la hora de envío en formato 24 horas HH:MM Opcional
format Solicita el formato de respuesta ya sea JSON/XML/CSV/URLencoded Opcional

Ejemplo

POST http://restapi.marketext.com/sms/democompany?destination=3001234567&text=Hello World!

Solicitud

  
  $headers = array('Authorization: MAC id="demouser", ts="1455281539", nonce="ec120228fa6fd17e2545703b4cd3eba2",' .
                    'mac="gGYlFChF2R2k0ecCS2HluJpjRuonl8LsdBhO9Ne96j8="');

  $data=array('destination'=>'3001234567', 'text'=>'Prueba REST Api Marketext - Autorizacion MAC' );

  $client = new RESTClient();
  $client->setHeaders($headers);
  $client->setData($data);
  $client->setUrl("http://restapi.marketext.com/sms/democompany");
  $client->setMethod("POST");
  $client->execute();
  $response = $client->getLastResponse();
  $client->resetClient();  

Formato Respuesta

Utilice el encabezado
Accept
para especificar el formato de salida deseado, si no es posible para usted definir el encabezado
Accept
, puede utilizar el parámetro
format
.

Tenga en cuenta que el parametro
format
tiene prioridad sobre el encabezado
Accept
.
Formatos disponibles:
Respuesta esperadaParámetro a enviar
JSONapplication/json
XMLapplication/xml
CSVtext/csv
Form URL Encodedapplication/x-www-form-url-encoded
 
  
JSON
{ "Number" => "573001234567", "MsgID" => "a2f5adbf76124fdcfc31f5acd6e9463f" }
XML
<?xml version="1.0"?> <respuesta><Number>573001234567</Number><MsgID>a2f5adbf76124fdcfc31f5acd6e9463f</MsgID></respuesta>
CSV
573001234567,a2f5adbf76124fdcfc31f5acd6e9463f
URLEncoded
Number=573001234567&MsgID=a2f5adbf76124fdcfc31f5acd6e9463f

Códigos de error

La siguiente es una lista de códigos de respuesta del recurso y la frase estándar asociadas a ese código, más la explicación de los errores específicos que puedan generarse.

Las frases estándares están destinadas a dar una descripción intutiva del estatus, y la explicación específica permitirá encontrar el error más fácilmente.

El código de respuesta es enviado en el encabezado, y la explicación en el cuerpo de la respuesta.

CódigoDescripción
400 Solicitud incorrecta. La solicitud contiene datos no válidos o faltantes.
destination no definido.
text no definido.
date_delivery o time_delivery no definido
date_delivery no válido
time_delivery no válido
destination no válido
401 No autorizado. Error de autenticación o no se proporciono la información de autenticación.
api_id no definido.
404 No encontrado. El URI no coincide con ninguno de los recursos disponibles, o, si solicita un recurso con un identificador, el recurso no existe.
No encontrado. El recurso no existe.
405 Método no permitido. El método de la petición HTTP que esta intentando utilizar no esta permitido. Verifique la documentación para ver los metodos permitidos.

Formato Respuesta de Error

  
  
JSON
{ "error": "No autorizado. Error de autenticación o no se proporcionó la información de autenticación" }
XML
<?xml version="1.0"?> <respuesta> <error>No autorizado. Error de autenticación o no se proporcionó la información de autenticación</error> </respuesta>
CSV
No autorizado. Error de autenticación o no se proporcionó la información de autenticación
URLEncoded
error=No encontrado. El URI no coincide con ninguno de los recursos disponibles, o, si solicita un recurso con un identificador, el recurso no existe -> No encontrado. El código buscado no existe

Información del recurso

Transferencia limitada No
Formato de la respuesta JSON/XML/CSV/URLencoded
Autenticación

MAC Access Authentication

Basada en esta especificación OAuth 2