⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a2billingi.php

📁 asterisk的计费修改 可以语音计费 可以做IP卡的发卡
💻 PHP
📖 第 1 页 / 共 5 页
字号:
			$A2B->agiconfig['use_dnid']=0;		}//END FOR			}else{		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[AUTHENTICATION FAILED (cia_res:".$cia_res.")]");	}		/****************  SAY GOODBYE   ***************/	if ($A2B->agiconfig['say_goodbye']==1) $agi-> stream_file('prepaid-final', '#');				}elseif($mode == 'standard'){	if ($A2B->agiconfig['answer_call']==1){		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[ANSWER CALL]');		$agi->answer();		$status_channel=6;	}else{		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[NO ANSWER CALL]');		$status_channel=4;	}		$A2B -> play_menulanguage ($agi);		if (strlen($A2B->dnid) <= 4 && is_numeric($A2B->dnid)){//		$agi-> verbose("test to short");		$agi-> answer();		$A2B->call_did_to_ivr($agi, $RateEngine, $A2B, '', '', '' ,$A2B->dnid);/*			$QUERY ="SELECT cc_card.id, ivr_exten_destination, ivr_pstn_voip_sounds FROM cc_card, cc_custom_ivr WHERE cc_card_id = cc_card.id and cc_card.username ='$A2B->accountcode' and ivr_exten_key = '$A2B->dnid'";			$result = $A2B -> instance_table -> SQLExec ($A2B->DBHandle, $QUERY);		if (is_array($result)) {			//$agi->verbose($result);			$agi->verbose("Short extensions is ! : $A2B->dnid ");			$agi->verbose("Found a Short extensions for this Caller ! : $A2B->accountcode ");			$exten_type = $result[0][2];			switch ($exten_type){				case SIP:					$agi->verbose("Destatinos is SIP: ".$result[0][1]);					$sort_dial_dst_sip = $result[0][1];					continue;				case IAX:					$agi->verbose("Destatinos is IAX2: ".$result[0][1]);					$sort_dial_dst_iax = $result[0][1];					continue;				case PSTN:					$agi->verbose("Destatinos is PSTN: ".$result[0][1]);					$sort_dial_dst_pstn = $result[0][1];					continue;				default:				break;			}			$dialparams = $A2B->agiconfig['dialcommand_param_sipiax_friend'];			if ($sort_dial_dst_sip) {				$agi->answer();			$agi->stream_file("prepaid-short-intro");				$dialstr = "SIP/".$sort_dial_dst_sip."|20|".$dialparams;			$myres = $agi->exec("DIAL $dialstr");			$agi->hangup();			exit();			}elseif ($sort_dial_dst_iax){				$agi->answer();			$agi->stream_file("prepaid-short-intro");				$dialstr = "IAX2/".$sort_dial_dst_iax."|20|".$dialparams;			$myres = $agi->exec("DIAL $dialstr");			$agi->hangup();			exit();				}			$agi->answer();			$agi->stream_file("prepaid-short-intro");		}else {			$agi->verbose("Not found Short extensions for this Caller, Hangup Now!");			$agi->answer();			sleep(2);			$agi->stream_file("prepaid-short-dest-unreachable");			$agi->hangup();			exit();		}			*/}		/*************************   PLAY INTRO MESSAGE   ************************/	if (strlen($A2B->agiconfig['intro_prompt'])>0){		$agi-> stream_file($A2B->agiconfig['intro_prompt'], '#');	}		/* WE START ;) */		$cia_res = $A2B -> callingcard_ivr_authenticate($agi);	$A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[TRY : callingcard_ivr_authenticate]");	// GOOD AUTHENTICATION AND WE HAVE CREDIT TO GO AHEAD	if ($cia_res==0){				// RE-SET THE CALLERID		$A2B->callingcard_auto_setcallerid($agi);		//$A2B->callingcard_acct_start_inuse($agi,1);		for ($i=0;$i< $A2B->agiconfig['number_try'] ;$i++){						$RateEngine->Reinit();			$A2B-> Reinit();						// RETRIEVE THE CHANNEL STATUS AND LOG : STATUS - CREIT - MIN_CREDIT_2CALL 			$stat_channel = $agi->channel_status($A2B-> channel);			$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[CHANNEL STATUS : '.$stat_channel["result"].' = '.$stat_channel["data"].']');			$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[CREDIT : ".$A2B-> credit."][CREDIT MIN_CREDIT_2CALL : ".$A2B->agiconfig['min_credit_2call']."]");						// CHECK IF THE CHANNEL IS UP			//if ($stat_channel["status"]!= "6" && $stat_channel["status"]!= "1"){				if (($A2B->agiconfig['answer_call']==1) && ($stat_channel["result"]!=$status_channel) && ($A2B -> CC_TESTING!=1)){				if ($A2B->set_inuse==1) $A2B->callingcard_acct_start_inuse($agi,0);				$A2B -> write_log("[STOP - EXIT]", 0);				exit();			}						// CREATE A DIFFERENT UNIQUEID FOR EACH TRY			if ($i>0){				$A2B-> uniqueid=$A2B-> uniqueid+ 1000000000 ;			}									if( $A2B->credit < $A2B->agiconfig['min_credit_2call'] && $A2B -> typepaid==0 && $A2B->agiconfig['jump_voucher_if_min_credit']==1) {								$A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[NOTENOUGHCREDIT - Refill with vouchert]");				$vou_res = $A2B -> refill_card_with_voucher($agi,2);				if ($vou_res==1){					$A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[ADDED CREDIT - refill_card_withvoucher Success] ");				} else {					$A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[NOTENOUGHCREDIT - refill_card_withvoucher fail] ");				}			}						if( $A2B->credit < $A2B->agiconfig['min_credit_2call'] && $A2B -> typepaid==0) {								// SAY TO THE CALLER THAT IT DEOSNT HAVE ENOUGH CREDIT TO MAKE A CALL											$prompt = "prepaid-no-enough-credit-stop";				$agi-> stream_file($prompt, '#');				$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[STOP STREAM FILE $prompt]");												if (($A2B->agiconfig['notenoughcredit_cardnumber']==1) && (($i+1)< $A2B->agiconfig['number_try'])){										if ($A2B->set_inuse==1) $A2B->callingcard_acct_start_inuse($agi,0);										$A2B->agiconfig['cid_enable']=0;					$A2B->agiconfig['use_dnid']=0;//					$A2B->agiconfig['say_balance_after_auth']=0;					$A2B->agiconfig['cid_auto_assign_card_to_cid']=0;					$A2B->accountcode='';					$A2B->username='';					$A2B-> ask_other_cardnumber	= 1;										$cia_res = $A2B -> callingcard_ivr_authenticate($agi);					$A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[NOTENOUGHCREDIT_CARDNUMBER - TRY : callingcard_ivr_authenticate]");					if ($cia_res!=0) break;										$A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[NOTENOUGHCREDIT_CARDNUMBER - callingcard_acct_start_inuse]");					$A2B->callingcard_acct_start_inuse($agi,1);					continue;									}else{										$send_reminder = 1;					$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[SET MAIL REMINDER - NOT ENOUGH CREDIT]");					break;				}			}						if ($agi->request['agi_extension']=='s'){				$A2B->dnid = $agi->request['agi_dnid'];			}else{				$A2B->dnid = $agi->request['agi_extension'];			}						if ($A2B->agiconfig['ivr_voucher']==1){				$res_dtmf = $agi->get_data('prepaid-refill_card_with_voucher', 5000, 1);				$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "RES REFILL CARD VOUCHER DTMF : ".$res_dtmf ["result"]);				$A2B-> ivr_voucher = $res_dtmf ["result"];				if ((isset($A2B-> ivr_voucher)) && ($A2B-> ivr_voucher == $A2B->agiconfig['ivr_voucher_prefixe']))				{						$vou_res = $A2B->refill_card_with_voucher($agi, $i);				//	if ($vou_res==1)$A2B->fct_say_balance ($agi, $A2B->add_credit, 1);				}			}			if ($A2B->agiconfig['sip_iax_friends']==1){							if ($A2B->agiconfig['sip_iax_pstn_direct_call']==1){						if ($A2B->agiconfig['use_dnid']==1 && !in_array ($A2B->dnid, $A2B->agiconfig['no_auth_dnid']) && strlen($A2B->dnid)>2 && $i==0 ){									$A2B -> destination = $A2B->dnid;											}else{							$prompt_enter_dest = $A2B->agiconfig['file_conf_enter_destination'];						$res_dtmf = $agi->get_data($prompt_enter_dest, 4000, 20);						$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "RES sip_iax_pstndirect_call DTMF : ".$res_dtmf ["result"]);						$A2B-> destination = $res_dtmf ["result"];					}										if ( (strlen($A2B-> destination)>0) && (strlen($A2B->agiconfig['sip_iax_pstn_direct_call_prefix'])>0) && (strncmp($A2B->agiconfig['sip_iax_pstn_direct_call_prefix'], $A2B-> destination,strlen($A2B->agiconfig['sip_iax_pstn_direct_call_prefix']))==0) ){						$A2B-> dnid = $A2B-> destination;						$A2B-> sip_iax_buddy = $A2B->agiconfig['sip_iax_pstn_direct_call_prefix'];						$A2B-> agiconfig['use_dnid'] = 1;						$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "SIP 1. IAX - dnid : ".$A2B->dnid." - ".strlen($A2B->agiconfig['sip_iax_pstn_direct_call_prefix']));						$A2B->dnid = substr($A2B->dnid,strlen($A2B->agiconfig['sip_iax_pstn_direct_call_prefix']));						$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "SIP 2. IAX - dnid : ".$A2B->dnid);					}elseif (strlen($A2B->destination)>0){						$A2B->dnid = $A2B->destination;						$A2B->agiconfig['use_dnid'] = 1;						$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "TRUNK - dnid : ".$A2B->dnid." (".$A2B->agiconfig['use_dnid'].")");					}				}else{								//$res_dtmf = $agi->agi_exec("GET DATA prepaid-sipiax-press9 2000 1");					$res_dtmf = $agi->get_data('prepaid-sipiax-press9', 2000, 1);					$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "RES SIP_IAX_FRIEND DTMF : ".$res_dtmf ["result"]);										$A2B-> sip_iax_buddy = $res_dtmf ["result"];				}			}									if ( isset($A2B-> sip_iax_buddy) && ($A2B-> sip_iax_buddy == $A2B->agiconfig['sip_iax_pstn_direct_call_prefix'])) {								$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, 'CALL SIP_IAX_BUDDY');				$cia_res = $A2B-> call_sip_iax_buddy($agi, $RateEngine,$i);							}else{				if ($A2B-> callingcard_ivr_authorize($agi, $RateEngine, $i,$sort_dial_dst_pstn)==1){					// PERFORM THE CALL							if ($sort_dial_dst_pstn) {							$A2B -> destination = $sort_dial_dst_pstn;						}else{						$A2B -> destination = $A2B->dnid;						}					$result_callperf = $RateEngine->rate_engine_performcall ($agi, $A2B-> destination, $A2B);										if (!$result_callperf) {						$prompt="prepaid-dest-unreachable";						//$agi->agi_exec("STREAM FILE $prompt #");						$agi-> stream_file($prompt, '#');					}					// INSERT CDR  & UPDATE SYSTEM					$RateEngine->rate_engine_updatesystem($A2B, $agi, $A2B-> destination);										if ($A2B->agiconfig['say_balance_after_call']==1){								$A2B-> fct_say_balance ($agi, $A2B-> credit);					}					$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[a2billing account stop]');				}			}			$A2B->agiconfig['use_dnid']=0;		}//END FOR			}else{		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[AUTHENTICATION FAILED (cia_res:".$cia_res.")]");	}		/****************  SAY GOODBYE   ***************/	if ($A2B->agiconfig['say_goodbye']==1) $agi-> stream_file('prepaid-final', '#');// MODE DID}elseif ($mode == 'did'){	$A2B->agiconfig['debug']=0;			if ($A2B->agiconfig['answer_call']==1){		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[ANSWER CALL]');		$agi->answer();	}else{		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[NO ANSWER CALL]');	}	// TODO	// CRONT TO CHARGE MONTLY		$RateEngine -> Reinit();	$A2B -> Reinit();		$mydnid = $agi->request['agi_extension'];	if ($A2B -> CC_TESTING) $mydnid = '11111111';		if (strlen($mydnid) > 0){		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[DID CALL - [CallerID=".$A2B->CallerID."]:[DID=".$mydnid."]");				$QUERY =  "SELECT cc_did.id, cc_did_destination.id, billingtype, tariff, destination,  voip_call, username,cc_card.id".			" FROM cc_did, cc_did_destination,  cc_card ".			" WHERE id_cc_did=cc_did.id and cc_card.id=id_cc_card and cc_did_destination.activated=1  and cc_did.activated=1 and did='$mydnid' ".			" AND cc_did.startingdate<= CURRENT_TIMESTAMP AND (cc_did.expirationdate > CURRENT_TIMESTAMP OR cc_did.expirationdate IS NULL OR ".			" cc_did.expirationdate = '0000-00-00 00:00:00') ORDER BY priority ASC";				$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, $QUERY);		$result = $A2B -> instance_table -> SQLExec ($A2B->DBHandle, $QUERY);		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, $result);				if (is_array($result)){		foreach ($result as $result_list){		$user_id = $result_list[7];		break;		}	$QUERY = "SELECT welcome, ad, ad1 FROM cc_custom_sounds WHERE cc_card_id='$user_id'";	$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, $QUERY);	$ivr_result = $A2B -> instance_table -> SQLExec ($A2B->DBHandle, $QUERY);	$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, $ivr_result);	//$agi-> verbose($result);	//$agi-> verbose($ivr_result);	if ($ivr_result){					$agi->answer();			$A2B ->call_did_to_ivr($agi, $RateEngine, $A2B, $result, $ivr_result, $user_id);			if ($A2B->set_inuse==1) $A2B -> callingcard_acct_start_inuse($agi,0);	}else{			$A2B -> call_did($agi, $RateEngine, $result);			if ($A2B->set_inuse==1) $A2B -> callingcard_acct_start_inuse($agi,0);		}					}	}	// MOVE VOUCHER TO LET CUSTOMER ONLY REFILL}elseif ($mode == 'voucher'){	$A2B->agiconfig['say_balance_after_auth']=1;	if ($A2B->agiconfig['answer_call']==1){		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[ANSWER CALL]');		$agi->answer();		$status_channel=6;	}else{		$A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[NO ANSWER CALL]');		$status_channel=4;	}		$A2B -> play_menulanguage ($agi);	/*************************   PLAY INTRO MESSAGE   ************************/	if (strlen($A2B->agiconfig['intro_prompt'])>0) 		$agi-> stream_file($A2B->agiconfig['intro_prompt'], '#');					$cia_res = $A2B -> callingcard_ivr_authenticate($agi);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -