Sei sulla pagina 1di 14

23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio

Translated to: Portuguese Show original Options ▼

Operações básicas do USSD no Laravel usando


API do Talking da África
Nicollet Njora Segue
29 de novembro de 2019 · 3 min de leitura

Configurando um fluxo USSD típico, lidando com a entrada do usuário e enviando sms
para o usuário com base em sua entrada usando a Africa's Talking Ltd

Enfrentei muitos desafios ao tentar processar as entradas dos usuários em sequência,


então tentei colocar o que aprendi na forma de um projeto de amostra. Espero que isso
facilite seu trabalho.

. . .

Para fluir neste tutorial, você deve ter conhecimento básico do Laravel .

Primeiras coisas primeiro:


https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 1/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio

Configure um novo aplicativo laravel .

laravel new SampleUSSD

Instale a biblioteca PHP do Africa's Talking. As instruções estão na página GitHub

Se você estiver usando o composer, é tão simples como:

compositor requer africastalking / africastalking

Para os fins deste tutorial, você precisará de uma API KEY da Africa's Talking .
Felizmente, eles oferecem uma caixa de areia que você pode usar para experimentar
seus serviços.

Adicione-o ao arquivo .env e lembre-se de colocar seu nome de usuário real e a chave de
API do painel do Africa's Talking.

AT_USERNAME = your_at_username
AT_API_KEY = your_at_api_key

Adicione o seguinte arquivo na pasta de configuração: africastalking.php

Copie e cole no arquivo.

1 <? php
2
3 return [
4 'username_sandbox' => env ( 'AT_SANDBOX_USERNAME' , "sandbox" ),
5 'api_key_sandbox' => env ( 'AT_SANDBOX_API_KEY' , "NOAPIKEY" )
6 ];

africastalking.php hospedado com ❤ pelo GitHub ver cru

Isso permite que você acesse as variáveis de ambiente de seu aplicativo.

Crie um controlador chamado UssdController:


https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 2/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio
Crie um controlador chamado UssdController:

php artisan make: controlador UssdController

Crie uma rota no arquivo web.php:

Route :: post ('/ ussd', 'UssdController @ ussdRequestHandler');

Agora vamos escrever uma função no UssdController para lidar com as solicitações
USSD de entrada.

1 <? php
2
3 namespace App \ Http \ Controllers ;
4
5 use Illuminate \ Http \ Request ;
6 use App \ User ;
7
8 classe UssdController extends Controller
9 {
10 public function ussdRequestHandler ( Request $ request )
11 {
12 $ sessionId = $ request [ "sessionId" ];
13 $ serviceCode = $ request [ "serviceCode" ];
14 $ phone = $ request [ "phoneNumber" ];
15 $ text = $ request [ "text" ];
16
17 cabeçalho ( 'Content-type: text / plain' );
18
19 if ( User :: where ( 'telefone' , $ telefone ) -> existe ()) {
20 // Função para lidar com usuários já registrados
21 $ this -> handleReturnUser ( $ text , $ phone );
22 } else {
23 // Função para lidar com novos usuários
24 $ this -> handleNewUser ( $ text , $ phone );
25 }
26 }
27 }

UssdController.php hospedado com ❤ pelo GitHub ver cru


https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 3/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio

A próxima etapa é criar a função que lida com um novo usuário:

<? php

classe UssdController extends Controller


