100% found this document useful (1 vote)
3K views

USSD Menu Example Code (PHP)

This document provides an example PHP code for implementing a USSD menu system. It includes code to start a USSD session by sending an XML request, handle responses from the menu server by switching between different question prompts, and save session data locally in a file.

Uploaded by

Mohamed Smata
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
3K views

USSD Menu Example Code (PHP)

This document provides an example PHP code for implementing a USSD menu system. It includes code to start a USSD session by sending an XML request, handle responses from the menu server by switching between different question prompts, and save session data locally in a file.

Uploaded by

Mohamed Smata
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

USSD menu example code (PHP)

<?php
//Change the trigger string to trigger on custom text, the text is case insensitive.
$ussd_trigger_str = 'start ussd';
//If the get contains the "model" parameter start a new ussd session
if( array_key_exists( 'model', $_GET ) )
{
//START USSD SESSION
$dest_MSISDN = $_GET['originator'];
$msg_content = $_GET['msg'];

//The compare is case insensitive


if( strcasecmp( $ussd_trigger_str, $msg_content ) == 0 )
{
$to = $dest_MSISDN;
$message = 'Test';

define( 'USSD_APPLICATION_CODE', 'txtNation_USSD_prompt' );


define( 'USSD_SERVER' ,'195.84.167.36' );
define( 'USSD_PORT' ,'5000' );
define( 'USSD_URL','/umsprot' );

$sessionid = uniqid();
//Create xml to start the USSD session
$xmlstr = "<?xml version='1.0' ?>\n". "<umsprot></umsprot>";

$root = new SimpleXMLElement( $xmlstr );


$root->addAttribute( "version" , 1 );
$mehodElement = $root->addChild( 'ao_start_req' );
$mehodElement->addAttribute( 'msisdn' , $to );
$mehodElement->addAttribute( 'appcode' ,
USSD_APPLICATION_CODE );
$mehodElement->addAttribute( 'sessionid' , $sessionid );
$messageElement = $mehodElement->addChild( 'data',
$message );
$messageElement->addAttribute( 'name' , 'message');
$xml_data = $root->asXML();

$url = 'http://' . USSD_SERVER . ':' . USSD_PORT . USSD_URL;


//Trigger the USSD session with http request.
$curl = curl_init( $url );

$headers = array(
"POST ".USSD_URL." HTTP/1.0",
"Content-type: application/xml;charset=\"utf-8\"",
"Accept: text/xml",
"Cache-Control: no-cache",
"Content-length: ".strlen($xml_data)
);

$setOk = curl_setopt( $curl, CURLOPT_TIMEOUT, 60);


$setOk = curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);
$setOk = curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers);
$setOk = curl_setopt( $curl, CURLOPT_POST, true );
$setOk = curl_setopt( $curl, CURLOPT_POSTFIELDS, $xml_data );
$sent = curl_exec( $curl );

if( ! $sent )
{
$error = curl_error( $curl );
}
}
}
else
{

curl_close( $curl );

exit();

//Handel request from the Menu server


$questions_array = array(
array( 'msg' => "Welcome to the USSD demo!\n\nPlease enter your
name:", 'req_type'=>'prompt_req' ),
array( 'msg' => "%s, which is your favorite movie?\n\n1. Independence
Day\n2. Top Gun 2\n3. The Thing", 'req_type'=> 'prompt_req' ),
array( 'msg' => "%s, which is your favorite band?\n\n1. The Rolling
Stones\n2. The XX\n3. Joy Division", 'req_type'=> 'prompt_req' ),
array( 'msg' => "%s, which is your favorite game?\n\n1. Minecraft\n2.
Star Craft 2\n3. Battlefield 3", 'req_type' => 'prompt_req'),
array( 'msg' => "Thanks for answering our survey, have a nice day!",
'req_type' => 'display_req')
);
$requestXML = simplexml_load_string( $HTTP_RAW_POST_DATA );
$functionNode
$functionName

= $requestXML->xpath( '/umsprot/*[1]' );
= $functionNode[0]->getName();

$functionNode_attributes = $functionNode[0]->attributes();
$seesionId = $functionNode_attributes['sessionid'];
//Different functions to take action on
switch( $functionName )
{
case "open_session":

$message = $questions_array[0];

$xmlstr = "<?xml version='1.0' ?>\n".


"<umsprot></umsprot>";
$root = new SimpleXMLElement( $xmlstr );
$root->addAttribute( "version" , 1 );
$mehodElement = $root->addChild( $message['req_type'],
$message['msg'] );
$mehodElement->addAttribute( 'reqid' , '0' );
$mehodElement->addAttribute( 'sessionid' , $seesionId );
echo $root->asXML();
exit();
break;

case "prompt_rsp"://The subscriber have replyed

$req_id = intval( $functionNode_attributes['reqid'] );

//Load session data


$sessionFileName = '/tmp/ussd_sess_' . $seesionId;
if( file_exists( $sessionFileName ) )
{
$localSessionData =
unserialize(file_get_contents( $sessionFileName ));
}
else if( $req_id == 0 )
{
//Create new local session file
$localSessionData = array( 'subscriber_name' =>
sprintf( '%s', $functionNode[0]) );
file_put_contents( $sessionFileName,
serialize( $localSessionData ) );
}
$next_req_id = $req_id + 1;
if( array_key_exists( $next_req_id ,$questions_array) )
{
$message = $questions_array[$next_req_id];

"<umsprot></umsprot>";

$xmlstr = "<?xml version='1.0' ?>\n".

$root = new SimpleXMLElement( $xmlstr );


$root->addAttribute( "version" , 1 );
$mehodElement = $root>addChild( $message['req_type'], sprintf ( $message['msg'],
$localSessionData['subscriber_name'] ) );
$mehodElement->addAttribute( 'reqid' ,
$next_req_id );
$mehodElement->addAttribute( 'sessionid' ,
$seesionId );
}

echo $root->asXML();
exit();

break;

case "abort_session_req":

}
?>

$sessionFileName = '/tmp/ussd_sess_' . $seesionId;


unlink($sessionFileName);
break;

You might also like