Nome da tab
Apresentação
Título
O que é?
Text

A API Bônus Patrocinado é responsável por conceder bônus para clientes pré e pós-pago provenientes dos parceiros Claro através da validação do número do celular e do código identificador da campanha.

Título
Benefícios
Ícone
Título
Fácil integração
Text

A nossa API é “restful”, ou seja, o nosso protocolo de comunicação foi criado de uma forma que pode interpretar qualquer linguagem de programação. Isso torna o processo de integração do lado dos nossos clientes e parceiros mais flexível e de fácil entendimento. Na página de documentação deixamos alguns exemplos de linguagem, caso seja necessário.

Ícone
Título
Aumento de receita
Text

A utilização do bônus patrocinado associado a outras medidas garante maiores ganhos nos resultados e sustentabilidade nos negócios, minimizando riscos de fraudes e tornando as validações de bônus mais confiáveis.

Ícone
Título
Diferenciais
Text
  • Agilidade: os dados disponibilizados são rapidamente cruzados na base Claro;
  • Retorno simples: consulta em tempo real utilizando como input o telefone e o ID da campanha, que valida o bônus para os clientes oriundos dos parceiros Claro;
  • Segurança: faz a validação dos dados enviados para conceder o bônus, garantindo mais segurança e prevenindo fraudes.
Título
Dúvidas Frequentes

A cobrança é por consulta?

Não, a cobrança é feita por resposta e informação entregue.

Título
Documentação
Text

Nome da tab
Documentação
Título
Bônus Patrocinado - Mobile-SubscribersSponsoredBonuses
Text

Versão: 1.0

Criada por: Rogerio Micheletti

Data: 13/08/2021

Modificações

  • [Bonus Patrocinado] - Versão inicial.

 

Título
Conceder bônus patrocinado para Cliente
Text

Operação responsável por conceder bônus patrocinado para Clientes Pré e Pós Pago através de Parceiros .

Backend: iMusica - /grant/bonus

Título
Respostas

200 - A solicitação foi bem sucedida.

400 - A solicitação não pôde ser entendida pelo servidor devido à sintaxe incorreta. O cliente NÃO DEVE repetir o pedido sem modificações.

401 - A solicitação requer autenticação do usuário.

403 - O servidor entendeu a solicitação, mas está se recusando a atendê-la.

404 - O servidor não encontrou nada que corresponda ao Request-URI.

500 - O servidor falhou ao atender uma solicitação aparentemente válida.

Título
Códigos de Exemplo
Título
Curl
Text
!/bin/bash

url_sponsored_bonus="https://api.claro.com.br/mobile/v1/subscribers/sponsoredbonuses"
url_token="https://api.claro.com.br/oauth2/v1/token"
msisdn="XXXXXXXXXX"
campaignId="XXXXXXXXXXXXXXXXXXXXXXXX"
key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
secret="XXXXXXXXXXXXXXXX"

senha=$( echo -n $key:$secret | base64)

token=$( curl -s -X POST --location $url_token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'x-client-auth: Basic '"$senha"'' \
--data-urlencode 'grant_type=client_credentials' | jq -r '.access_token' )

data="{\"data\":{\"msisdn\": \"$msisdn\",\"campaignId\": \"$campaignId\"}}"
curl -X POST --location $url_sponsored_bonus \
--header 'x-client-auth: Bearer '"$token"'' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data ''"$data"''
Título
Java
Text
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

public class App {
    private static final String KEY = 
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    private static final String SECRET = "XXXXXXXXXXXXXXXX";
    private static final String GRANT_TYPE = "client_credentials";
    private static final String GRANT_TYPE = "client_credentials";
    private static final String END_POINT_ACCESS_TOKEN
"/oauth2/v1/token"; = 
    private static final String END_POINT_API_SPONSORED_BONUS = 
"/mobile/v1/subscribers/sponsoredbonuses";

    public static void main( String[] args ) throws URISyntaxException, JsonProcessingException, IOException{
        App app = new App();
        String token = app.getAccessToken();
        String msisdn = "XXXXXXXXXX";
        String campaignId = "XXXXXXXXXXXXXXXXXXXXXXXX";
        System.out.println("Sponsored Bonus: " + app.getSponsoredBonus( token , msisdn, campaignId ));
    }

