108 lines
3.9 KiB
Perl
Executable File
108 lines
3.9 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use lib '/home/slowtwitch/forum.slowtwitch.com/cgi-bin/admin';
|
|
use GForum qw/:objects/;
|
|
use GForum::Payment qw/:status :log/;
|
|
use Data::Dumper;
|
|
use vars qw/%INVALID %EMPTY/;
|
|
use GT::Payment::Direct::AuthorizeDotNetRec;
|
|
use Slowtwitch::Payment;
|
|
|
|
GForum::init('/home/slowtwitch/forum.slowtwitch.com/cgi-bin/admin');
|
|
|
|
main();
|
|
|
|
sub main {
|
|
silent_post();
|
|
}
|
|
|
|
sub silent_post {
|
|
# -----------------------------------------------------------------------------
|
|
# Handle PayPal postback
|
|
my $unique = $IN->param('x_invoice_num');
|
|
my $pay = $DB->table('Subscription_Payments');
|
|
my $log = $DB->table('Subscription_PaymentLogs');
|
|
my $in = $IN->get_hash();
|
|
my $payment = $pay->get($unique);
|
|
if (!$payment) {
|
|
open (LOG, ">>/var/home/virginia/virginialo.com/cgi-bin/forum/admin/auth_silent_error.log");
|
|
print LOG Dumper($in);
|
|
close (LOG);
|
|
print $IN->header . "No such invoice: $unique.";
|
|
return;
|
|
}
|
|
|
|
open (LOG, ">>/var/home/virginia/virginialo.com/cgi-bin/forum/admin/auth_silent_live.log");
|
|
print LOG Dumper($payment,$in);
|
|
close (LOG);
|
|
|
|
print $IN->header;
|
|
GT::Payment::Direct::AuthorizeDotNetRec::process(
|
|
param => $IN,
|
|
test_mode => $CFG->{payment}->{direct}->{used}->{AuthorizeDotNetRec}->{test_mode},
|
|
account_username => $CFG->{payment}->{direct}->{used}->{AuthorizeDotNetRec}->{account_username},
|
|
md5_key => $CFG->{payment}->{direct}->{used}->{AuthorizeDotNetRec}->{md5_key},
|
|
duplicate => sub {
|
|
my $id = $IN->param('x_trans_id');
|
|
my $cond = GT::SQL::Condition->new();
|
|
$cond->add(paylogs_payments_id => '=' => $unique);
|
|
$cond->add(paylogs_type => '=' => LOG_ACCEPTED);
|
|
$cond->add(paylogs_text => LIKE => "%Transaction ID: $id\n%");
|
|
my $found = $log->count($cond);
|
|
#warn "$found ($id) **";
|
|
return $found ? undef : 1; # True if everything checks out; undef if a duplicate was found
|
|
},
|
|
on_invalid => sub {
|
|
},
|
|
on_error => sub {
|
|
my $errmsg = shift;
|
|
print $errmsg . "\n";
|
|
$pay->update(
|
|
{ payments_status => ERROR, payments_last => time },
|
|
{ payments_id => $payment->{payments_id} }
|
|
);
|
|
|
|
$log->insert({
|
|
paylogs_payments_id => $payment->{payments_id},
|
|
paylogs_type => LOG_ERROR,
|
|
paylogs_time => time,
|
|
paylogs_text => $errmsg
|
|
});
|
|
},
|
|
on_recurring => sub {
|
|
if ($IN->param('x_amount') < $payment->{payments_amount}) {
|
|
$log->insert({
|
|
paylogs_payments_id => $payment->{payments_id},
|
|
paylogs_type => LOG_ERROR,
|
|
paylogs_time => time,
|
|
paylogs_text => "Invalid payment (payment amount is less than original charge): " .
|
|
$IN->param('x_amount') . " < " . $payment->{payments_amount}
|
|
});
|
|
return;
|
|
}
|
|
|
|
$pay->update(
|
|
{ payments_status => COMPLETED, payments_last => time },
|
|
{ payments_id => $payment->{payments_id} }
|
|
);
|
|
|
|
$log->insert({
|
|
paylogs_payments_id => $payment->{payments_id},
|
|
paylogs_type => LOG_ACCEPTED,
|
|
paylogs_time => time,
|
|
paylogs_text => (
|
|
"Transaction ID: " . $IN->param('x_trans_id') . "\n" .
|
|
"Amount: " . $IN->param('x_amount') . " " .
|
|
"Subscription payment #: " . $IN->param('x_subscription_paynum') . " " .
|
|
"Subscription ID: " . $IN->param('x_subscription_id') . "\n"
|
|
)
|
|
});
|
|
|
|
Slowtwitch::Payment::process_payment($payment->{payments_userid}, '', $payment->{payments_id});
|
|
}
|
|
);
|
|
|
|
1;
|
|
}
|