login | register
Sat 22 of Nov, 2008 [07:16 UTC]

voip-info.org

Credit Card Dialplan for Asterisk

Created by: schapman,Last modification on Fri 09 of May, 2008 [01:18 UTC]
This is an attempt to get a dialplan working to authenticate credit cards. Using AGI's and dialplans mixed.
I will be updating as I add functionality and as I make the AGI files. If anyone is interested or wants to
give input please feel free. I plan on eventually implementing a SRTP for secure transmission of
credit card numbers. This is just the beginnings.

All AGI's will be written in Python. I have already written code that will authenticate on several different
CC processors using Python and I will be adding that into the runcc.agi as I get it built.

Here is what I have for the dial plan so far.

(PLEASE NOTE THAT THIS DIALPLAN THUS FAR IS TOTALLY UNTESTED)

[ccmain]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,2,Set(TIMEOUT(response)=25
exten => s,3,Wait(2)
exten => s,4,Background(ccintro)
exten => s,5,Goto(getacct,s,1)
exten => s,6,Goto(getamt,s,1)
exten => s,7,Goto(getcc,s,1)
exten => s,8,Goto(getexpir,s,1)
exten => s,9,Goto(getcvv2,s,1)
exten => s,10,Background(runcardnow)
exten => s,11,WaitExten()
exten => 0,1,Goto(rs-CANTRAN,1)
exten => 1,1,Goto(rs-${CCTYPE},1)
exten => 2,1,Goto(rs-CANTRAN,1}

exten => rs-VISA,1,AGI(runcc.agi|${CCTYPE}|${CCNUM}|${CCEXP}|${CVV2}|${CCAMT}|${ACCT})
exten => rs-VISA,2,GOTO(rs-${APPRESULT},1)

exten => rs-MC,1,AGI(runcc.agi|${CCTYPE}|${CCNUM}|${CCEXP}|${CVV2}|${CCAMT}|${ACCT})
exten => rs-MC,2,GOTO(rs-${APPRESULT},1)

exten => rs-AMEX,1,AGI(runcc.agi|${CCTYPE}|${CCNUM}|${CCEXP}|${CVV2}|${CCAMT}|${ACCT})
exten => rs-AMEX,2,GOTO(rs-${APPRESULT},1)

exten => rs-DACC,1,Playback(dontacceptcard)
exten => rs-DACC,2,Goto(rs-TRYAGAIN,1)

exten => rs-BADCC,1,Playback(badccnumber)
exten => rs-BADCC,2,Goto(rs-TRYAGAIN,1)

exten => rs-NOACCT,1,Playback(acctnotfound&tryagain)
exten => rs-NOACCT,2,Goto(s,5)

exten => rs-CANTRAN,1,Playback(thankyou)
exten => rs-CANTRAN,2,Hangup()

exten => rs-TRYAGAIN,1,AGI(totryagain.agi)
exten => rs-TRYAGAIN,2,GotoIf($[${TRYAGAIN}]?3:4)
exten => rs-TRYAGAIN,3,Goto(s,7)
exten => rs-TRYAGAIN,4,Goto(rs-CANTRAN,1)

exten => rs-APPROVED,1,Playback(appoved&yourauthcodeis)
exten => rs-APPROVED,2,Say(Digits(${AUTHCODE}))
exten => rs-APPROVED,3,Playback(again&yourauthcodeis)
exten => rs-APPROVED,4,Say(Digits(${AUTHCODE}))
exten => rs-APPROVED,5,Playback(thankyou)
exten => rs-APPROVED,6,Hangup()

exten => rs-DECLINED,1,Playback(declined)
exten => rs-DECLINED,2,Goto(rs-TRYAGAIN,1)

[getacct]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,2,Set(TIMEOUT(response)=25
exten => s,3,Wait(2)
exten => s,4,Background(enteracctnum)
exten => s,5,WaitExten()
exetn => 0,1,Goto(ccmain,rs-CANTRAN,1)
exten => _X.,1,AGI(verifyacct.agi|${EXTEN})
exten => _X.,2,Goto(ccmain,s,6)

[getamt]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,2,Set(TIMEOUT(response)=25
exten => s,3,Wait(2)
exten => s,4,Background(enteramt)
exten => s,5,WaitExten()
exetn => 0,1,Goto(ccmain,rs-CANTRAN,1)
exten => _X.,1,AGI(verifymoney.agi|${EXTEN})
exten => _X.,2,Goto(ccmain,s,7)

[getcc]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,2,Set(TIMEOUT(response)=25
exten => s,3,Wait(2)
exten => s,4,Background(entercc)
exten => s,5,WaitExten()
exetn => 0,1,Goto(ccmain,rs-CANTRAN,1)
exten => _X.,1,AGI(verifycc.agi|${EXTEN})
exten => _X.,2,Goto(ccmain,s,8)

[getexpir]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,2,Set(TIMEOUT(response)=25
exten => s,3,Wait(2)
exten => s,4,Background(enterexpir)
exten => s,5,WaitExten()
exetn => 0,1,Goto(ccmain,rs-CANTRAN,1)
exten => _X.,1,AGI(verifyexp.agi|${EXTEN})
exten => _X.,2,Goto(ccmain,s,9)

[getcvv2]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,2,Set(TIMEOUT(response)=25
exten => s,3,Wait(2)
exten => s,4,Background(entercvv2)
exten => s,5,WaitExten()
exetn => 0,1,Goto(ccmain,rs-CANTRAN,1)
exten => _X.,1,AGI(verifycvv2.agi|${EXTEN}|${CCTYPE})
exten => _X.,2,Goto(ccmain,s,10)


1718 Views

Comments