Hi All,
We are using a script which uses Oraperl. This script (attached) needs to
be install on another machine which is Solaris 8 on sparc. That machine got
Perl 5.005 and perl 5.6.1 version installed. And I learnt that Oraperl
supports only Perl 4 and I need to convert this script to DBI form. I am
trying to do so, but getting lots of errors. And since this script is very
critical, I am looking for help if you can. I need to find all that needs to
be change or any other tips.
Script is attached here. If you don't get attachment, let me know.
Thanks,
AS
#!/bin/perl -w
use lib '/u01/orap/pora/8.0.6/lib/';
#use lib '/usr/apps/FreeWare/Perl-5.03/lib/perl5/';
#use lib '/usr/apps/FreeWare/perl5.005/lib/5.00502';
use lib '/usr/local/lib/perl5/site_perl/5.6.1/sun4-solaris';
use lib '/usr/local/lib/perl5';
use lib '/var/commerce/organic/lib/';
use strict;
use IPC::Open3;
use Organic::Mail;
use Symbol;
use Oraperl;
#use DBI;
$ENV{'ORACLE_HOME'} = '/u01/orap/pora/8.0.6';
$ENV{'TNS_ADMIN'} = '/u01/orap/pora/8.0.6/network/admin';
#$ENV{'TWO_TASK'} = 'P';
my %ora_parms = ();
# Originals ... (i.e. live)
# Change these 3 emails below from [EMAIL PROTECTED] to
# whoever you want to receive the emails everytime this
# thing runs ... Z.K
my $web_sales_email = '[EMAIL PROTECTED]';
my $order_email = '[EMAIL PROTECTED],[EMAIL PROTECTED],[EMAIL PROTECTED],[EMAIL PROTECTED]';
my $bounce_email = $order_email;
my $debugger = '[EMAIL PROTECTED],[EMAIL PROTECTED]';
my $DEBUG = 0;
my $db_login = "P.gunu.org";
# Begin main program
# Read in the encrypted message from stdin
my $encrypted_text = "";
while (<STDIN>) {
$encrypted_text .= $_;
}
# Run it through the decryptor
my ($plaintext,$plaintext_no_cc) = decrypt($encrypted_text);
## grep through $plaintext here to find out what the product is and distribute the
## mail to [EMAIL PROTECTED] if appropriate.
# Forward it on to its intended recipient
my $mail = new Organic::Mail;
my ($to, $bounce);
if ($DEBUG or $plaintext =~ /ignore this message/ ) {
$to = $debugger;
$bounce = $debugger;
$db_login = "PCAFE";
} else {
$to = $order_email;
$bounce = $bounce_email;
}
#First send with CC info
$mail->to($to);
$mail->from($web_sales_email);
$mail->replyto($bounce);
$mail->subject("Incoming order");
$mail->message($plaintext_no_cc);
$mail->send;
# Just for testing, to see the un-encrypted order
#chmod 0755, "/tmp/plain.txt";
#open(TMP, ">>/tmp/plain.txt");
#print TMP '=' x 65, "\n";
#print TMP $plaintext_no_cc, "\n";
#close(TMP);
#Now send without CC info
if ($DEBUG or $plaintext_no_cc =~ /ignore this message/ ) {
$to = $debugger;
$bounce = $debugger;
} else {
$to = $web_sales_email;
$bounce = $bounce_email;
}
$mail->clear_to();
$mail->clear_from();
$mail->clear_replyto();
$mail->clear_subject();
$mail->clear_message();
$mail->to($to);
$mail->from($web_sales_email);
$mail->replyto($bounce);
$mail->subject("Incoming order");
$mail->message($plaintext_no_cc);
$mail->send;
# ============================================================
# Testing the test environment .... Z.K 7/6/00
# Commented out the Oracle inserts just for safety.
# Don't need to go past here at all for my tests...
# ============================================================
my $index = 1;
$ora_parms{line_number} = 1;
while($index<=$ora_parms{no_of_products})
{
$ora_parms{option_number} = 0;
$ora_parms{quantity}= $ora_parms{'quantity'.$index} ;
if($ora_parms{'product_numbers'.$index}) {
my $line_item = "" ;
my @line_items = split /,/,$ora_parms{'product_numbers'.$index};
foreach $line_item (@line_items) {
my ($part_num,$part_price) = split /\*/,$line_item;
$part_num =~ s/^\s+//;
$part_price =~ s/^\s+//;
$ora_parms{product_number} = $part_num;
$ora_parms{product_price} = $part_price;
$ora_parms{platform} = $ora_parms{'platform'.$index} ;
$ora_parms{which_product} = $ora_parms{'which_product'.$index} ;
$ora_parms{media_type} = $ora_parms{'media_type'.$index} ;
# testing env .. no inserts
&do_oracle_insert();
$ora_parms{option_number}++;
}
$ora_parms{line_number}++;
} else {
# testing env .. no inserts
&do_oracle_insert();
}
$index++;
}
1;
#
# decrypt
#
# takes one parameter, which is the encrypted text to be decrypted
#
sub decrypt {
my $encrypted_text = shift;
#my $encrypted_text = $plaintext;
my $plaintext_sub = "";
#my $plaintext_sans_cc is plaint text message minus Credit Card Info
my $plaintext_sans_cc = "";
# PGP might barf -- if so, we want to know about it!
my $error_text = "";
# the directory where the PGP 5.0 binaries live
my $pgp_directory = "/var/commerce/pgp/bin";
# the ID for the private key to use for signing
my $pgp_user = '[EMAIL PROTECTED]';
# the ID for the public key to use for encrypting
my $pgp_recipient = '[EMAIL PROTECTED]';
# the location of the public keyring
my $pgp_pubring = '/.pgp/pubring.pkr';
# the location of the secret keyring
my $pgp_secring = '/.pgp/secring.skr';
# the password used to encrypt the secret keys
my $password = "p0intyha1r";
$ENV{'PGPPASSFD'} = '0';
my $PGPWRITE = gensym();
my $PGPREAD = gensym();
my $PGPERR = gensym();
my $pid = open3($PGPWRITE, $PGPREAD, $PGPERR, "$pgp_directory/pgpv -f
--pubring=$pgp_pubring --secring=$pgp_secring +batchmode=1") or die "Unable to invoke
PGP.";
print $PGPWRITE "$password\n";
print $PGPWRITE $encrypted_text;
close $PGPWRITE;
my ($ora_field,$ora_value);
while (<$PGPREAD>) {
#We need to store the fields as key/value pairs for insertion in the oracle
database
#We split each line the equal
($ora_field,$ora_value) = split /\=/,$_,2;
chomp $ora_value;
$ora_parms{$ora_field} = $ora_value;
$ora_parms{$ora_field} =~ s/\'//g;
# do nothing, just slurp in the text
$plaintext_sub .= $_;
#strip the Credit Card Information
if($_ !~ /credit_card_type/o and $_ !~ /credit_card_number/o
and $_ !~ /credit_card_expire/o and $_ !~ /name_on_card/o) {
$plaintext_sans_cc .= $_;
}
}
$error_text .= <$PGPERR>; # oh no! Errors!
# ...too bad we're going to ignore them
# die "PGP errors: $error_text" if $error_text;
return ($plaintext_sub, $plaintext_sans_cc);
} # encrypt
sub do_oracle_insert {
#Hack......
if($ora_parms{billing_country} eq "CA") {
$ora_parms{billing_province} = $ora_parms{billing_state};
$ora_parms{shipping_province} = $ora_parms{shipping_state};
$ora_parms{billing_state} = "";
$ora_parms{shipping_state} = "";
} else {
$ora_parms{billing_province} = "";
$ora_parms{shipping_province} = "";
}
#my $lda = &ora_login($db_login, "web", "web") || &dberror("ora_login($db_login,
WEB)");
my $lda = &ora_login("P", "web", "web") || &dberror("ora_login($db_login,
WEB)");
my $insert = "";
$insert = "insert into rs_web_order
(
order_id,
platform,
billing_label,
billing_first_name,
billing_middle_initial,
billing_last_name,
billing_company,
billing_title,
billing_street_address,
billing_address2,
billing_address3,
billing_city,
billing_state,
billing_province,
billing_zip_code,
billing_country,
billing_day_phone,
billing_eve_phone,
billing_fax_number,
billing_email,
shipping_label,
shipping_first_name,
shipping_middle_initial,
shipping_last_name,
shipping_company,
shipping_title,
shipping_street_address,
shipping_address2,
shipping_address3,
shipping_city,
shipping_state,
shipping_province,
shipping_zip_code,
shipping_country,
shipping_day_phone,
shipping_eve_phone,
shipping_fax_number,
shipping_email,
credit_card_type,
credit_card_number,
credit_card_expiry,
credit_card_holder_name,
shipping_option,
quantity,
rational_customer,
where_heard,
line_number,
option_number,
item,
price,
media_type,
process_flag,
creation_date,
ship_method_code,
type_of_order,
shipping_instructions
)
VALUES
(
\'$ora_parms{order_id}\',
\'$ora_parms{platform}\',
\'$ora_parms{billing_label}\',
\'$ora_parms{billing_first_name}\',
\'$ora_parms{billing_middle_initial}\',
\'$ora_parms{billing_last_name}\',
\'$ora_parms{billing_company}\',
\'$ora_parms{billing_title}\',
\'$ora_parms{billing_street_address}\',
\'$ora_parms{billing_street_address2}\',
\'$ora_parms{billing_street_address3}\',
\'$ora_parms{billing_city}\',
\'$ora_parms{billing_state}\',
\'$ora_parms{billing_province}\',
\'$ora_parms{billing_zip_code}\',
\'$ora_parms{billing_country}\',
\'$ora_parms{billing_day_phone_number}\',
\'$ora_parms{billing_eve_phone_number}\',
\'$ora_parms{billing_fax_number}\',
\'$ora_parms{billing_email_address}\',
\'$ora_parms{shipping_label}\',
\'$ora_parms{shipping_first_name}\',
\'$ora_parms{shipping_middle_initial}\',
\'$ora_parms{shipping_last_name}\',
\'$ora_parms{shipping_company}\',
\'$ora_parms{shipping_title}\',
\'$ora_parms{shipping_street_address}\',
\'$ora_parms{shipping_street_address2}\',
\'$ora_parms{shipping_street_address3}\',
\'$ora_parms{shipping_city}\',
\'$ora_parms{shipping_state}\',
\'$ora_parms{shipping_province}\',
\'$ora_parms{shipping_zip_code}\',
\'$ora_parms{shipping_country}\',
\'$ora_parms{shipping_day_phone_number}\',
\'$ora_parms{shipping_eve_phone_number}\',
\'$ora_parms{shipping_fax_number}\',
\'$ora_parms{shipping_email_address}\',
\'$ora_parms{credit_card_type}\',
\'$ora_parms{credit_card_number}\',
\'$ora_parms{credit_card_expires}\',
\'$ora_parms{name_on_card}\',
\'$ora_parms{shipping_option}\',
$ora_parms{quantity},
\'$ora_parms{rational_customer}\',
\'$ora_parms{where_heard}\',
$ora_parms{line_number},
$ora_parms{option_number},
\'$ora_parms{product_number}\',
$ora_parms{product_price},
\'$ora_parms{media_type}\',
\'N\',
SYSDATE,
\'$ora_parms{shipping_code}\',
\'$ora_parms{type_of_order}\',
\'$ora_parms{shipping_instructions}\'
)";
&ora_do($lda,$insert) || die "(($ora_errstr))\n";
#&dberror("&ora_do($lda,$insert)");
&ora_logoff($lda);
}
sub dberror {
my ($message) = @_;
print "*Error: $message\n";
print "Database error: $ora_errstr\n";
my $db_error_mail = new Organic::Mail;
$db_error_mail->to('[EMAIL PROTECTED]');
$db_error_mail->from('gateway@rpdb');
$db_error_mail->replyto('[EMAIL PROTECTED]');
$db_error_mail->subject("Error in E-Commerce");
$db_error_mail->message("$message\n\n$ora_errstr");
$db_error_mail->send;
exit 1;
} # dberror