Business::CSI - Perl extension for Card Services International
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"; }
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
'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
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
'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,
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. ;)
Note that in order ot use the Email functions, you must put a ':mail' in your use line -- as seen in the example.
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);
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.
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.
With this you can set the Full Name for the from: header. This is reccomended ... for asthetic reasons.
The subject line (if not specified) will be: 'Subject: Your order (#X)' Where X will get replaced with the order # you specified.
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.
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. ;)
None... they're fixed
None AFAIK.
"David Deppner" <dave@psyber.com>:
1. The double/float bugfix mentioned in the Changes log. 2. Insisted on a README.
Jettero Heller <jettero@voltar.org>
perl(1).