|
|
@ -2,18 +2,17 @@ package C4::SMS; |
|
|
|
#Written by tgarip@neu.edu.tr for SMS message sending and other SMS related services |
|
|
|
|
|
|
|
use strict; |
|
|
|
use warnings; |
|
|
|
|
|
|
|
use LWP::UserAgent; |
|
|
|
use C4::Context; |
|
|
|
use vars qw($VERSION @ISA @EXPORT); |
|
|
|
|
|
|
|
my $user=C4::Context->config('smsuser'); |
|
|
|
my $pwd=C4::Context->config('smspass'); |
|
|
|
my $uri ="https://spgw.kktcell.com/smshttpproxy/SmsHttpProxyServlet"; |
|
|
|
use vars qw($VERSION @ISA @EXPORT); |
|
|
|
|
|
|
|
BEGIN { |
|
|
|
require Exporter; |
|
|
|
@ISA = qw(Exporter); |
|
|
|
$VERSION = 0.02; |
|
|
|
$VERSION = 0.03; |
|
|
|
@EXPORT = qw( |
|
|
|
&get_sms_auth |
|
|
|
&send_sms |
|
|
@ -27,123 +26,115 @@ BEGIN { |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
our $user = C4::Context->config('smsuser'); |
|
|
|
our $pwd = C4::Context->config('smspass'); |
|
|
|
our $uri = "https://spgw.kktcell.com/smshttpproxy/SmsHttpProxyServlet"; |
|
|
|
|
|
|
|
|
|
|
|
sub get_sms_auth { |
|
|
|
my $ua = LWP::UserAgent->new; |
|
|
|
my $commands; |
|
|
|
my $res=$ua->post($uri,[cmd=>'REGISTER',pUser=>$user,pPwd=>$pwd]); |
|
|
|
my $ua = LWP::UserAgent->new; |
|
|
|
my $commands; |
|
|
|
my $res=$ua->post($uri,[cmd=>'REGISTER',pUser=>$user,pPwd=>$pwd]); |
|
|
|
if ($res->is_success){ |
|
|
|
$commands=parse_content($res->content); |
|
|
|
$commands=parse_content($res->content); |
|
|
|
} |
|
|
|
return($commands,$ua); |
|
|
|
return($commands,$ua); |
|
|
|
} |
|
|
|
|
|
|
|
sub send_sms{ |
|
|
|
my $ua=shift; |
|
|
|
my $phone=shift; |
|
|
|
my $message=shift; |
|
|
|
my $session=shift; |
|
|
|
my $res=$ua->post($uri,[cmd=>'SENDSMS',pUser=>$user,pPwd=>$pwd,pSessionId=>$session,pService_Code=>4130,pMsisdn=>$phone, |
|
|
|
sub send_sms { |
|
|
|
my $ua = shift or return undef; |
|
|
|
my $phone=shift; |
|
|
|
my $message=shift; |
|
|
|
my $session=shift; |
|
|
|
my $res=$ua->post($uri,[cmd=>'SENDSMS',pUser=>$user,pPwd=>$pwd,pSessionId=>$session,pService_Code=>4130,pMsisdn=>$phone, |
|
|
|
pContent=>$message]); |
|
|
|
return parse_content($res->content); |
|
|
|
return parse_content($res->content); |
|
|
|
} |
|
|
|
sub read_sms{ |
|
|
|
my $ua=shift; |
|
|
|
my $session=shift; |
|
|
|
my $res=$ua->post($uri,[cmd=>'GETSMS',pUser=>$user,pPwd=>$pwd,pSessionId=>$session,pService_Code=>4130]); |
|
|
|
return parse_content($res->content); |
|
|
|
|
|
|
|
sub read_sms { |
|
|
|
my $ua = shift or return undef; |
|
|
|
my $session=shift; |
|
|
|
my $res=$ua->post($uri,[cmd=>'GETSMS',pUser=>$user,pPwd=>$pwd,pSessionId=>$session,pService_Code=>4130]); |
|
|
|
return parse_content($res->content); |
|
|
|
} |
|
|
|
sub parse_content{ |
|
|
|
my $content=shift; |
|
|
|
my %commands; |
|
|
|
my @attributes=split /&/,$content; |
|
|
|
|
|
|
|
sub parse_content { |
|
|
|
my $content = shift; |
|
|
|
my %commands; |
|
|
|
my @attributes = split /&/,$content; |
|
|
|
foreach my $params(@attributes){ |
|
|
|
my (@param)=split /=/,$params; |
|
|
|
$commands{$param[0]}=$param[1]; |
|
|
|
my (@param) = split /=/,$params; |
|
|
|
$commands{$param[0]}=$param[1]; |
|
|
|
} |
|
|
|
return(\%commands); |
|
|
|
return(\%commands); |
|
|
|
} |
|
|
|
|
|
|
|
sub error_codes{ |
|
|
|
my $error=shift; |
|
|
|
if ($error==-1){ |
|
|
|
return "Closed session - Retry "; |
|
|
|
}elsif($error==-2){ |
|
|
|
return "Invalid session - Retry "; |
|
|
|
}elsif($error==-3){ |
|
|
|
return "Invalid password" ; |
|
|
|
}elsif($error==-103){ |
|
|
|
return "Invalid user"; |
|
|
|
}elsif($error==-422){ |
|
|
|
return "Invalid Parameter"; |
|
|
|
}elsif($error==-426){ |
|
|
|
return "User doesn’t have permission to send message"; |
|
|
|
}elsif($error==-700){ |
|
|
|
return "No permission"; |
|
|
|
}elsif($error==-801){ |
|
|
|
return " Msdisn count differs-warn administartor"; |
|
|
|
}elsif($error==-803){ |
|
|
|
return "Content count differs from XSER count"; |
|
|
|
}elsif($error==-1101){ |
|
|
|
return " Insufficient Credit Do not retry" ; |
|
|
|
}elsif($error==-1104){ |
|
|
|
return "Invalid Phone number"; |
|
|
|
}elsif($error==-10001){ |
|
|
|
return " Internal system error- Tell Turkcell/Telsim"; |
|
|
|
}elsif($error==-9005){ |
|
|
|
return " No messages to read"; |
|
|
|
}elsif ($error){ |
|
|
|
return "Unknow error no $error occured - tell Turkcell/Telsim"; |
|
|
|
} |
|
|
|
sub error_codes { |
|
|
|
my $error = shift; |
|
|
|
($error== -1) and return "Closed session - Retry"; |
|
|
|
($error== -2) and return "Invalid session - Retry"; |
|
|
|
($error== -3) and return "Invalid password"; |
|
|
|
($error== -103) and return "Invalid user"; |
|
|
|
($error== -422) and return "Invalid Parameter"; |
|
|
|
($error== -426) and return "User does not have permission to send message"; |
|
|
|
($error== -700) and return "No permission"; |
|
|
|
($error== -801) and return "Msdisn count differs - warn administartor"; |
|
|
|
($error== -803) and return "Content count differs from XSER count"; |
|
|
|
($error== -1101) and return "Insufficient Credit - Do not retry"; |
|
|
|
($error== -1104) and return "Invalid Phone number"; |
|
|
|
($error==-10001) and return "Internal system error - Notify provider"; |
|
|
|
($error== -9005) and return "No messages to read"; |
|
|
|
if ($error){ |
|
|
|
warn "Unknown SMS error '$error' occured"; |
|
|
|
return "Unknown SMS error '$error' occured"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
sub parse_phone{ |
|
|
|
## checks acceptable phone numbers |
|
|
|
## Fix to accept Telsim when available (542 numbers) |
|
|
|
my $phone=shift; |
|
|
|
$phone=~s/^0//g; |
|
|
|
$phone=~s/ //g; |
|
|
|
my $length=length($phone); |
|
|
|
if ($length==10 || $length==12){ |
|
|
|
my $code=substr($phone,0,3) if $length==10; |
|
|
|
$code=substr($phone,0,5) if $length==12; |
|
|
|
if ($code=~/533/){ |
|
|
|
return $phone; |
|
|
|
}else{ |
|
|
|
return 0; |
|
|
|
sub parse_phone { |
|
|
|
## checks acceptable phone numbers |
|
|
|
## FIXME: accept Telsim when available (542 numbers) |
|
|
|
my $phone=shift; |
|
|
|
$phone=~s/^0//g; |
|
|
|
$phone=~s/ //g; |
|
|
|
my $length=length($phone); |
|
|
|
if ($length==10 || $length==12){ |
|
|
|
my $code=substr($phone,0,3) if $length==10; |
|
|
|
$code=substr($phone,0,5) if $length==12; |
|
|
|
if ($code=~/533/){ |
|
|
|
return $phone; |
|
|
|
} |
|
|
|
} |
|
|
|
}else{ |
|
|
|
return 0; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
sub parse_message{ |
|
|
|
my $message=shift; |
|
|
|
$message=~s/ / /g; |
|
|
|
my @parsed=split / /,$message; |
|
|
|
return (@parsed); |
|
|
|
sub parse_message { |
|
|
|
my $message = shift; |
|
|
|
$message =~ s/ / /g; |
|
|
|
my @parsed = split / /, $message; |
|
|
|
return (@parsed); |
|
|
|
} |
|
|
|
|
|
|
|
sub write_sms{ |
|
|
|
my ($userid,$message,$phone)=@_; |
|
|
|
my $dbh=C4::Context->dbh; |
|
|
|
my $sth=$dbh->prepare("INSERT into sms_messages(userid,message,user_phone,date_received) values(?,?,?,now())"); |
|
|
|
$sth->execute($userid,$message,$phone); |
|
|
|
$sth->finish; |
|
|
|
return $dbh->{'mysql_insertid'}; |
|
|
|
sub write_sms { |
|
|
|
my ($userid,$message,$phone)=@_; |
|
|
|
my $dbh=C4::Context->dbh; |
|
|
|
my $sth=$dbh->prepare("INSERT into sms_messages(userid,message,user_phone,date_received) values(?,?,?,now())"); |
|
|
|
$sth->execute($userid,$message,$phone); |
|
|
|
$sth->finish; |
|
|
|
return $dbh->{'mysql_insertid'}; # FIXME: mysql specific |
|
|
|
} |
|
|
|
|
|
|
|
sub mod_sms{ |
|
|
|
my ($smsid,$message)=@_; |
|
|
|
my $dbh=C4::Context->dbh; |
|
|
|
my $sth=$dbh->prepare("UPDATE sms_messages set reply=? ,date_replied=now() where smsid=?"); |
|
|
|
$sth->execute($message,$smsid); |
|
|
|
$sth->finish; |
|
|
|
sub mod_sms { |
|
|
|
my ($smsid,$message)=@_; |
|
|
|
my $dbh=C4::Context->dbh; |
|
|
|
my $sth=$dbh->prepare("UPDATE sms_messages set reply=?, date_replied=now() where smsid=?"); |
|
|
|
$sth->execute($message,$smsid); |
|
|
|
} |
|
|
|
sub kill_sms{ |
|
|
|
#end a session |
|
|
|
my $ua=shift; |
|
|
|
my $session=shift; |
|
|
|
my $res=$ua->post($uri,[cmd=>'KILLSESSION',pSessionId=>$session]); |
|
|
|
|
|
|
|
sub kill_sms { |
|
|
|
#end a session |
|
|
|
my $ua = shift or return undef; |
|
|
|
my $session = shift; |
|
|
|
my $res = $ua->post($uri,[cmd=>'KILLSESSION',pSessionId=>$session]); |
|
|
|
} |
|
|
|
1; |
|
|
|
__END__ |
|
|
|