Real-Time


Autenticación OAuth2 Manual

Autenticación OAuth2 Manual

En este capítulo, tambien encontrarás ejemplos detallados de cómo puedes realizar la autenticación manualmente, en caso de que ni tu cliente HTTP o ni la libreria HTPP de tu lenguaje de desarrollo no soporte la autenticación OAuth2 de forma nativa.

Debes hacer una petición de tipo POST a la URL de Token de Acceso, como se vio antes en la tabla de parámetros de autenticación.

Petición HTTP POST

POST https://www.rti-sms.com/api/auth

En esta petición de tipo POST, debes mandar el siguiente formulario con parámetros codificados en URL en el POST body:

Parámetro Descripción
grant_type Siempre debería ser client_credentials
client_id Obtenlo desde el panel.
client_secret Obtenlo desde el panel.

Para manualmente autorizarse y obtener el access_token, usa este código:

                                    
    curl -X "POST" "https://www.rti-sms.com/api/auth" \
        -H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
        --data-urlencode "grant_type=client_credentials" \
        --data-urlencode "client_id=YOUR_CLIENT_ID_HERE" \
        --data-urlencode "client_secret=YOUR_CLIENT_SECRET_HERE"
                                    
                                
                                    
    // get cURL resource
    $ch = curl_init();

    // set url
    curl_setopt($ch, CURLOPT_URL, 'https://www.rti-sms.com/api/auth');

    // set method
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

    // return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // set headers
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/x-www-form-urlencoded; charset=utf-8',
    ]);

    // form body
    $body = [
        'grant_type' => 'client_credentials',
        'client_id' => 'YOUR_CLIENT_ID_HERE',
        'client_secret' => 'YOUR_CLIENT_SECRET_HERE',
    ];
    $body = http_build_query($body);

    // set body
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);

    // send the request and save response to $response
    $response = curl_exec($ch);

    // stop if fails
    if (!$response) {
        die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
    }

    echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
    echo 'Response Body: ' . $response . PHP_EOL;

    // close curl resource to free up system resources 
    curl_close($ch);
                                    
                                
                                    
    # Install the Python Requests library:
    # `pip install requests`

    import requests

    def send_request():
        # You may modify this method according to your needs.
        # POST https://www.rti-sms.com/api/auth

        try:
            response = requests.post(
                url="https://www.rti-sms.com/api/auth",
                headers={
                    "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
                },
                data={
                    "grant_type": "client_credentials",
                    "client_id": "YOUR_CLIENT_ID_HERE",
                    "client_secret": "YOUR_CLIENT_SECRET_HERE",
                },
            )
            print('Response HTTP Status Code: {status_code}'.format(
                status_code=response.status_code))
            print('Response HTTP Response Body: {content}'.format(
                content=response.content))
        except requests.exceptions.RequestException:
            print('HTTP Request failed')

                                    
                                
                                    
    // Node.JS
    (function(callback) {
        'use strict';

        const httpTransport = require('https');
        const responseEncoding = 'utf8';
        const httpOptions = {
            hostname: 'www.rti-sms.com',
            port: '443',
            path: '/api/auth',
            method: 'POST',
            headers: {"Content-Type":"application/x-www-form-urlencoded; charset=utf-8"}
        };
        httpOptions.headers['User-Agent'] = 'node ' + process.version;

        // Paw Store Cookies option is not supported

        const request = httpTransport.request(httpOptions, (res) => {
            let responseBufs = [];
            let responseStr = '';

            res.on('data', (chunk) => {
                if (Buffer.isBuffer(chunk)) {
                    responseBufs.push(chunk);
                }
                else {
                    responseStr = responseStr + chunk;            
                }
            }).on('end', () => {
                responseStr = responseBufs.length > 0 ? 
                    Buffer.concat(responseBufs).toString(responseEncoding) : responseStr;

                callback(null, res.statusCode, res.headers, responseStr);
            });

        })
        .setTimeout(0)
        .on('error', (error) => {
            callback(error);
        });
        request.write("grant_type=client_credentials&client_id=YOUR_CLIENT_ID_HERE&client_secret=YOUR_CLIENT_SECRET_HERE")
        request.end();


    })((error, statusCode, headers, body) => {
        console.log('ERROR:', error); 
        console.log('STATUS:', statusCode);
        console.log('HEADERS:', JSON.stringify(headers));
        console.log('BODY:', body);
    });
                                    
                                
                                    
    import java.io.IOException;
    import org.apache.http.client.fluent.*;
    import org.apache.http.entity.ContentType;

    public class SendRequest
    {
        public static void main(String[] args) {
            sendRequest();
        }

        private static void sendRequest() {

            // Request (2) Duplicate (POST )

            try {

                // Create request
                Content content = Request.Post("https://www.rti-sms.com/api/auth")

                // Add headers
                .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")

                // Add body
                .bodyForm(Form.form()
                .add("grant_type", "client_credentials")
                .add("client_id", "YOUR_CLIENT_ID_HERE")
                .add("client_secret", "YOUR_CLIENT_SECRET_HERE")
                .build())

                // Fetch request and return content
                .execute().returnContent();

                // Print content
                System.out.println(content);
            }
            catch (IOException e) { System.out.println(e); }
        }
    }
                                    
                                

Asegurate de reemplazar YOUR_CLIENT_ID_HERE y YOUR_CLIENT_SECRET_HERE con tus credenciales de la API.

Si la Autenticación es exitosa, la API responderá con el Status HTTP HTTP/1.1 200 OK y en el body de la respuesta podrás encontrar el access_token y el validity_period respectivamente.

Una operación de autenticación exitosa retorna una estructura JSON como esta:

                                
    {
        "access_token":"eyXXXXXXSFSFZDSFSFSAFA.eyJpFSFSAGASXXVxzvzxWQHeSeIxMDAFSFAVZZIzNzM1MzYzODM3MzMifQ.p0kdoDSFSfzx2a$Ju8RCPAtLoLadSCZadasfaFa43",
        "validity_period":"3600"
    }
                                
                            

Mientras el access_token sea valido (current_time + validity_period), debes usarlo en el parámetro del header Authorization en cada llamada a la API.

Ejemplo de llamada a la API, Para obtener mas información acerca de un sms enviado específico:

                                
    GET /api/sms/4421966385593 HTTP/1.1

    Content-Type: application/json

    Authorization: Bearer eyXXXXXXSFSFZDSFSFSAFA.eyJpFSFSAGASXXVxzvzxWQHeSeIxMDAFSFAVZZIzNzM1MzYzODM3MzMifQ.p0kdoDSFSfzx2a$Ju8RCPAtLoLadSCZadasfaFa43
                                
                            
Todas las operaciones no exitosas son retornadas con un status HTPP diferente a HTTP/1.1 200 OK, tal como HTTP/1.1 401 Unauthorized, etc. Para una lista detallada de todos los posibles errores retornados, por favor ver el Capítulo de Errores.