Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
. . .
Para fluir neste tutorial, você deve ter conhecimento básico do Laravel .
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
1 <? php
2
3 return [
4 'username_sandbox' => env ( 'AT_SANDBOX_USERNAME' , "sandbox" ),
5 'api_key_sandbox' => env ( 'AT_SANDBOX_API_KEY' , "NOAPIKEY" )
6 ];
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 }
<? php
/ *
* ....
* Após o conteúdo anterior
* /
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
}
}
}
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
Adicione essas funções no final do UssdController que ecoará de volta para o servidor
falante da África:
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 }
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 }
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
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 }
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
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 ];
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.
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
Deixe-me saber na seção de comentários como posso ajudar ou como posso melhorar na
escrita de tutoriais.
Happy Coding!
https://medium.com/@nicolletnjora/basic-ussd-operations-on-laravel-using-africas-talking-api-8b2e28260a0f 14/14