{

/ *
* ....
* Após o conteúdo anterior
* /

public function handleNewUser ( $ ussd_string , $ phone )


{
$ ussd_string_exploded = explode ( "*" , $ ussd_string );

// Obtenha o nível de menu de ussd_string reply


$ level = count ( $ ussd_string_exploded );

if ( vazio ( $ ussd_string ) ou $ level == 0 ) {


$ this -> newUserMenu (); // mostra o menu inicial
}

switch ( $ level ) {
case ( $ level == 1 &&! empty ( $ ussd_string )):
if ( $ ussd_string_exploded [ 0 ] == "1" ) {
// Se o usuário selecionou 1, envie-o para o menu de registro
$ Presente -> ussd_proceed ( "Por favor, indique o seu nome completo e pino desejad
} else if ( $ ussd_string_exploded [ 0 ] == "2" ) {
// Se o usuário selecionou 2, envie a eles as informações
$ this -> ussd_stop ( "Você receberá mais informações sobre SampleUSSD via sms em b
$ this -> sendText ( "Este é um serviço de assinatura da SampleUSSD." , $ phone );
} else if ( $ ussd_string_exploded [ 0 ] == "3" ) {
// Se o usuário selecionou 3, saia
$ this -> ussd_stop ( "Obrigado por entrar em contato com SampleUSSD." );
}
pausa ;
caso 2 :
if ( $ this -> ussdRegister ( $ ussd_string_exploded [ 1 ], $ phone ) == "success" ) {
$ this -> servicesMenu ();
}
pausa ;
https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 4/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio

// N / B: não há mais casos tratados, pois as solicitações a seguir serão tratadas pelo usu
}
}
}

UssdController.php hospedado com ❤ pelo GitHub ver cru

Em seguida, uma função de lidar com um usuário de retorno:

1 <? php
2
3 classe UssdController extends Controller
4 {
5
6 / *
7 * ....
8 * Após o conteúdo anterior
9 * /
10 public function handleReturnUser ( $ ussd_string , $ phone )
11 {
12 $ ussd_string_exploded = explode ( "*" , $ ussd_string );
13
14 // Obtenha o nível de menu de ussd_string reply
15 $ level = count ( $ ussd_string_exploded );
16
17 if ( vazio ( $ ussd_string ) ou $ level == 0 ) {
18 $ this -> returnUserMenu (); // mostra o menu inicial / primeiro
19 }
20
21 switch ( $ level ) {
22 case ( $ level == 1 &&! empty ( $ ussd_string )):
23 if ( $ ussd_string_exploded [ 0 ] == "1" ) {
24 // Se o usuário selecionou 1 envie-o para o menu de logi
25 $ this -> ussd_proceed ( "Por favor, insira seu PIN" );
26 } else if ( $ ussd_string_exploded [ 0 ] == "2" ) {
27 // Se o usuário selecionou 2, termina a sessão
28 $ this -> ussd_stop ( "Obrigado por entrar em contato com
29 } else {
30 $ this -> ussd_stop ( "Entrada inválida" );
31 }
32 pausa ;
33 caso 2 :
34 if ( $ this -> ussdLogin ( $ ussd_string_exploded [ 1 ], $ phone
https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 5/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio

35 $ this -> servicesMenu ();


36 }
37 pausa ;
38 caso 3 :
39 if ( $ ussd_string_exploded [ 2 ] == "1" ) {
40 $ this -> ussd_stop ( "Você receberá um sms em breve." )
41 $ this -> sendText ( "Você se inscreveu com sucesso em at
42 } else if ( $ ussd_string_exploded [ 2 ] == "2" ) {
43 $ this -> ussd_stop ( "Você receberá mais informações so
44 $ this -> sendText ( "Este é um serviço de assinatura da
45 } else if ( $ ussd_string_exploded [ 2 ] == "3" ) {
46 $ this -> ussd_stop ( "Obrigado por entrar em contato com
47 } else {
48 $ this -> ussd_stop ( "Entrada inválida!" );
49 }
50 pausa ;
51 }
52 }
53 }

UssdController.php hospedado com ❤ pelo GitHub ver cru

Adicione essas funções no final do UssdController que ecoará de volta para o servidor
falante da África:

public function ussd_proceed ($ ussd_text) {

echo "CON $ ussd_text";

public function ussd_stop ($ ussd_text) {

echo "END $ ussd_text";

No mesmo arquivo adicione as ussdRegister e ussdLogin funções.

1 <? php
2 namespace App \ Http \ Controllers ;

https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 6/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio
3
4 use App \ User ;
5
6 classe UssdController extends Controller
7 {
8
9 / *
10 * ....
11 * Após o conteúdo anterior
12 * /
13
14 / *
15 * Lida com solicitação de registro USSD
16 * /
17 função pública ussdRegister ( $ details , $ phone )
18 {
19 $ input = explode ( "," , $ detalhes ); // armazena valores de entrada em uma matriz
20 $ full_name = $ input [ 0 ]; // nome completo da loja
21 $ pin = $ input [ 1 ];
22
23 $ user = novo usuário ;
24 $ user -> nome = $ full_name ;
25 $ user -> telefone = $ telefone ;
26 // Você deve criptografar o pin
27 $ user -> pin = $ pin ;
28 $ user -> save ();
29
30 retornar "sucesso" ;
31 }
32
33 / **
34 * Lida com solicitação de login
35 * /
36 public function ussdLogin ( $ details , $ phone )
37 {
38 $ user = User :: where ( 'phone' , $ phone ) -> first ();
39
40 if ( $ user -> pin == $ detalhes ) {
41 return "Success";
42 } else {
43 return $this->ussd_stop("Login was unsuccessful!");
44 }
45 }
46 }

UssdController php hosted with ❤ by GitHub view raw


https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 7/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio
UssdController.php hosted with ❤ by GitHub view raw

No mesmo namespace do UssdController, crie um arquivo chamado


UssdMenuTrait.php que conterá o menu que você apresenta ao usuário

1 <?php
2 namespace App\Http\Controllers;
3
4 trait UssdMenuTrait{
5
6 public function newUserMenu(){
7 $start = "Welcome to SampleUSSD\n";
8 $start .= "1. Register\n";
9 $ start . = "2. Obtenha informações \ n" ;
10 $ start . = "3. Sair" ;
11 $ this -> ussd_proceed ( $ start );
12 }
13 public function returnUserMenu () {
14 $ con = "Bem-vindo de volta ao SampleUSSD \ n" ;
15 $ con . = "1. Login \ n" ;
16 $ con . = "2. Sair" ;
17 $ this -> ussd_proceed ( $ con );
18 }
19 public function servicesMenu () {
20 $ serve = "Qual serviço você está procurando? \ n" ;
21 $ serve . = "1. Inscreva-se para receber atualizações \ n" ;
22 $ serve . = "2. Informações sobre o serviço \ n" ;
23 $ serve . = "3. Sair" ;
24 $ this -> ussd_proceed ( $ serve );
25 }
26 }

UssdMenuTrait.php hospedado com ❤ pelo GitHub ver cru

Inclui o trait no início da classe UssdController.

class UssdController extends Controller {

use UssdMenuTrait ;

....

}
https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 8/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio

Em seguida, criamos um arquivo SmsTrait.php no namespace do controlador que


conterá a lógica de envio de um sms usando a API do Talking da África.

1 <? php
2 namespace App \ Http \ Controllers ;
3
4 use AfricasTalking \ SDK \ AfricasTalking ;
5
6 Traço SmsTrait
7 {
8 public function sendText ( $ message , $ phone )
9 {
10 $ username = config ( "africastalking.username_sandbox" );
11 $ apiKey = config ( "africastalking.api_key_sandbox" );
12
13 $ AT = novo AfricasTalking ( $ username , $ apiKey );
14
15 $ sms = $ AT -> sms ();
16
17 tente {
18 $ resultado = $ sms -> enviar ([
19 'to' => $ phone ,
20 'mensagem' => $ mensagem
21 ]);
22
23 print_r ( $ resultado );
24 } catch ( Exception $ e ) {
25 echo "Erro:" . $ e . getMessage ();
26 }
27
28 retornar "Estou feito" ;
29 }
30 }

SmsTrait.php hospedado com ❤ por GitHub ver cru

Lembre-se de incluir o SmsTrait no início da classe UssdController

O UssdController.php deve se parecer com isto agora:

1 <? php
https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 9/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio
p p
2
3 namespace App \ Http \ Controllers ;
4
5 use Illuminate \ Http \ Request ;
6 use App \ User ;
7
8 classe UssdController extends Controller
9 {
10 use UssdMenuTrait;
11 use SmsTrait ;
12
13 public function ussdRequestHandler ( Request $ request )
14 {
15 $ sessionId = $ request [ "sessionId" ];
16 $ serviceCode = $ request [ "serviceCode" ];
17 $ phone = $ request [ "phoneNumber" ];
18 $ text = $ request [ "text" ];
19
20 cabeçalho ( 'Content-type: text / plain' );
21
22 if ( User :: where ( 'telefone' , $ telefone ) -> existe ()) {
23 // Função para lidar com usuários já registrados
24 $ this -> handleReturnUser ( $ text , $ phone );
25 } else {
26 // Função para lidar com novos usuários
27 $ this -> handleNewUser ( $ text , $ phone );
28 }
29 }
30
31 public function handleReturnUser ( $ ussd_string , $ phone )
32 {
33 $ ussd_string_exploded = explode ( "*" , $ ussd_string );
34
35 // Obtenha o nível de menu de ussd_string reply
36 $ level = count ( $ ussd_string_exploded );
37
38 if ( vazio ( $ ussd_string ) ou $ level == 0 ) {
39 $ this -> returnUserMenu (); // mostra o menu inicial / primeiro
40 }
41
42 switch ( $ level ) {
43 case ( $ level == 1 &&! empty ( $ ussd_string )):
44 if ( $ ussd_string_exploded [ 0 ] == "1" ) {
45 // Se o usuário selecionou 1 envie-o para o menu de login
$ hi d d ( " f i i " )
https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 10/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio
46 $ this -> ussd_proceed ( "Por favor, insira seu PIN" );
47 } else if ( $ ussd_string_exploded [ 0 ] == "2" ) {
48 // Se o usuário selecionou 2, termina a sessão
49 $ this -> ussd_stop ( "Obrigado por entrar em contato com SampleUSSD." );
50 } else {
51 $ this -> ussd_stop ( "Entrada inválida" );
52 }
53 pausa ;
54 caso 2 :
55 if ( $ this -> ussdLogin ( $ ussd_string_exploded [ 1 ], $ phone ) == "Sucesso"
56 $ this -> servicesMenu ();
57 }
58 pausa ;
59 caso 3 :
60 if ( $ ussd_string_exploded [ 2 ] == "1" ) {
61 $ this -> ussd_stop ( "Você receberá um sms em breve." );
62 $ this -> sendText ( "Você se inscreveu com sucesso em atualizações do Sampl
63 } else if ( $ ussd_string_exploded [ 2 ] == "2" ) {
64 $ this -> ussd_stop ( "Você receberá mais informações sobre SampleUSSD via s
65 $ this -> sendText ( "Este é um serviço de assinatura da SampleUSSD." , $ ph
66 } else if ( $ ussd_string_exploded [ 2 ] == "3" ) {
67 $ this -> ussd_stop ( "Obrigado por entrar em contato com SampleUSSD." );
68 } else {
69 $ this -> ussd_stop ( "Entrada inválida!" );
70 }
71 pausa ;
72 }
73 }
74
75 public function handleNewUser ( $ ussd_string , $ phone )
76 {
77 $ ussd_string_exploded = explode ( "*" , $ ussd_string );
78
79 // Obtenha o nível de menu de ussd_string reply
80 $ level = count ( $ ussd_string_exploded );
81
82 if ( vazio ( $ ussd_string ) ou $ level == 0 ) {
83 $ this -> newUserMenu (); // mostra o menu inicial
84 }
85
86 switch ( $ level ) {
87 case ( $ level == 1 &&! empty ( $ ussd_string )):
88 if ( $ ussd_string_exploded [ 0 ] == "1" ) {
89 // Se o usuário selecionou 1, envie-o para o menu de registro
90 $ Presente -> ussd_proceed ( "Por favor, indique o seu nome completo e pino
https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 11/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio

91 } else if ( $ ussd_string_exploded [ 0 ] == "2" ) {


92 // Se o usuário selecionou 2, envie a eles as informações
93 $ this -> ussd_stop ( "Você receberá mais informações sobre SampleUSSD via s
94 $ this -> sendText ( "Este é um serviço de assinatura da SampleUSSD." , $ ph
95 } else if ( $ ussd_string_exploded [ 0 ] == "3" ) {
96 // Se o usuário selecionou 3, saia
97 $ this -> ussd_stop ( "Obrigado por entrar em contato com SampleUSSD." );
98 }
99 pausa ;
100 caso 2 :
101 if ( $ this -> ussdRegister ( $ ussd_string_exploded [ 1 ], $ phone ) == "succes
102 $ this -> servicesMenu ();
103 }
104 pausa ;
105 // N / B: não há mais casos tratados, pois as solicitações a seguir serão tratadas p
106 }
107 }
108
109 / **
110 * Lida com solicitação de registro USSD
111 * /
112 função pública ussdRegister ( $ details , $ phone )
113 {
114 $ input = explode ( "," , $ detalhes ); // armazena valores de entrada em uma matriz
115 $ full_name = $ input [ 0 ]; // nome completo da loja
116 $ pin = $ input [ 1 ];
117
118 $ user = novo usuário ;
119 $ user -> nome = $ full_name ;
120 $ user -> telefone = $ telefone ;
121 // Você deve criptografar o pin
122 $ user -> pin = $ pin ;
123 $ user -> save ();
124
125 retornar "sucesso" ;
126 }
127
128 / **
129 * Lida com solicitação de login
130 * /
131 public function ussdLogin ( $ details , $ phone )
132 {
133 $ user = User :: where ( 'phone' , $ phone ) -> first ();
134
135 if ( $ > i $ d t lh ) {
https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 12/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio
135 if ( $ user -> pin == $ detalhes ) {
136 retornar "Sucesso" ;
137 } else {
138 return $ this -> ussd_stop ( "Login não teve sucesso!" );
139 }
140 }
141
142 public function ussd_proceed ( $ ussd_text ) {
143 echo "CON $ ussd_text" ;
144 }
145 public function ussd_stop ( $ ussd_text ) {
146 echo "END $ ussd_text" ;
147 }
148 }

UssdController.php hospedado com ❤ pelo GitHub ver cru

Por fim, adicione a rota ussd às exceções para que o CSRF possa fazer uma solicitação de
postagem. No seguinte arquivo: Http \ Middleware \ VerifyCsrfToken adicione isto:

1 / **
2 * Os URIs que devem ser excluídos da verificação de CSRF.
3 *
4 * @var array
5 * /
6 protegido $ exceto = [
7 'ussd',
8 ];

VerifyCsrfToken.php hospedado com ❤ por GitHub ver cru

Para testar o aplicativo usando o simulador do Talking da África, você precisa criar um
novo código de serviço USSD no Talking Sandbox da África. Isso exigirá que você
registre um URL de retorno de chamada e, portanto, você pode implantar seu aplicativo
em uma plataforma como o Heroku para fins de teste. Use o código de serviço registrado
para testar no simulador.

Você também pode testar as respostas do aplicativo usando o Postman .

https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 13/14
23/09/2020 Operações básicas do USSD no Laravel usando API do Talking da África | por Nicollet Njora | Médio

Foto de Clark Tibbs no Unsplash

Encontre o repositório github com solução completa aqui .

Deixe-me saber na seção de comentários como posso ajudar ou como posso melhorar na
escrita de tutoriais.

Happy Coding!

Laravel Ussd Africastalking SMS Tutorial

Sobre Socorro Legal

Obtenha o aplicativo Medium

https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 14/14

Potrebbero piacerti anche