package Business::Cashcow;

use strict;
use Carp;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD);

require Exporter;
require DynaLoader;
require AutoLoader;

@ISA = qw(Exporter DynaLoader);
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
@EXPORT = qw(
);
$VERSION = '0.61';


sub AUTOLOAD {
    # This AUTOLOAD is used to 'autoload' constants from the constant()
    # XS function.  If a constant is not found then control is passed
    # to the AUTOLOAD in AutoLoader.

    my $constname;
    ($constname = $AUTOLOAD) =~ s/.*:://;
    croak "& not defined" if $constname eq 'constant';
    my $val = constant($constname, @_ ? $_[0] : 0);
    if ($! != 0) {
	if ($! =~ /Invalid/) {
	    $AutoLoader::AUTOLOAD = $AUTOLOAD;
	    goto &AutoLoader::AUTOLOAD;
	}
	else {
		croak "Your vendor has not defined Cashcow macro $constname";
	}
    }
    no strict 'refs';
    *$AUTOLOAD = sub () { $val };
    goto &$AUTOLOAD;
}

bootstrap Business::Cashcow $VERSION;

# Preloaded methods go here.

# Autoload methods go after =cut, and are processed by the autosplit program.

1;
__END__


=head1 NAME

Business::Cashcow - Perl wrapper for Cascow, a lib for making Dankort payment.

=head1 SYNOPSIS

A module for clearing Internet payment transactions with the Danish PBS
through a SSL connection, provided by the excellent OpenSSL library.
CashCow will clear the following kinds of transactions between a customer
and PBS:

	Dankort 
	Visa/Dankort 
	Eurocard 
	MasterCard 
	Visa

This module is a perl wrapper for the c lib cashcow, se http://www.cashcow.dk/
for more info.

=head1 DESCRIPTION

Business::Cashcow::InitCashcow("passphrase", "rc4key");

Call this function to load the /etc/cashcow.ini file and setup state
regarding keys and certificates. Returns true if private key was
successfully unlocked using the supplied passphase, false
otherwise.

  my $transaction = {card_number => '76009244561',
                     card_expirymonth => 7,
                     card_expiryyear => 8,
                     transaction_reference => '99910326',
                     transaction_amount => 7.25,
                     transaction_currency => 208,
                     merchant_name => 'Enterprise Advertising A/S',
                     merchant_address => 'Aarhusgade 108E, 3.',
                     merchant_city => 'Koebenhavn',
                     merchant_zip => '2100 OE',
                     merchant_region => '',
                     merchant_country => 'DNK',
                     merchant_poscode => 0,    # POS_ECOMMERCE_SSL
                     merchant_number => '2133334',
                     merchant_terminalid => 'INET01',
                     result_action => 0,
                     result_approval => '',
                     result_ticket => '',
                     cashcow => ''
                    };

  Business::Cashcow::RequestAuth($transaction, $ticket, "secret");

This function make the initial communucation to verify the card etc. It
returns on of the folowing status messages:

  'action_approved',
  'action_decline',
  'action_partly_approved',
  'action_amount_error',
  'action_invalid_transaction',
  'action_no_reply',
  'action_system_error',
  'action_expired_card',
  'action_retransmit',
  'action_internal_error'

and sets $ticket to a ticket to be used as reference of the transaction in
Cashcow::RequestCapture. It shoud be called as a response of an order.

  Business::Cashcow::RequestCapture($ticket,"secret",7.25);

This function compleetes the payment. It should be called when the
merchant has fullfilled the order.

=head1 BUGS

The software is an alpha, so don't blame me, but bug (and success)
reports are also welcome.

=head1 AUTHOR

Gustav Kristoffer Ek <stoffer@netcetera.dk>

Copyright 1999 Gustav Kristoffer Ek. All rights reserved. This program
is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.

=cut

sub InitCashcow;
sub AuthRequest;
sub RequestCapture;