Perl Modules

Name

Business::CSI - Perl extension for Card Services International


The Example

 use strict;
 use Business::CSI qw/ :simple :mail /;
 my $max_tries = 5;
 add_settings({
    'csi_config'=> '666999',
    'csi_host'  => 'secure.linkpt.net',
    'csi_port'  => '1139',
    'csi_key'   => '/etc/keyfile.pem',
 });

 add_settings({
     'card_number'  => '1234 5678 1234 5678',
     'card_expr_m'  => '07',
     'card_expr_y'  => '07',
     'name_on_card' => 'Some Looser',
     'email_addy'   => 'looser@aol.com',
 });

 add_item("A happy meal", 0.5);  # you don't need to use these.
 add_item("A sad   meal", 0.5);  # but it makes the line items show
                                 # in the admin/customer e-mail

 add_settings({
     'grand_total' => calc_total, # note that calc_total does not account
     'real'        => 0,          # for or affect the ship/sub/tax totals
 });

 my $count  = 0;
 my %result = ();
 {
     %result = simple_transaction;

     if(not $result{connected}) {
         print "$result{error_type} => $result{error}\n";
         die "Your order fail'd $max_tries times ... I give up." if $max_tries <= ++$count;
         redo;
     }
 }

 # at this point, we're successfull
 customer_notification_mail_settings({
     # see the documentation below if you want to use templates.
     'template'   => "filename.txt", 
     'extra_text' => qq( This is some extra text.  Do you like reading it? )
     'BCC'        => "sales@our.downtown.com",
 });
 customer_notification_mail(1); # generally you wouldn't use the 1, see below

 foreach my $k (keys %result) {
     print "\$result{$k} = $result{$k}\n";
 }


%results population

Success

    These are all retrieved from a cc_order_get(order,
    OrderField_R_Something ...  function call.  These values are well
    documented in the linkpoint api so if you're wondering what values
    these can take on, consult the aforementioned documentation.
    'approval'  => $result[0], # OrderField_R_Approved
    'ref'       => $result[1], # OrderField_R_Ref
    'code'      => $result[2], # OrderField_R_Code
    'ordernum'  => $result[3], # OrderField_R_Ordernum
    'error'     => $result[4], # OrderField_R_Error
    'time'      => $result[5], # OrderField_R_Time
    'connected' => 1

Failure

    'error_type' => $result[0], # any of process or setrequest
    'error'      => $result[1], # the error returned from CSI
    'connected'  => 0
    The error_type is the stage of the order process, either 'process' or
    'setrequest'.  Again, consult the linkpoint api docs to see what 
    values can be returned.

=head1 Settings

Settings - The available settings

    csi_config   csi_key      csi_host     csi_port     cust_id     
    order_id     name_on_card email_addy   card_number  card_expr_m 
    card_expr_y  sub_total    tax_total    ship_total   grand_total  real

Settings - The defaults

    'csi_host'     => 'secure.linkpt.net',
    'csi_port'     => '1139',
    'cust_id'      => 'imcertainihavenoidea',
    'order_id'     => ('order' . '.'. time . '.' . $$),
    'email_addy'   => 'unknown@aol.com',
    'real'         => 0,
    'ship_total'   => 0,
    'sub_total'    => 0,
    'tax_total'    => 0,

Settings - Extra Info

  Unless otherwise listed, they all default to undef.
  Note that 'csi_config' and 'csi_key' are really really needed.
  'csi_config' is your store number (or whatever they call it now).
  'csi_key' is your keyfile.pem.
  Another important setting is 'real'.  'real' should be set to
  0 while you're practicing -- not $real, and 1 when you're ready
  to do it for real. ;)


Email settings

   Note that in order ot use the Email functions, you must put a ':mail' in
   your use line -- as seen in the example.

customer_notification_mail;

   This is the function that actually sends a mail to the customer.
   If you want it to use the localhost mail gateway (sendmail?), then
   call it like it was called in the example above.
   If (for some reason) you wish to use the customers own mail gateway,
   as discovered through the MX records for the domain, call the function
   with a 1 as the argument:
   customer_notification_mail(1);

template => ``filename.txt''

  If this funciton is used, the customer_notification_mail function will
  use the named template to do the notification.  SUMMARY and ITEMIZED_LIST
  should appear on a line by themselves somewhere in the template.  They
  get replaced appropriately.
  Additionally, the word EXTRA_TEXT will be replaced by the extra_text 
  setting.  If EXTRA_TEXT is not inthe template, then the extra_text setting is 
  rendered useless.  Similarly, the EXTRA_TEXT will get replaced with nothing
  if you dont' set the extra_text field.

from => ``someone'', from => ``someone@something.tld''

  Use this to set the email address the mail comes from (postmaster by
  default).  Business::CSI will attempt to appened a logical fqdn if
  it can't find an [@] in the address.

from_full => ``Some Dude Department''

  With this you can set the Full Name for the from: header.
  This is reccomended ... for asthetic reasons.

subject => ``Your Order with Some Damn Co.''

  The subject line (if not specified) will be:
  'Subject: Your order (#X)'
  Where X will get replaced with the order # you specified.

BCC => ``someoneelse@at.our.co''

  Our sales department keeps track of all our orders in a spreadsheet.
  I think that's kinda dumb, and offered to do a database thing.
  *shrug*  They'd rather get a copy of this.  That's what this is 
  for.


To do

  1. Billing Shipping info
  2. Credit card number sanity checks using Business::CreditCard
  3. ... I am accepting requests especially if you wanna throw me 
      code snippits. ;)
  4. More documentation.  As people ask me questions, I make more and more 
     less not clear. ;)


Known Bugs

  None... they're fixed


Unknown Bugs

  None AFAIK.


Credits

  "David Deppner" <dave@psyber.com>:
  1.  The double/float bugfix mentioned in the Changes log.
  2.  Insisted on a README.


Author

  Jettero Heller <jettero@voltar.org>


See Also

perl(1).