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.
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.
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.
- 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.
Versão: 1.0
Criada por: Rogerio Micheletti
Data: 13/08/2021
Modificações
- [Bonus Patrocinado] - Versão inicial.
Operação responsável por conceder bônus patrocinado para Clientes Pré e Pós Pago através de Parceiros .
Backend: iMusica - /grant/bonus
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.
!/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"''
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; } } } }
<?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; } }
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