package SMS::Send::TW::PChome;
use strict;
use base 'SMS::Send::Driver';
use WWW::Mechanize;
use Text::Iconv;
use vars qw{$VERSION};
BEGIN {
$VERSION = '0.03';
}
sub new {
my ($class, %params) = @_;
foreach(qw/username password authcode/) {
Carp::croak("No $_ specified") unless(defined $params{"_$_"});
}
my $self = bless { %params }, $class;
return $self;
}
sub send_sms {
my $self = shift;
my %params = @_;
# Get the message and destination
my $message = $self->_MESSAGE( $params{text} );
my $recipient = $self->_TO( delete $params{to} );
my $ua = WWW::Mechanize->new(
agent => __PACKAGE__." v. $VERSION",
);
$ua->agent_alias('Windows IE 6');
# Should be ok now, right? Let's send it!
# Login
$ua->post('https://login.pchome.com.tw/adm/person_sell.htm',
[ 'mbrid' => $self->{"_username"},
'mbrpass' => $self->{"_password"},
'chan' => 'sms',
'record_ipw' => 'false',
'ltype' => 'checklogin',
'buyflag' => '', ]);
# Input SMS_Message, Recipients
$ua->get('http://sms.pchome.com.tw/quick_index.htm');
$ua->post('http://sms.pchome.com.tw/check_msg.htm',
[ 'encoding_type' => 'BIG5',
'msg_body' => $message,
'mobile_list' => $recipient,
'send_type' => 1, ]);
# Input Authcode
$ua->field('ezpay_key', $ua->value('ezpay_key')); # Forward Hidden field: ezpay_key
$ua->field('exh_no', $ua->value('exh_no')); # Forward Hidden field: exh_no
$ua->field('auth_code', $self->{"_authcode"}); # put Auth Code
$ua->current_form()->action('https://ezpay.pchome.com.tw/auth_access.htm');
$ua->submit();
return $ua->content;
}
sub _MESSAGE {
my $class = ref $_[0] ? ref shift : shift;
my $message = shift;
my $converter = Text::Iconv->new("big5", "utf-8");
unless ( length($message) <= 160 ) {
Carp::croak("Message length limit is 160 characters");
}
return $converter->convert($message);
}
sub _TO {
my $class = ref $_[0] ? ref shift : shift;
my $to = shift;
# International numbers need their + removed
$to =~ y/0123456789//cd;
return $to;
}
1;
__END__
# Below is stub documentation for your module. You'd better edit it!
=head1 NAME
SMS::Send::TW::PChome - SMS::Send driver for sms.pchome.com.tw
=head1 SYNOPSIS
use SMS::Send;
my $sender = SMS::Send->new('TW::PChome',
_username => 'UserName',
_password => 'Password',
_authcode => 'AuthCode',
);
my $sent = $sender->send_sms(
text => 'My very urgent message',
to => '0912345678',
);
=head1 DESCRIPTION
SMS::Send::TW::PChome is a SMS::Send driver which allows you to send messages through L.
=head1 METHODS
=head2 new
The C method takes a few parameters. C<_username> , C<_password> , and C<_authcode>
are mandatory.
See L for details on these parameters.
=head2 send_sms
Takes C as recipient phonenumber, and C as the text that's
supposed to be delivered.
=head1 SEE ALSO
=over 5
=item * L
=item * L
=back
=head1 BUGS
Please report any bugs to L
=head1 AUTHOR
Tsung-Han Yeh, Esnowfly@yuntech.edu.twE
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2007 by Tsung-Han Yeh
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.
=cut