#!/usr/bin/perl -w

#
# Make sure to copy Business::OnlinePayment::vSecureProcessing into its
# proper system directory (aka /usr/share/perl5/Business/Onlinepayment)
#

use strict;
use Data::Dumper;
use Business::OnlinePayment;

my %opt = (
    server =>'dvrotsos2.kattare.com',
    platform => 'Buypass',
    gid => '1432479912596791',
    tid => '01',
    userid=> 'tom@yiptv.com',
    port => 443,
    env => 'test'
);

my $action = shift || 'Normal Authorization';
my $auth = shift || '';


my %content = (
    appid          => 'yiptv',
    action         => $action,
    auth           => $auth,
    description    => 'Business::OnlinePayment visa test',
#    card_number    => '4007000000027',
    card_number    => '4111111111111111',
    cvv2           => '111',
    expiration     => expiration_date(),
    amount         => '42.24',
    name           => 'Murphy Law',
    email          => 'fake@acme.com',
    address        => '123 Anystreet',
    zip            => '84058',
);

main();

sub main {
    my $transaction = Business::OnlinePayment->new("vSecureProcessing", %opt);
    
    print "MAKING PAYMENT\n";
    ProcessTransaction($transaction);
    $content{'action'} = 'void';
    $content{'ref_num'} = $transaction->authorization();
    $content{'txn_date'} = $transaction->txn_date();
    $content{'amount'} = $transaction->txn_amount;
    print "VOIDING PAYMENT\n";
    ProcessTransaction($transaction);
    $content{'action'} = 'Normal Authorization';
    $content{'amount'} = '30.00';
    print "MAKING PAYMENT\n";
    ProcessTransaction($transaction);
    $content{'action'} = 'credit';
    $content{'ref_num'} = $transaction->authorization;
    $content{'txn_date'} = $transaction->txn_date;
    $content{'amount'} = $transaction->txn_amount;
    print "REFUNDING PAYMENT\n";
    ProcessTransaction($transaction);
}

sub ProcessTransaction {
    my $transaction = shift;
    print "Processing transaction with content:\n".Dumper(\%content)."\n";
    $transaction->content(%content);

    eval { $transaction->submit(); };

    if ( $@ ) {
    
    die "Error: $@\n";
    
    } else {
    
        if ( $transaction->is_success() ) {
            print "Card processed successfully: ". $transaction->authorization()."\n";
        } else {
            print "Card was rejected: ". $transaction->error_message(). "\n";
        }
    }
}


sub expiration_date {
    my($month, $year) = (localtime)[4,5];
    $month += 1;
    $year++;       # So we expire next year.
    $year %= 100;  # y2k?  What's that?

    return sprintf("%02d/%02d", $month, $year);
}
