1. Go to this page and download the library: Download moffhub/ussd library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
moffhub / ussd example snippets
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Moffhub\Ussd\UssdFramework;
use Moffhub\Ussd\Menus\SimpleMenu;
use Moffhub\Ussd\UssdResponse;
class UssdController extends Controller
{
public function handle(Request $request)
{
$framework = new UssdFramework([
'default_menu' => 'main',
]);
// Register menus
$framework->registerMenu('main', $this->mainMenu());
$framework->registerMenu('balance', $this->balanceMenu());
// Handle request and return response
$response = $framework->handle($request);
return response($response->formatForNetwork())
->header('Content-Type', 'text/plain');
}
private function mainMenu(): SimpleMenu
{
return new SimpleMenu('Welcome to MyApp', [
'1' => 'Check Balance',
'2' => 'Send Money',
'3' => 'Buy Airtime',
], [
'1' => function ($session, $framework) {
return $framework->navigateToMenuWithResponse('balance');
},
]);
}
private function balanceMenu(): SimpleMenu
{
return new SimpleMenu('Your balance is KES 1,500.00', [
'0' => 'Back to Main Menu',
], [
'0' => function ($session, $framework) {
return $framework->navigateToMenuWithResponse('main');
},
]);
}
}
use Moffhub\Ussd\Menus\FormMenu;
use Moffhub\Ussd\Helpers\FormField;
$formMenu = new FormMenu('Registration');
$formMenu->addField(new FormField(
name: 'name',
prompt: 'Enter your full name:',
validators: [Validators::you, {$formData['name']}! Registration complete.");
});
use Moffhub\Ussd\Menus\PaginatedMenu;
$menu = new PaginatedMenu('Select Product', $products, [
'items_per_page' => 5,
'item_formatter' => fn($item) => $item['name'] . ' - KES ' . $item['price'],
]);
use Moffhub\Ussd\Menus\ConditionalMenu;
$menu = new ConditionalMenu($defaultMenu);
$menu->addCondition(
fn($session) => $session->getUserData('role') === 'admin',
$adminMenu
);
$menu->addCondition(
fn($session) => $session->getUserData('is_premium'),
$premiumMenu
);
use Moffhub\Ussd\Menus\WizardMenu;
$wizard = new WizardMenu('Money Transfer');
$wizard->addStep('amount', new SimpleMenu('Enter amount:', ['*' => 'Cancel']));
$wizard->addStep('recipient', new SimpleMenu('Enter recipient:', ['*' => 'Cancel']));
$wizard->addStep('confirm', new SimpleMenu('Confirm transfer?', ['1' => 'Yes', '2' => 'No']));
$wizard->setCompletionHandler(function ($session, $data) {
// Process the transfer
return UssdResponse::end('Transfer successful!');
});
use Moffhub\Ussd\DataProviders\DatabaseDataProvider;
$provider = new DatabaseDataProvider(Product::class);
// Or with custom query
$provider = new DatabaseDataProvider(Product::class, function () {
return Product::where('active', true)->orderBy('name');
});
use Moffhub\Ussd\DataProviders\ApiDataProvider;
$provider = new ApiDataProvider(
'https://api.example.com',
['Content-Type: application/json'],
['type' => 'bearer', 'token' => 'your-api-token']
);
// In your menu actions
$menu = new SimpleMenu('Menu', ['1' => 'Action'], [
'1' => function ($session, $framework) {
// Get session data
$name = $session->get('name');
$step = $session->get('step', 0);
// Set session data
$session->set('last_action', 'viewed_balance');
// Form data
$formData = $session->getFormData();
// User data (preserved across sessions)
$userId = $session->getUserData('user_id');
return UssdResponse::continue("Hello, $name!");
},
]);
use Moffhub\Ussd\Security\UssdRateLimiter;
use Moffhub\Ussd\Security\DatabaseAccessListProvider;
// Enable database-backed lists
$rateLimiter = new UssdRateLimiter([
'use_database_lists' => true,
'max_requests_per_minute' => 10,
]);
// Or set a custom provider
$rateLimiter->setAccessListProvider(new DatabaseAccessListProvider([
'cache_ttl' => 300, // Cache for 5 minutes
'cache_enabled' => true,
]));
// Manage whitelist/blacklist programmatically
$rateLimiter->addToWhitelist('+254712345678', 'VIP customer', '[email protected]');
$rateLimiter->addToBlacklist('+254999999999', 'Spam detected', 'system', now()->addDays(7));
$rateLimiter->removeFromWhitelist('+254712345678');
$rateLimiter->removeFromBlacklist('+254999999999');
use Moffhub\Ussd\Models\UssdAccessList;
// Add to whitelist with expiration
UssdAccessList::addToWhitelist(
phoneNumber: '+254712345678',
reason: 'VIP customer',
addedBy: auth()->user()->email,
expiresAt: now()->addMonths(6),
metadata: ['customer_id' => 123]
);
// Add to blacklist
UssdAccessList::addToBlacklist(
phoneNumber: '+254999999999',
reason: 'Abuse detected',
addedBy: 'system'
);
// Query for your admin panel
$whitelist = UssdAccessList::whitelist()->active()->paginate(20);
$blacklist = UssdAccessList::blacklist()->active()->paginate(20);
// Check status
UssdAccessList::isWhitelisted('+254712345678'); // true
UssdAccessList::isBlacklisted('+254999999999'); // true
// Get all numbers
$whitelistedNumbers = UssdAccessList::getWhitelistedNumbers();
$blacklistedNumbers = UssdAccessList::getBlacklistedNumbers();
use Moffhub\Ussd\Interfaces\AccessListProviderInterface;
class RedisAccessListProvider implements AccessListProviderInterface
{
public function isWhitelisted(string $phoneNumber): bool
{
return Redis::sismember('ussd:whitelist', $phoneNumber);
}
public function isBlacklisted(string $phoneNumber): bool
{
return Redis::sismember('ussd:blacklist', $phoneNumber);
}
// ... implement other methods
}
$rateLimiter->setAccessListProvider(new RedisAccessListProvider());
$framework = new UssdFramework([
'security' => [
'input_sanitization' => true,
'strict_mode' => false, // Set to true to reject suspicious input
],
]);
use Moffhub\Ussd\Events\FormSubmitted;
Event::listen(FormSubmitted::class, function (FormSubmitted $event) {
ProcessRegistration::dispatch($event->formData);
});
bash
# Use a specific phone number
php artisan ussd:simulate --phone=254712345678
# Use a specific provider adapter (safaricom, airtel, mtn, generic)
php artisan ussd:simulate --provider=safaricom
# Use a specific service code
php artisan ussd:simulate --service-code=*456#
# Combine options
php artisan ussd:simulate --phone=254712345678 --provider=safaricom --service-code=*456#
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.