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

📄 卡认证判断.sc

📁 一个充值卡认证的程序
💻 SC
📖 第 1 页 / 共 2 页
字号:
#function FuncVerifyUser	//用户认证函数
#function FuncOnStopWatch	//达到通话时间处理函数
#function main	//主函数

#iniparam int @InfoDBA //业务数据库站点号(配置参数常量的关键字)
#iniparam string @PhoneNum
#iniparam int @PWDCount //卡认证的输入次数
#iniparam int @CardLen //卡认证的卡号长度
#iniparam int @PWDLen //卡认证的密码长度
#iniparam string @FeeFile //付费判断文件和路径
#declare IR IfCardUser
#declare IR FeeLimited
#declare SR LocalAreaCode	//本地ips区号

main
{
:stWait(各种业务的开始状态)
	Connect -> stAllocResource
:stAllocResource
	[SetDTMF "?"]           //(设置可响应的DTMF按键)
      “?”表示所有按键均可响应

      “D”表示0~9的数字按键均可响应

      “d”表示1~9的数字按键均可响应

       其它的字符表示相对应的按键可响应

	[Assign SR29,".\vox\"]             //将.\vox\赋值于SR29
	[OnStopWatch &FuncOnStopWatch]           //强行终止FuncOnStopWatch进程
	[AllocMediaDevice 1]		//Vox启动
	AllocResourceOK -> stGetAreaCode	//AllocResourceOK —— 成功
	AllocResourceFail -> stExit		//AllocResourceFail——失败
:stGetAreaCode	//获取本地ips区号
	[Assign SR0,"select ltrim(to_char(areacode,'0000')) from tbl_areacode"]
	[ExecSQL SR0]		//在一个运行流程中执行一个新的流程SR0	
	Passed -> stVerifyUser
	Failed -> stSystemError
	TimeOut -> stSystemError
//★★用户认证begin
:stVerifyUser
	[Assign LocalAreaCode,FD0]
	[CallFunc &FuncVerifyUser]	//调用FuncVerifyUser函数
	Returned(0) -> stSwitchDBA	//用户认证成功  Returned(值)---------值为子函数所返回的值
	Returned -> stExit	//用户认证失败  不返回值则进入末状态
//★★用户认证end

//★★切换业务数据库begin
:stSwitchDBA
	[SwitchDBA @InfoDBA]		//联网到InfoDBA的数据
	Passed -> stWelcome
	Failed -> stSystemError		//Failed --- 失败(与新的DBA模块未能连上,检查通讯配置)
	TimeOut -> stSystemError
:stSystemError
	[Assign SR1,SR29]		//将.\vox\赋值于SR1中
	[StrCat SR1, "v030.vox"]	//将v030.vox和.\vox\相连存入SR1
	[PlayFile  SR1]	//对不起,系统忙,暂时无法为您服务,请稍候继续使用本业务  //PlayFile为播放语音文件
	StopPlayBack -> stExit		// StopPlayBack -------正常放音结束
 	DialTerminate -> stExit		//DialTerminate ------放音被按键打断
	Failed -> stExit   		//Failed -------------失败(可能因为文件不存在)
//★★切换业务数据库end

:stWelcome
//★★以下内容为SP编写的IVR内容,当开始计费开始的时候执行stBillBegin动作

//★★...............................
//★★.........     流     ..........
//★★.........     程     ..........
//★★.........     内     ..........
//★★.........     容     ..........
//★★...............................


	[Assign IR0,0]
	->stBillBegin
:stBillBegin
	[Assign $ServiceItemNo,"11699999"]	//SP根据自己的业务号码来改变$ServiceItemNo的值 11699999只是一个例子
	[BillBegin 1,0,$ServiceItemNo]		//启动计费。BillBegin  I1  I2  S3(I1为计费方式( 0:不计费;1:按主叫;2:按被叫;3:按原主叫;4:按账号;5:按计费号码;6:按原被叫);
I2是否计算可打时长(按帐号计费时用),0:否;1:是,如果需计算可服务时长,结果存放在IR0中(-1表示没有限制);S3为服务项目编码, 一般情况下应该为系统变量$ServiceItemNo。
	Verify(0)->stStartFlow		//事件Verify -- 检验返回事件:
 	Verify(值)其中值

   	0 ——有效用户

   	1 ——无效用户(帐号余额不够)

  	 2 ——该账号没有登记此项服务
	
   	-1——其它情况
 	Verify(108) -> stNotEnoughMoney	//余额不足
	Verify(145) -> stNotEnoughMoney	//余额达到限额
	Verify(153) -> stUserCheckCard	//预付费封顶
	Verify -> stSystemError 
	Failed -> stSystemError
:stNotEnoughMoney
	[SetDTMF "?"]
	[Assign SR1,SR29]
	[StrCat SR1, "v022.vox"]
	[PlayFile SR1]	//卡号余额不足,谢谢使用,再见。
	StopPlayBack  -> stExit
	DialTerminate -> stExit
	Failed        -> stExit
:stUserCheckCard
	[Assign FeeLimited,100]
	[CallFunc &FuncVerifyUser]
	Returned(0)->stBillBegin	//注:当预付费封顶的时候,需走卡计费,如果认证成功,要再次计费
	Returned -> stExit
:stStartFlow
//★★以下内容为SP编写的IVR内容,当开始计费结束的时候执行stBillEnd动作


//★★...............................
//★★.........     流     ..........
//★★.........     程     ..........
//★★.........     内     ..........
//★★.........     容     ..........
//★★...............................


	[Assign IR0,0]
	-> stBillEnd
:stBillEnd
	[BillEnd]
	Verify(0) ->stOtherStartFlow
	Verify ->stSystemError
:stOtherStartFlow
//★★以下内容为SP编写的IVR内容,当计费结束成功的时候根据SP业务需求来是否其它分支或挂机

//★★...............................
//★★.........     流     ..........
//★★.........     程     ..........
//★★.........     内     ..........
//★★.........     容     ..........
//★★...............................

	[Assign IR0,0]
	->stExit
:stExit
	[RETURN 0]
}


FuncVerifyUser
{
//★★绑定判断:$AccountID为空、$CallerID为主叫号码,VerifyUser返回值:Verify(0)----号码绑定;
//★★		Verify(149)----号码未绑定;Verify----例外;Failed----失败
//★★用户认证:$AccountID为卡号、$AccountKind为卡的类型、$Password为卡的密码,VerifyUser返回值:
//★★		Verify(0)----正常、Verify(108)----卡余额不足、Verify(110)----卡/用户不存在、
//★★		Verify(114)----卡/用户密码错误、Verify(118)----消息包异常、Verify(141)----卡号未激活、
//★★		Verify(142)----卡正在使用、Verify(143)----卡过有效期、Verify(144)----卡上黑名单、
//★★		Verify(145)----卡余额达到限额、Verify(146)----卡不允许使用、Verify(147)----系统故障
//★★		Verify(148)----此业务不存在、Verify(149)----号码未绑定、Verify(150)----号码规整错误
//★★		Verify(151)----禁开号码、Verify(152)----预付费、Verify(153)----达到限费
//★★		Verify----意外;Failed----失败
:stWait
	[Assign IR22,1]
	[Assign SR10,$CallerID]
	[Assign IR23,0]	//判断重输卡号次数
	[Assign SR29,".\vox\"]
	-> stRedirectInd
:stRedirectInd
	[Equal $RedirectInd,1]		//比较整数I1与I2是否相等,Passed------- 成立(两个参数相等)Failed------- 不成立(两个参数不相等)
	Passed -> stExit
	Failed -> stFeeLimited
:stFeeLimited
	[Equal  FeeLimited,100]
	Passed ->stUserCheckCard		//是从业务限费返回的,需进行预付费验证
	Failed ->stVerifyCaller               //否则就是呼叫开始时的主叫认证

:stVerifyCaller
	[Assign $AccountKind,0]		//$ACCOUNTKIND  在用户认证后该值是用户的帐号种类
	[Assign $AccountID,""]		//在用户认证后该值是用户的帐号编码
	[Assign $Password,""]
	[VerifyUser $AccountID,-1]	//IC Card 的认证
	Verify(0)->stNotCard                //后付费
	Verify(150) ->stVerifyPhoneCard     //号码规整错误
	Verify(151) ->stVerifyPhoneCard     //禁开号码
	Verify(152) ->stVerifyPhoneCard     //预付费
	Verify ->stSystemError
	Failed ->stSystemError
:stSystemError
	[Assign SR1,SR29]
	[StrCat SR1, "v030.vox"]
	[PlayFile  SR1]	//对不起,系统忙,暂时无法为您服务,请稍候继续使用本业务
	StopPlayBack -> stExit
	DialTerminate -> stExit
	Failed -> stExit
//★★用户从后付费走到预付费begin//////////////////////////////
:stUserCheckCard
	[ClearDTMF]		//清除DTMF按键
	[SetDTMF "?"]
	[Assign SR1,SR29] 
	[StrCat SR1, "v029.vox"]
	[PlayFile  SR1]	//对不起,你的号码已经达到本月信息费的限额,请改用卡消费,请选择卡的类型:九洲通卡请按1,网通橙卡请按2;申请九洲通卡请按3
	StopPlayBack -> stUserCardType
	DialTerminate -> stUserCardType
	Failed -> stUserCardType
:stUserCardType
	[ Digit 5 ]
	StopDigits('1') -> stPhoneCardType   //正常收号结束,值为接收到的键字符(要用单引号括起)
	StopDigits('2') -> stPhoneCardType
	StopDigits('3') -> stCardApp
	StopDigits -> stUserCheckCard
	TimeOut -> stExit
//★★用户从后付费走到预付费end////////////////////////////////

//★★号码绑定判断:是绑定则正常退出,否则进入卡认证
:stVerifyPhoneCard
	[Assign $CallerID,SR10]
	[ClearDTMF]
	[SetDTMF "?"]
	[Assign SR1,SR29]
	[StrCat SR1, "v011.vox"]
	[PlayFile  SR1]	//请选择卡的类型:九洲通卡请按1,网通橙卡请按2;申请九洲通卡请按3
	StopPlayBack -> stPhoneInputCardType
	DialTerminate -> stPhoneInputCardType
	Failed -> stPhoneInputCardType
:stPhoneInputCardType
	[ Digit 5 ]
	StopDigits('1') -> stPhoneCardType
	StopDigits('2') -> stPhoneCardType
	StopDigits('3') -> stCardApp
	StopDigits -> stVerifyPhoneCard
	TimeOut -> stExit
:stPhoneCardType
	[SToI SR0]		//把字串S1转换为整数,存于IR0
	[Assign $AccountKind,IR0]
	-> stVerifyPhone
:stCardApp
	[DeallocMediaDevice 1]		//释放已申请的媒体设备。如果没有已分配的设备,将会忽略此请求。
	[Assign $SMTitle,"REQUESTDATA"]
	[Exec 3]
	Passed -> stExit
	Failed -> stExit
:stVerifyPhone
	[Assign $AccountID,""]
	[VerifyUser $AccountID,-1] //认证卡号为空表示号码绑定判断
	Verify(0) -> stBack	//号码绑定
	Verify(108) -> stPhoneNotMoney	//卡余额不足

⌨️ 快捷键说明

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