function Request($security_key, $called, $calling, $callerid, $callback_time, $uniqueid) { global $A2B; /* $status = 'PENDING'; $server_ip = 'localhost'; $num_attempt = 0; $channel = 'SIP/'.$phone_number.'@mylittleIP'; $exten = $phone_number; $context = 'a2billing'; $priority = 1; //$timeout callerid $variable = "phonenumber=$phone_number|callerid=$callerid"; */ $phone_number = $called; $insert_id_callback = 'null'; if (strlen($uniqueid) == 0) { $uniqueid = MDP_STRING(5) . '-' . MDP_NUMERIC(10); } $FG_regular[] = array("^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})\$", "(YYYY-MM-DD HH:MM:SS)"); // The wrapper variables for security // $security_key = API_SECURITY_KEY; write_log(LOG_CALLBACK, " Service_Callback( security_key={$security_key}, called={$called}, calling={$calling}, callerid={$callerid}, uniqueid={$uniqueid}, callback_time={$callback_time})"); $mysecurity_key = API_SECURITY_KEY; // CHECK CALLERID if (strlen($callerid) < 1) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT CALLERID AT LEAST 1 DIGIT "); sleep(2); return array($insert_id_callback, 'result=Error', " ERROR - FORMAT CALLERID AT LEAST 1 DIGIT "); } // CHECK PHONE_NUMBER if (strlen($phone_number) < 10) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT PHONENUMBER AT LEAST 10 DIGITS "); sleep(2); return array($insert_id_callback, 'result=Error', " ERROR - FORMAT PHONENUMBER AT LEAST 10 DIGITS "); } // CHECK CALLBACK TIME if (strlen($callback_time) > 1 && !ereg($FG_regular[0][0], $callback_time)) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT CALLBACKTIME : " . $FG_regular[0][0]); sleep(2); return array($insert_id_callback, 'result=Error', " ERROR - FORMAT CALLBACKTIME : " . $FG_regular[0][0]); } // CHECK SECURITY KEY if (md5($mysecurity_key) !== $security_key || strlen($security_key) == 0) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " CODE_ERROR SECURITY_KEY"); sleep(2); return array($insert_id_callback, 'result=Error', ' KEY - BAD PARAMETER '); } $DBHandle = DbConnect(); if (!$DBHandle) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR CONNECT DB"); sleep(2); return array($insert_id_callback, 'result=Error', ' ERROR - CONNECT DB '); } $A2B->DBHandle = $DBHandle; $instance_table = new Table(); $A2B->set_instance_table($instance_table); $called = ereg_replace("^\\+", "011", $called); $calling = ereg_replace("^\\+", "011", $calling); $called = ereg_replace("[^0-9]", "", $called); $calling = ereg_replace("[^0-9]", "", $calling); $called = ereg_replace("^01100", "011", $called); $calling = ereg_replace("^01100", "011", $calling); $called = ereg_replace("^00", "011", $called); $calling = ereg_replace("^00", "011", $calling); $called = ereg_replace("^0111", "1", $called); $calling = ereg_replace("^0111", "1", $calling); $A2B->credit = 1000; $A2B->tariff = $A2B->config["callback"]['all_callback_tariff']; $RateEngine = new RateEngine(); // $RateEngine -> webui = 0; // LOOKUP RATE : FIND A RATE FOR THIS DESTINATION $A2B->dnid = $A2B->destination = $caller_areacode . $calling; $resfindrate = $RateEngine->rate_engine_findrates($A2B, $A2B->destination, $A2B->tariff); // IF FIND RATE if ($resfindrate != 0) { //$RateEngine -> debug_st = 1; $res_all_calcultimeout = $RateEngine->rate_engine_all_calcultimeout($A2B, $A2B->credit); if ($res_all_calcultimeout) { // MAKE THE CALL if ($RateEngine->ratecard_obj[0][34] != '-1') { $usetrunk = 34; $usetrunk_failover = 1; $RateEngine->usedtrunk = $RateEngine->ratecard_obj[$k][34]; } else { $usetrunk = 29; $RateEngine->usedtrunk = $RateEngine->ratecard_obj[$k][29]; $usetrunk_failover = 0; } $prefix = $RateEngine->ratecard_obj[0][$usetrunk + 1]; $tech = $RateEngine->ratecard_obj[0][$usetrunk + 2]; $ipaddress = $RateEngine->ratecard_obj[0][$usetrunk + 3]; $removeprefix = $RateEngine->ratecard_obj[0][$usetrunk + 4]; $timeout = $RateEngine->ratecard_obj[0]['timeout']; $failover_trunk = $RateEngine->ratecard_obj[0][40 + $usetrunk_failover]; $addparameter = $RateEngine->ratecard_obj[0][42 + $usetrunk_failover]; $destination = $A2B->destination; if (strncmp($destination, $removeprefix, strlen($removeprefix)) == 0) { $destination = substr($destination, strlen($removeprefix)); } $pos_dialingnumber = strpos($ipaddress, '%dialingnumber%'); $ipaddress = str_replace("%cardnumber%", $A2B->cardnumber, $ipaddress); $ipaddress = str_replace("%dialingnumber%", $prefix . $destination, $ipaddress); if ($pos_dialingnumber !== false) { $dialstr = "{$tech}/{$ipaddress}" . $dialparams; } else { if ($A2B->agiconfig['switchdialcommand'] == 1) { $dialstr = "{$tech}/{$prefix}{$destination}@{$ipaddress}" . $dialparams; } else { $dialstr = "{$tech}/{$ipaddress}/{$prefix}{$destination}" . $dialparams; } } //ADDITIONAL PARAMETER %dialingnumber%, %cardnumber% if (strlen($addparameter) > 0) { $addparameter = str_replace("%cardnumber%", $A2B->cardnumber, $addparameter); $addparameter = str_replace("%dialingnumber%", $prefix . $destination, $addparameter); $dialstr .= $addparameter; } $channel = $dialstr; $exten = $calling; $context = $A2B->config["callback"]['context_callback']; $id_server_group = $A2B->config["callback"]['id_server_group']; $priority = 1; $timeout = $A2B->config["callback"]['timeout'] * 1000; $application = ''; $status = 'PENDING'; $server_ip = 'localhost'; $num_attempt = 0; $variable = "MODE=CID|CALLED={$called}|CALLING={$calling}|CBID={$uniqueid}|TARIFF=" . $A2B->tariff; if (is_numeric($A2B->config["callback"]['sec_wait_before_callback']) && $A2B->config["callback"]['sec_wait_before_callback'] >= 1) { $sec_wait_before_callback = $A2B->config["callback"]['sec_wait_before_callback']; } else { $sec_wait_before_callback = 1; } // LIST FIELDS TO INSERT CALLBACK REQUEST $QUERY_FIELS = 'uniqueid, status, server_ip, num_attempt, channel, exten, context, priority, variable, id_server_group, callback_time, account, callerid, timeout'; // DEFINE THE CORRECT VALUE FOR THE INSERT if (strlen($callback_time) > 1) { $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', '{$callback_time}', '{$account}', '{$callerid}', '30000'"; } else { if ($A2B->config["database"]['dbtype'] != "postgres") { // MYSQL $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', ADDDATE( CURRENT_TIMESTAMP, INTERVAL {$sec_wait_before_callback} SECOND ), '{$account}', '{$callerid}', '30000'"; } else { // POSTGRESQL $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', (CURRENT_TIMESTAMP + INTERVAL '{$sec_wait_before_callback} SECOND'), '{$account}', '{$callerid}', '30000'"; } } $insert_id_callback = $instance_table->Add_table($DBHandle, $QUERY_VALUES, $QUERY_FIELS, 'cc_callback_spool', 'id'); if (!$insert_id_callback) { // FAIL INSERT write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR INSERT -> \n QUERY=" . $QUERY); sleep(2); return array($insert_id_callback, 'result=Error', ' ERROR - INSERT INTO DB'); } // SUCCEED INSERT write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " CALLBACK INSERTED -> \n QUERY=" . $QUERY); return array($insert_id_callback, 'result=Success', " Success - Callback request has been accepted "); } else { $error_msg = 'Error : You don t have enough credit to call you back !!!'; } } else { $error_msg = 'Error : There is no route to call back your phonenumber !!!'; } // CALLBACK FAIL write_log(LOG_CALLBACK, "error_msg = {$error_msg}"); return array($insert_id_callback, 'result=Error', " ERROR - {$error_msg}"); }
Header("Location: " . $HD_Form->FG_GO_LINK_AFTER_ACTION); exit; } $form_action = "add"; $_POST['accountcode'] = $_POST['username'] = $_POST['name'] = $_POST['cardnumber'] = $cardnumber; $_POST['allow'] = FRIEND_ALLOW; $_POST['context'] = FRIEND_CONTEXT; $_POST['nat'] = FRIEND_NAT; $_POST['amaflags'] = FRIEND_AMAFLAGS; $_POST['regexten'] = $cardnumber; $_POST['id_cc_card'] = $id_cc_card; $_POST['callerid'] = $useralias; $_POST['qualify'] = FRIEND_QUALIFY; $_POST['host'] = FRIEND_HOST; $_POST['dtmfmode'] = FRIEND_DTMFMODE; $_POST['secret'] = MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5); // for the getProcessed var $HD_Form->_vars = array_merge((array) $_GET, (array) $_POST); } $HD_Form->FG_EDITION_LINK = filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL) . "?form_action=ask-edit&atmenu={$atmenu}&id="; $HD_Form->FG_DELETION_LINK = filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL) . "?form_action=ask-delete&atmenu={$atmenu}&id="; if ($id != "" || !is_null($id)) { $HD_Form->FG_EDITION_CLAUSE = str_replace("%id", "{$id}", $HD_Form->FG_EDITION_CLAUSE); } if (!isset($form_action)) { $form_action = "list"; } //ask-add if (!isset($action)) { $action = $form_action; }
if (isset($iax) && $iax == 1) { $iax_buddy = 1; } $creditlimit = is_numeric($creditlimit) ? $creditlimit : 0; //initialize refill parameter $description_refill = gettext("CREATION CARD REFILL"); $field_insert_refill = " credit,card_id, description"; $instance_refill_table = new Table("cc_logrefill", $field_insert_refill); for ($k = 0; $k < $nbcard; $k++) { $arr_card_alias = gen_card_with_alias("cc_card", 0, $cardnumberlenght_list); $accountnumber = $arr_card_alias[0]; $useralias = $arr_card_alias[1]; if (!is_numeric($addcredit)) { $addcredit = 0; } $passui_secret = MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5); $FG_ADITION_SECOND_ADD_VALUE = "'{$accountnumber}', '{$useralias}', '{$addcredit}', '{$choose_tariff}', 't', '{$gen_id}', '', '', '', '', '', '{$id_country}', '', '', {$choose_simultaccess}, '{$choose_currency}', " . "{$choose_typepaid}, {$creditlimit}, {$enableexpire}, '{$expirationdate}', {$expiredays}, '{$passui_secret}', '{$runservice}', '{$tag}', '{$id_group}', '{$discount}', '{$id_seria}', " . "'{$id_didgroup}', {$sip_buddy}, {$iax_buddy}, '{$vat}'"; if (DB_TYPE != "postgres") { $FG_ADITION_SECOND_ADD_VALUE .= ", now() "; } $id_cc_card = $instance_sub_table->Add_table($HD_Form->DBHandle, $FG_ADITION_SECOND_ADD_VALUE, null, null, $HD_Form->FG_TABLE_ID); //create refill for each cards if ($addcredit > 0) { $value_insert_refill = "'{$addcredit}', '{$id_cc_card}', '{$description_refill}' "; $instance_refill_table->Add_table($HD_Form->DBHandle, $value_insert_refill, null, null); } $instance_realtime->insert_voip_config($sip, $iax, $id_cc_card, $accountnumber, $passui_secret); } // Save Sip accounts to file if (isset($sip)) { $instance_realtime->create_trunk_config_file('sip');
$gen_id = time(); $_SESSION["IDfilter"]=$gen_id; $creditlimit = is_numeric($creditlimit) ? $creditlimit : 0; $sub_credit_amount = 0; //initialize refill parameter $description_refill = gettext("CREATION CARD REFILL"); $field_insert_refill = " credit,card_id, description"; $instance_refill_table = new Table("cc_logrefill", $field_insert_refill); for ($k=0;$k<$nbcard;$k++) { $arr_card_alias = gen_card_with_alias("cc_card", 0, $cardnumberlenght_list); $cardnum = $arr_card_alias[0]; $useralias = $arr_card_alias[1]; $addcredit=$initial_credit; $passui_secret = MDP_NUMERIC(10); $FG_ADITION_SECOND_ADD_VALUE = "'$cardnum', '$useralias', '$addcredit', '$choose_tariff', 't', '$gen_id', '', '', '', '', '', '', '', '', $choose_simultaccess, '$choose_currency', $choose_typepaid, $creditlimit, $enableexpire, '$expirationdate', $expiredays, '$passui_secret', '$runservice', '$tag', '$id_group', '$discount', '$id_seria'"; if (DB_TYPE != "postgres") $FG_ADITION_SECOND_ADD_VALUE .= ",now() "; if (isset($sip)) $FG_ADITION_SECOND_ADD_VALUE .= ", 1"; if (isset($iax)) $FG_ADITION_SECOND_ADD_VALUE .= ", 1"; $id_cc_card = $instance_sub_table -> Add_table ($HD_Form -> DBHandle, $FG_ADITION_SECOND_ADD_VALUE, null, null, $HD_Form -> FG_TABLE_ID); //create refill for each cards if($addcredit>0){ $value_insert_refill = "'$addcredit', '$id_cc_card', '$description_refill' "; $instance_refill_table -> Add_table ($HD_Form -> DBHandle, $value_insert_refill, null, null); $sub_credit_amount += $addcredit; }
//default callerid $callerid = '111111111'; $cidgroupid = $phone["id_cid_group"]; if ($A2B->config["database"]['dbtype'] == "postgres") { $QUERY = "SELECT cid FROM cc_outbound_cid_list WHERE activated = 1 AND outbound_cid_group = {$cidgroupid} ORDER BY RANDOM() LIMIT 1"; } else { $QUERY = "SELECT cid FROM cc_outbound_cid_list WHERE activated = 1 AND outbound_cid_group = {$cidgroupid} ORDER BY RAND() LIMIT 1"; } $instance_cid_table = new Table(); echo "QUERY CID : " . $QUERY; $cidresult = $instance_cid_table->SQLExec($A2B->DBHandle, $QUERY); if (is_array($cidresult) && count($cidresult) > 0) { $callerid = $cidresult[0][0]; } $account = $_SESSION["pr_login"]; $uniqueid = MDP_NUMERIC(5) . '-' . MDP_STRING(7); $status = 'PENDING'; $server_ip = 'localhost'; $num_attempt = 0; $variable = "CALLED={$destination}|USERNAME={$phone['8']}|USERID={$phone['6']}|CBID={$uniqueid}|PHONENUMBER_ID=" . $phone['cc_phonenumber_id'] . "|CAMPAIGN_ID=" . $phone['cc_campaign_id']; $res = $instance_table->Add_table($A2B->DBHandle, "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', now(), '{$account}', '{$callerid}', '30000'", "uniqueid, status, server_ip, num_attempt, channel, exten, context, priority, variable, id_server_group, callback_time, account, callerid, timeout", "cc_callback_spool", "id"); if (!$res) { if ($verbose_level >= 1) { echo "[Cannot insert the callback request in the spool!]"; } } else { if ($verbose_level >= 1) { echo "[Your callback request has been queued correctly!]"; } if ($action == "update") { $query = "UPDATE cc_campaign_phonestatus SET id_callback = '{$uniqueid}', lastuse = CURRENT_TIMESTAMP WHERE id_phonenumber ={$phone['0']} AND id_campaign = {$phone['2']} ";
* along with this program. If not, see <http://www.gnu.org/licenses/>. * * **/ include './lib/customer.defines.php'; include './lib/customer.module.access.php'; include './lib/Form/Class.FormHandler.inc.php'; if (!isset($form_action)) { $form_action = "ask-add"; } if (!isset($action)) { $action = $form_action; } // PROVISION TEST DATA if (false) { $_POST["lastname"] = $_POST["firstname"] = $_POST["address"] = $_POST["city"] = $_POST["state"] = $_POST["country"] = 'SIGN-' . MDP_STRING(5) . '-' . MDP_NUMERIC(3); $_POST["email"] = MDP_STRING(10) . '@sign-up.com'; $_POST["zipcode"] = $_POST["phone"] = '12345667789'; } include './form_data/FG_var_signup.inc'; include './lib/customer.smarty.php'; if (!$A2B->config["signup"]['enable_signup']) { echo "No Signup page!"; exit; } getpost_ifset(array('subscriber_signup')); if (!is_numeric($subscriber_signup)) { //check subscriber_signup $table_check_subscriber = new Table("cc_subscription_signup", "COUNT(*)"); $clause_check_subscriber = ""; $result_check_subscriber = $table_check_subscriber->Get_list(DbConnect(), $clause_check_subscriber);
function Create_Customer($security_key, $instance, $id_callplan, $id_didgroup, $units, $accountnumber_len, $balance, $activated, $status, $simultaccess, $currency, $typepaid, $sip, $iax, $language, $voicemail_enabled, $country) { $arr_check = $this->Check_KeyInstance($security_key, $instance); if ($arr_check[0] == 'ERROR') { return $arr_check; } $id_group = $arr_check[0]; if (!is_numeric($id_callplan)) { return array("ERROR", "NO ID_CALLPLAN PROVIDED"); } if ($accountnumber_len < 2 || $accountnumber_len > 40) { return array("ERROR", "WRONG ACCOUNT NUMBER LENGTH - $accountnumber_len"); } if (strlen($country)==3) $country = strtoupper($country); else $country = 'USA'; if (strlen($language)==2) $language = strtolower($language); else $language = 'en'; if ($activated) $activated = 't'; else $activated = 'f'; $instance_realtime = new Realtime(); $FG_ADITION_SECOND_ADD_TABLE = "cc_card"; $FG_ADITION_SECOND_ADD_FIELDS = "username, useralias, credit, tariff, country, language, activated, simultaccess, currency, typepaid, uipass, id_group, id_didgroup, sip_buddy, iax_buddy"; if (DB_TYPE != "postgres") { $FG_ADITION_SECOND_ADD_FIELDS .= ",creationdate "; } $instance_sub_table = new Table($FG_ADITION_SECOND_ADD_TABLE, $FG_ADITION_SECOND_ADD_FIELDS); $sip_buddy = $iax_buddy = 0; if (isset ($sip) && $sip == 1) $sip_buddy = 1; if (isset ($iax) && $iax == 1) $iax_buddy = 1; //initialize refill parameter $description_refill = gettext("CREATION CARD REFILL"); $field_insert_refill = "credit, card_id, description"; $instance_refill_table = new Table("cc_logrefill", $field_insert_refill); $arr_account = array(); for ($k = 0; $k < $units; $k++) { $arr_card_alias = gen_card_with_alias("cc_card", 0, $accountnumber_len); $accountnumber = $arr_card_alias[0]; $useralias = $arr_card_alias[1]; if (!is_numeric($balance)) $balance = 0; $passui_secret = MDP_NUMERIC(10); $FG_ADITION_SECOND_ADD_VALUE = "'$accountnumber', '$useralias', '$balance', '$id_callplan', '$country', '$language', '$activated', ". " $simultaccess, '$currency', $typepaid, '$passui_secret', '$id_group', '$id_didgroup', $sip_buddy, $iax_buddy"; if (DB_TYPE != "postgres") $FG_ADITION_SECOND_ADD_VALUE .= ", now() "; $id_cc_card = $instance_sub_table->Add_table($this->DBHandle, $FG_ADITION_SECOND_ADD_VALUE, null, null, 'id'); if (!$id_cc_card) { return array(false, "ERROR CREATING ACCOUNT (".$k." Accounts created)"); } $arr_account[] = array ($accountnumber, $id_cc_card); // create refill for card if ($balance > 0) { $value_insert_refill = "'$balance', '$id_cc_card', '$description_refill' "; $instance_refill_table->Add_table($this->DBHandle, $value_insert_refill, null, null); } $instance_realtime -> insert_voip_config ($sip_buddy, $iax_buddy, $id_cc_card, $accountnumber, $passui_secret, $useralias, $language); } // Save Sip accounts to file $instance_realtime -> create_trunk_config_file ('sip'); // Save IAX accounts to file $instance_realtime -> create_trunk_config_file ('iax'); return array(serialize($arr_account), "Create_Customer SUCCESS - ".$k." ACCOUNTS CREATED"); }
Header("Location: " . $HD_Form->FG_GO_LINK_AFTER_ACTION); exit; } $form_action = "add"; $_POST['accountcode'] = $_POST['username'] = $_POST['name'] = $_POST['cardnumber'] = $cardnumber; $_POST['allow'] = FRIEND_ALLOW; $_POST['context'] = FRIEND_CONTEXT; $_POST['nat'] = FRIEND_NAT; $_POST['amaflags'] = FRIEND_AMAFLAGS; $_POST['regexten'] = $cardnumber; $_POST['id_cc_card'] = $id_cc_card; $_POST['callerid'] = $useralias; $_POST['qualify'] = FRIEND_QUALIFY; $_POST['host'] = FRIEND_HOST; $_POST['dtmfmode'] = FRIEND_DTMFMODE; $_POST['secret'] = MDP_NUMERIC(10); // for the getProcessed var $HD_Form->_vars = array_merge($_GET, $_POST); } /***********************************************************************************/ $HD_Form->FG_EDITION_LINK = $_SERVER['PHP_SELF'] . "?form_action=ask-edit&atmenu={$atmenu}&id=%#id&"; $HD_Form->FG_DELETION_LINK = $_SERVER['PHP_SELF'] . "?form_action=ask-delete&atmenu={$atmenu}&id=%#id&"; if ($id != "" || !is_null($id)) { $HD_Form->FG_EDITION_CLAUSE = str_replace("%id", "{$id}", $HD_Form->FG_EDITION_CLAUSE); } if (!isset($form_action)) { $form_action = "list"; } //ask-add if (!isset($action)) { $action = $form_action;
if (strlen($addparameter)>0){ $addparameter = str_replace("%cardnumber%", $A2B->cardnumber, $addparameter); $addparameter = str_replace("%dialingnumber%", $prefix.$destination, $addparameter); $dialstr .= $addparameter; } $channel= $dialstr; $exten = $inst_pn_member; $context = 'a2billing-conference-member';; $id_server_group = $A2B -> config["callback"]['id_server_group']; $callerid = $called_party; $priority = 1; $timeout = $A2B -> config["callback"]['timeout']*1000; $application = ''; $account = $A2B -> accountcode; $uniqueid = $callback_uniqueid.'-'.MDP_NUMERIC(5); $sep = ($A2B->config['global']['asterisk_version'] == "1_6" || $A2B->config['global']['asterisk_version'] == "1_8")?',':'|'; $variable = "CALLED=$inst_pn_member".$sep."CALLING=$inst_pn_member".$sep."CBID=$callback_uniqueid".$sep."TARIFF=$callback_tariff".$sep. "LEG=".$A2B -> accountcode.$sep."ACCOUNTCODE=".$A2B -> accountcode.$sep."ROOMNUMBER=".$room_number.$sep."RATECARD=".$RateEngine -> ratecard_obj[0][6]; $status = 'PENDING'; $server_ip = 'localhost'; $num_attempt = 0; if (is_numeric($A2B -> config["callback"]['sec_wait_before_callback']) && $A2B -> config["callback"]['sec_wait_before_callback']>=1) { $sec_wait_before_callback = $A2B -> config["callback"]['sec_wait_before_callback']; } else { $sec_wait_before_callback = 1; }
} // ----------------------------------- // CREATE CARDS // ----------------------------------- $instance_callplan = new Table("cc_tariffgroup", "id"); $result_callplan_id = $instance_callplan->Get_list($A2B->DBHandle, null, null, null, null, null, 1000, 1); $nb_db_callplan = sizeof($result_callplan_id); for ($i = 0; $i < $nb_customer; $i++) { if ($verbose > 1) { echo "CREATE CARD : {$i}\n"; } $id_callplan = $result_callplan_id[rand(0, $nb_db_callplan)]['id']; $array_card_generated = gen_card_with_alias("cc_card", 0, 10, $A2B->DBHandle); $card_number = $array_card_generated[0]; $card_alias = $array_card_generated[1]; $pass = MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5); $query = "INSERT INTO cc_card (username, useralias, uipass, id_group, credit, language, tariff, id_didgroup, status, simultaccess, currency, runservice, autorefill, initialbalance, typepaid, enableexpire, expirationdate, expiredays, voicemail_permitted, voicemail_activated, invoiceday, lastname, firstname, country, id_timezone, sip_buddy, iax_buddy, inuse, credit_notification, notify_email ) values" . "('1111', '11111', '1111', '1', '10', 'en', '1', '-1', '-1', '1', 'USD', '0', '0', '0', '0', '0', '2018-09-02 23:21:33', '0', '1', '0', '0', '11111', 'card', 'AFG', '1', '0', '0', '0', '-1', '0'); "; $instance_table->SQLExec($A2B->DBHandle, $query); } $query = "SELECT count(*) FROM cc_card;"; $nb_db_card = $instance_table->SQLExec($A2B->DBHandle, $query, 1); if ($verbose > 0) { echo "TOTAL DB CARDS : " . $nb_db_card[0][0] . " <br><br>\n\n"; } // Get a list of card $instance_card = new Table("cc_card", "id"); $result_card_id = $instance_card->Get_list($A2B->DBHandle, null, null, null, null, null, 1000, 1); $nb_db_card = sizeof($result_card_id); // ----------------------------------- // CALLERID // -----------------------------------
function MDP($chrs = LEN_CARDNUMBER) { return MDP_NUMERIC($chrs); }
<?php include("../lib/customer.defines.php"); $code = MDP_STRING(6); $_SESSION["captcha_code"] = $code; $seed = MDP_NUMERIC(6); $captcha_gd = 1; if ($captcha_gd) { include('captcha_gd.php'); } else { include('captcha_non_gd.php'); } $captcha = new captcha(); $captcha->execute($code, $seed);
// ----------------------------------- // CREATE CARDS // ----------------------------------- $instance_callplan = new Table("cc_tariffgroup","id"); $result_callplan_id = $instance_callplan-> Get_list($A2B -> DBHandle, null, null, null, null, null, 1000, 1); $nb_db_callplan = sizeof($result_callplan_id); for($i=0;$i<$nb_customer;$i++) { if($verbose > 1) echo "CREATE CARD : $i\n"; $id_callplan= $result_callplan_id [rand(0,$nb_db_callplan )] ['id']; $array_card_generated = gen_card_with_alias("cc_card", 0, 10, $A2B -> DBHandle); $card_number = $array_card_generated[0]; $card_alias = $array_card_generated[1]; $pass = MDP_NUMERIC(10); $query = "INSERT INTO cc_card (username, useralias, uipass, id_group, credit, language, tariff, id_didgroup, status, simultaccess, currency, runservice, autorefill, initialbalance, typepaid, enableexpire, expirationdate, expiredays, voicemail_permitted, voicemail_activated, invoiceday, lastname, firstname, country, id_timezone, sip_buddy, iax_buddy, inuse, credit_notification, notify_email ) values". "('1111', '11111', '1111', '1', '10', 'en', '1', '-1', '-1', '1', 'USD', '0', '0', '0', '0', '0', '2018-09-02 23:21:33', '0', '1', '0', '0', '11111', 'card', 'AFG', '1', '0', '0', '0', '-1', '0'); "; $instance_table -> SQLExec ($A2B -> DBHandle, $query); } $query = "SELECT count(*) FROM cc_card;"; $nb_db_card = $instance_table -> SQLExec ($A2B -> DBHandle, $query, 1); if($verbose > 0) echo "TOTAL DB CARDS : ".$nb_db_card[0][0]." <br><br>\n\n"; // Get a list of card $instance_card = new Table("cc_card","id"); $result_card_id = $instance_card -> Get_list($A2B -> DBHandle, null, null, null, null, null, 1000, 1); $nb_db_card = sizeof($result_card_id);
public function Request($security_key, $called, $calling, $callerid, $callback_time, $uniqueid, $accountnumber) { // $called : PHONE NUMBER PERSON CALLING // $calling : DESTINATION PHONE NUMBER global $A2B; /* $status = 'PENDING'; $server_ip = 'localhost'; $num_attempt = 0; $channel = 'SIP/'.$phone_number.'@mylittleIP'; $exten = $phone_number; $context = 'a2billing'; $priority = 1; //$timeout callerid $variable = "phonenumber=$phone_number|callerid=$callerid"; */ $phone_number = $called; $insert_id_callback = 'null'; if (strlen($uniqueid) == 0) { $uniqueid = MDP_STRING(5) . '-' . MDP_NUMERIC(5) . MDP_STRING(10) . MDP_NUMERIC(5); } $FG_regular[] = array("^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})\$", "(YYYY-MM-DD HH:MM:SS)"); // The wrapper variables for security // $security_key = API_SECURITY_KEY; write_log(LOG_CALLBACK, " Service_Callback( security_key={$security_key}, called={$called}, calling={$calling}, callerid={$callerid}, uniqueid={$uniqueid}, callback_time={$callback_time})"); $mysecurity_key = API_SECURITY_KEY; // CHECK CALLERID if (strlen($callerid) < 1) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT CALLERID AT LEAST 1 DIGIT "); return array($insert_id_callback, 'result=Error', " ERROR - FORMAT CALLERID AT LEAST 1 DIGIT "); } // CHECK PHONE_NUMBER if (strlen($phone_number) < 10) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT PHONENUMBER AT LEAST 10 DIGITS "); return array($insert_id_callback, 'result=Error', " ERROR - FORMAT PHONENUMBER AT LEAST 10 DIGITS "); } // CHECK DESTINATION NUMBER if (strlen($calling) < 2) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT DESTINATION NUMBER AT LEAST 2 DIGITS "); return array($insert_id_callback, 'result=Error', " ERROR - FORMAT DESTINATION NUMBER AT LEAST 2 DIGITS "); } // CHECK CALLBACK TIME if (strlen($callback_time) > 1 && !preg_match("/" . $FG_regular[0][0] . "/", $callback_time)) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR FORMAT CALLBACKTIME : " . $FG_regular[0][0]); return array($insert_id_callback, 'result=Error', " ERROR - FORMAT CALLBACKTIME : " . $FG_regular[0][0]); } // CHECK SECURITY KEY if (md5($mysecurity_key) !== $security_key || strlen($security_key) == 0) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " CODE_ERROR SECURITY_KEY"); sleep(2); return array($insert_id_callback, 'result=Error', ' KEY - BAD PARAMETER '); } $DBHandle = DbConnect(); if (!$DBHandle) { write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR CONNECT DB"); sleep(2); return array($insert_id_callback, 'result=Error', ' ERROR - CONNECT DB '); } $A2B->DBHandle = $DBHandle; $instance_table = new Table(); $A2B->set_instance_table($instance_table); $A2B->credit = 1000; $A2B->tariff = $A2B->config["callback"]['all_callback_tariff']; if (strlen($accountnumber) > 1) { // IF WE HAVE AN ACCOUNT NUMBER DEFINED $QUERY = "SELECT tariff, typepaid, credit, creditlimit FROM cc_card WHERE username='******'"; $card_data = $instance_table->SQLExec($DBHandle, $QUERY); if (is_array($card_data)) { $A2B->credit = $card_data[0]['credit']; if ($card_data[0]['typepaid'] == 1) { $A2B->credit = $A2B->credit + $card_data[0]['creditlimit']; } $A2B->tariff = $card_data[0]['tariff']; } //Else find accountnumber from caller's CallerID } else { $QUERY .= "SELECT cc_card.tariff, cc_card.typepaid, cc_card.credit, cc_card.creditlimit, cc_card.username" . " FROM cc_card " . " JOIN cc_callerid" . " ON cc_card.id=cc_callerid.id_cc_card " . " WHERE cc_callerid.cid='" . $phone_number . "'"; $QUERY .= "ORDER BY 1"; $card_data = $instance_table->SQLExec($DBHandle, $QUERY); if (!is_array($card_data)) { return array($insert_id_callback, 'result=Error', "CALLING'S PARTY CALLERID DOES NOT EXIST IN DATABASE"); } $accountnumber = $card_data[0]['username']; if (is_array($card_data)) { $A2B->credit = $card_data[0]['credit']; if ($card_data[0]['typepaid'] == 1) { $A2B->credit = $A2B->credit + $card_data[0]['creditlimit']; } $A2B->tariff = $card_data[0]['tariff']; } } $RateEngine = new RateEngine(); $A2B->extension = $A2B->dnid = $A2B->destination = $called; // LOOKUP RATE : FIND A RATE FOR THIS DESTINATION $resfindrate = $RateEngine->rate_engine_findrates($A2B, $A2B->destination, $A2B->tariff); if ($resfindrate != 0) { //$RateEngine -> debug_st = 1; $res_all_calcultimeout = $RateEngine->rate_engine_all_calcultimeout($A2B, $A2B->credit); if ($res_all_calcultimeout) { // MAKE THE CALL if ($RateEngine->ratecard_obj[0][34] != '-1') { $usetrunk = 34; $usetrunk_failover = 1; $RateEngine->usedtrunk = $RateEngine->ratecard_obj[0][34]; } else { $usetrunk = 29; $RateEngine->usedtrunk = $RateEngine->ratecard_obj[0][29]; $usetrunk_failover = 0; } $prefix = $RateEngine->ratecard_obj[0][$usetrunk + 1]; $tech = $RateEngine->ratecard_obj[0][$usetrunk + 2]; $ipaddress = $RateEngine->ratecard_obj[0][$usetrunk + 3]; $removeprefix = $RateEngine->ratecard_obj[0][$usetrunk + 4]; $timeout = $RateEngine->ratecard_obj[0]['timeout']; $failover_trunk = $RateEngine->ratecard_obj[0][40 + $usetrunk_failover]; $addparameter = $RateEngine->ratecard_obj[0][42 + $usetrunk_failover]; $destination = $A2B->destination; if (strncmp($destination, $removeprefix, strlen($removeprefix)) == 0) { $destination = substr($destination, strlen($removeprefix)); } $pos_dialingnumber = strpos($ipaddress, '%dialingnumber%'); $ipaddress = str_replace("%cardnumber%", $A2B->cardnumber, $ipaddress); $ipaddress = str_replace("%dialingnumber%", $prefix . $destination, $ipaddress); $dialparams = ''; if ($pos_dialingnumber !== false) { $dialstr = "{$tech}/{$ipaddress}" . $dialparams; } else { if ($A2B->agiconfig['switchdialcommand'] == 1) { $dialstr = "{$tech}/{$prefix}{$destination}@{$ipaddress}" . $dialparams; } else { $dialstr = "{$tech}/{$ipaddress}/{$prefix}{$destination}" . $dialparams; } } //ADDITIONAL PARAMETER %dialingnumber%, %cardnumber% if (strlen($addparameter) > 0) { $addparameter = str_replace("%cardnumber%", $A2B->cardnumber, $addparameter); $addparameter = str_replace("%dialingnumber%", $prefix . $destination, $addparameter); $dialstr .= $addparameter; } $channel = $dialstr; $exten = $calling; $context = $A2B->config["callback"]['context_callback']; $id_server_group = $A2B->config["callback"]['id_server_group']; $priority = 1; $timeout = $A2B->config["callback"]['timeout'] * 1000; $application = ''; $status = 'PENDING'; $server_ip = 'localhost'; $num_attempt = 0; $sep = $A2B->config['global']['asterisk_version'] == "1_2" || $A2B->config['global']['asterisk_version'] == "1_4" ? '|' : ','; $variable = "CALLED={$called}" . $sep . "CALLING={$calling}" . $sep . "CBID={$uniqueid}" . $sep . "TARIFF=" . $A2B->tariff; if (is_numeric($A2B->config["callback"]['sec_wait_before_callback']) && $A2B->config["callback"]['sec_wait_before_callback'] >= 1) { $sec_wait_before_callback = $A2B->config["callback"]['sec_wait_before_callback']; } else { $sec_wait_before_callback = 1; } // LIST FIELDS TO INSERT CALLBACK REQUEST $QUERY_FIELS = 'uniqueid, status, server_ip, num_attempt, channel, exten, context, priority, variable, id_server_group, callback_time, account, callerid, timeout'; // DEFINE THE CORRECT VALUE FOR THE INSERT if (strlen($callback_time) > 1) { $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', '{$callback_time}', '{$accountnumber}', '{$callerid}', '30000'"; } else { $QUERY_VALUES = "'{$uniqueid}', '{$status}', '{$server_ip}', '{$num_attempt}', '{$channel}', '{$exten}', '{$context}', '{$priority}', '{$variable}', '{$id_server_group}', ADDDATE( CURRENT_TIMESTAMP, INTERVAL {$sec_wait_before_callback} SECOND ), '{$accountnumber}', '{$callerid}', '30000'"; } $insert_id_callback = $instance_table->Add_table($DBHandle, $QUERY_VALUES, $QUERY_FIELS, 'cc_callback_spool', 'id'); if (!$insert_id_callback) { // FAIL INSERT write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " ERROR INSERT -> \n QUERY= {$QUERY_FIELS} :: {$QUERY_VALUES}"); sleep(2); return array($insert_id_callback, 'result=Error', ' ERROR - INSERT INTO DB'); } // SUCCEED INSERT write_log(LOG_CALLBACK, basename(__FILE__) . ' line:' . __LINE__ . "[" . date("Y/m/d G:i:s", mktime()) . "] " . " CALLBACK INSERTED -> \n QUERY= {$QUERY_FIELS} :: {$QUERY_VALUES}"); return array($insert_id_callback, 'result=Success', " Success - Callback request has been accepted "); } else { $error_msg = 'Error : You don t have enough credit to call you back !!!'; } } else { $error_msg = 'Error : There is no route to call back your phonenumber !!!'; } // CALLBACK FAIL write_log(LOG_CALLBACK, "error_msg = {$error_msg}"); return array($insert_id_callback, 'result=Error', " ERROR - {$error_msg}"); }