9c8a1e29f8
Signed-off-by: Chris Cormack <crc@liblime.com> Signed-off-by: Joshua Ferraro <jmf@liblime.com>
140 lines
3.6 KiB
Perl
140 lines
3.6 KiB
Perl
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);
|
|
|
|
BEGIN {
|
|
require Exporter;
|
|
@ISA = qw(Exporter);
|
|
$VERSION = 0.03;
|
|
@EXPORT = qw(
|
|
&get_sms_auth
|
|
&send_sms
|
|
&read_sms
|
|
&error_codes
|
|
&parse_phone
|
|
&parse_message
|
|
&write_sms
|
|
&mod_sms
|
|
&kill_sms
|
|
);
|
|
}
|
|
|
|
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]);
|
|
if ($res->is_success){
|
|
$commands=parse_content($res->content);
|
|
}
|
|
return($commands,$ua);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
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;
|
|
foreach my $params(@attributes){
|
|
my (@param) = split /=/,$params;
|
|
$commands{$param[0]}=$param[1];
|
|
}
|
|
return(\%commands);
|
|
}
|
|
|
|
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
|
|
## 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;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
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'}; # 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);
|
|
}
|
|
|
|
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__
|