    public String getSponsoredBonus(String accessToken, String msisdn, String campaignId) throws RestClientException, URISyntaxException, JsonProcessingException {
        HttpHeaders headers = new HttpHeaders();
        headers.add("x-client-auth", "Bearer " + accessToken);
        headers.add("Content-Type", "application/json");
        headers.add("Accept", "application/json");
        headers.add("Cache-Control", "no-cache");

        ObjectMapper objectMapper = new ObjectMapper();
        String requestJson = null;
        try {
            requestJson = objectMapper.writeValueAsString(new SponsoredBonus(msisdn, campaignId));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> result = restTemplate.postForEntity(new URI(URL + END_POINT_API_SPONSORED_BONUS), request, String.class);

        return result.getBody();
    }

    public String getAccessToken() throws URISyntaxException, JsonProcessingException, IOException {
        String senha = Base64.getEncoder().encodeToString((App.KEY + ":" + App.SECRET).getBytes());
        HttpHeaders headers = new HttpHeaders();

        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.add("cache-control","no-cache");
        headers.add("x-client-auth", "Basic " + senha);

        MultiValueMap<String, String> parameters = new 
LinkedMultiValueMap<>();
        parameters.add("grant_type", GRANT_TYPE);
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(parameters, headers);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> result = restTemplate.postForEntity(new URI(URL + END_POINT_ACCESS_TOKEN),request, String.class);

        String responseBody = result.getBody();
        if (responseBody != null && !responseBody.isEmpty()) {
            return new 
ObjectMapper().readTree(responseBody).get("access_token").asText();
        } else {
            throw new IllegalStateException("Response body is null or empty");
        }
    }
    class SponsoredBonus {

        public SponsoredBonus(String msisdn, String campaignId) {
            this.data = new Data(msisdn, campaignId);
        }

        private Data data;

        public Data getData() {
            return data;
        }

        public void setData(Data data) {
            this.data = data;
        }

        class Data {

            public Data(String msisdn, String campaignId) {
                    this.msisdn = msisdn;
                    this.campaignId = campaignId;
                }

                private String msisdn;
                private String campaignId;

                public String getMsisdn() {
                    return msisdn;
                }

                public void setMsisdn(String msisdn) {
                    this.msisdn = msisdn;
                }

                public String getCampaignId() {
                    return campaignId;
                }

                public void setCampaignId(String campaignId) {
                    this.campaignId = campaignId;
                }
            }
        }
    }
Título
PHP
Text
<?php

$key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$secret = 'XXXXXXXXXXX';

$msisdn = 'XXXXXXXXXXX';

$campaignId = 'XXXXXXXXXXXXX';

$token = getAccessToken();

$score = getSponsoredBonuses($token , $msisdn, $campaignId);

echo $score;

function getAccessToken() {

   try{

    $senha = base64_encode($GLOBALS['key'] . ':' . $GLOBALS['secret']);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 
"https://api.claro.com.br/oauth2/v1/token");
        curl_setopt( $ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/x-www-form-urlencoded',
            'x-client-auth: Basic ' . $senha

        ]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, 
'grant_type=client_credentials');

        $response = curl_exec($ch);

        if (!$response){
            $error = curl_error($ch);
            $info = curl_getinfo($ch);
            die("cURL request failed, error = {$error}; info = " . print_r($info, true));
        }
        if(curl_errno($ch)){
            curl_close($ch);
            echo 'error:' . curl_error($ch);

        } else {
            curl_close($ch);
            return json_decode($response)->access_token; 
        }

    } catch (Exception $e) {
        return 'Erro '. $e;
    }
}

function getSponsoredBonuses($token, $msisdn, $campaignId){

    try {

        $payload = '{"data":{"msisdn":"'. $msisdn .'", 
"campaignId":"'.$campaignId.'"}}';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 
"https://api.claro.com.br/mobile/v1/subscribers/sponsoredbonuses");
        curl_setopt( $ch, CURLOPT_HTTPHEADER, [
            'Accept: application/json',
            'Content-Type: application/json',
            'x-client-auth: Bearer ' . $token

        ]);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

        $response = curl_exec($ch);

        if (!$response){
            $error = curl_error($ch);
            $info = curl_getinfo($ch);
            die("cURL request failed, error = {$error}; info = " . print_r($info, true));
        }
        if(curl_errno($ch)){
            curl_close($ch);
            echo 'error:' . curl_error($ch);
        } else {
            curl_close($ch);
            return $response; 
        }

    } catch (Exception $e) {
        return 'Erro '. $e;
    }
}
Título
Python
Text
import requests
import json
import base64

KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
SECRET = "XXXXXXXXXXXXXXXX"

SENHA = base64.b64encode((KEY + ':' + 
SECRET).encode('ascii')).decode('ascii')

GRANT_TYPE = "client_credentials"

URL = "https://api.claro.com.br"
END_POINT_ACCESS_TOKEN = "/oauth2/v1/token"
END_POINT_API_SPONSORED_BONUS =
"/mobile/v1/subscribers/sponsoredbonuses"

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'cache-control': 'no-cache',
    'x-client-auth': 'Basic {}'.format(SENHA)
}

data = {'grant_type': 'client_credentials'}
respToken = requests.post(URL + END_POINT_ACCESS_TOKEN, 
headers=headers, data=data)

if respToken.status_code != 200:
    print('Erro:' + str(respToken.status_code))
else:
    token = json.loads(respToken.text)['access_token']

headers_app = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Cache-Control': 'no-cache',
    'x-client-auth': 'Bearer {}'.format(token)
}

msisdn = "XXXXXXXXXX"
idCampaign = "XXXXXXXXXXXXXXXXXXXXXXXX"
data_app = {"data": {"msisdn": msisdn, "campaignId": idCampaign}}

resp = requests.post(URL + END_POINT_API_SPONSORED_BONUS, 
headers=headers_app, json=data_app)
print(vars(resp))
if resp.status_code != 200:
    print('Erro: ' + str(resp.status_code))
else:
    print('Valida ' + str(resp.text))

Plano Trial

Para você começar a desenvolver já!

Para você comecar a desenvolver já!

  • 1000 requisições free
  • Período de 3 meses
  • Relatório de consumo
Solicitar