discourse-legacysite-perl/site/forum.slowtwitch.com/cgi-bin/silent_post_live.cgi
2024-06-17 21:49:12 +10:00

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;
}