Hello,
I cannot get the following script using Net::SSLeay and OpenSSL to work
correctly.
I would really like to print what post_https is sending to the screen before
it is sent to the SSL server.
Any ideas?
#!/usr/local/bin/perl
#
# CHANGE THE ABOVE TO POINT TO PERL 5.004 ON YOUR SERVER.
# Usually either /usr/local/bin or /usr/bin/perl
# Ask your hosting service or
# via telenet enter: whereis perl
# Flush Perl buffers so output is sent directly to browser.
#
$| = 1;
# Tell the browser what is coming.
#
print "Content-type: text/html\n\n";
#################################################################################
# Net_SSLeay-to-AuthorizeNet_v3.0_transact_dll_interface.cgi.
#
# NOTE: This script is written to be run via http not telenet!
# Example: Via a web browser enter:
# http://www.your-domain.com/cgi-bin/this-files-name.cgi
#
# Copyright 08.07.1999 by Doc Webb, [EMAIL PROTECTED]
# All rights reserved.
#
# This is ONLY a SAMPLE script to show how to send data to
# AuthorizeNet, receive a reply back and parse the results.
# What you do with the parsed results is up to you. This is NOT
# meant to be a an entire transaction processing script!
#
# Before attempting to use this check ALL your setting at AuthorizeNet
# to make sure you have no conflicting setting. Also do NOT set any
# fields as required in your AuthorizeNet setting. Instead do that
# via your own scripting. Also you do need to set your AuthorizeNet
# account to test mode while running this script. This script has
# a form field to set your account to test mode when it runs.
# Your account then swithes back to live mode automatically
# for all other transactions not processed by this test script.
#
# This version varies only slightly from authrequest.asp version.
# It directs the data to;
# $host = "secure.authorize.net";
# $script = "/gateway/transact.dll
# instead of
# $host = "www.authorize.net";
# $script = "/scripts/authnet25/AuthRequest.asp";
#
# It also uses transact.dll v3.0 form field names in stead of
# authrequest.asp field names.
#
# I also used a slighlty different method of stuffing the data to sent
# but it does exactlty the same thing.
#
# SOME help is available via e-mail SOMETIMES from [EMAIL PROTECTED]
#
# This script has been tested on a UNIX box running OpenBSD/i386 2.5
#
# Prerequisites:
#
# Hosting server must have installed;
# a- Perl v5.004
# b- SSLeay v0.9.0 or OpenSSL v0.9.1c, http://www.openssl.org,
# nothing earlier works and no gurantee anything later works either.
# c- Net::SSLeay v1.03, 4.1.1999, Sampo Kellomaki <[EMAIL PROTECTED]>
#
# Sorry I can't guarantee this will work with anything except the above!
# Use at your own risk!
#
# If your hosting service doesn't have the above installed or is unwilling
# to install it come see us at www.e-business-hosting.com where we already
# have all the above installed AND we provide you with a working copy of
# this script already installed so all you have to do is add your products
# via the manager.cgi and start selling.
#
###################################################################################
###### EDIT THESE LINES ######
$login = "testdrive";
# No password required by v3.0 transact.dll.
# Set these to your specific needs.
# See AuthorizeNet's v3.0 transact.dll documentation!
#
$adc_delim_data = "TRUE";
$adc_url = "FALSE";
$authorization_type = "AUTH_CAPTURE";
$an_version = "3.0";
# Simulate the basic required form data.
#
# Your form field name Form field value entered by client.
#
$form_data{'first_name'} = "John";
$form_data{'last_name'} = "Doe";
$form_data{'payment_method'} = "CC";
$form_data{'card_num'} = "4007000000027";
$form_data{'expiration_date'} = "1101";
$form_data{'charge_amount'} = "49.95";
# NOTE: There are various test card numbers available.
# By using a specific card number and a specific amount
# while in test mode you can force v3.0 transact.dll to return
# various error messages to your script for testing purposes.
# If you get an error message while in test mode make sure you
# did not inadvertently use a test card and amount that was
# intended to produce an error message.
# If Net::SSLeay is installed as a local module uncomment the following
# line and edit it to point to the directory just above your Net
directory.
# In this example line Net::SSLeay was installed locally and the
SSLeay.PM
# file in my "/usr/local/lib/perl5/site_perl/Net" directory.
#
use lib '/usr/local/lib/perl5/site_perl';
###### DO NOT CHANGE ANYTHING BELOW HERE UNLESS YOU KNOW WHAT YOUR DOING!
######
# The following variables and form fields are the bare minimum
# required data. Please read the AuthorizeNet v3.0 transact.dll
# documentation for a complete list of form fields and their
# uses!
# In your actual script either commented out the following line
# or changed to "FALSE".
# NOTE: Transactions processed with this set to "TRUE" will
# will NOT appear in your transaction batch files at
# AuthorizeNet!
$test_mode = "TRUE";
$echo_data = "TRUE";
# Communications settings. These don't change.
#
$host = "secure.authorize.net";
$script = "/gateway/transact.dll";
$port = "443";
# Load the Net::SSLeay library and import some subroutines
# for our use.
#
use Net::SSLeay qw(post_https make_headers make_form);
# Uncomment the following line to turn on trace for
# even more debugging information.
# Trace can be 1,2 or 3. Default is 1.
#
#$Net::SSLeay::trace = 3;
# Version autodetect in OpenSSL is still broken so set it manually.
#
$Net::SSLeay::ssl_version = 3;
# Fill in the v3.0 transact.dll fields with the data you
# collected via your checkout form.
#
%form_data = make_form
(
'x_Login' => $login
,'x_Version' => $an_version
,'x_ADC_Delim_Data' => $adc_delim_data
,'x_ADC_URL' => $adc_url
,'x_Type' => $authorization_type
,'x_Test_Request' => $test_mode
,'x_Method' => $form_data{'payment_method'}
,'x_First_Name' => $form_data{'first_name'}
,'x_Last_Name' => $form_data{'last_name'}
,'x_Amount' => $form_data{'charge_amount'}
,'x_Card_Num' => $form_data{'card_num'}
,'x_Exp_Date' => $form_data{'expiration_date'}
,'x_Echo_Data' => $echo_data
);
# Send data via SSL and wait for reply via the same
# encrypted channel.
#
($reply_data, $reply_type, %reply_headers) =
post_https($host, $port, $script, '', %form_data);
### SHOULD PUT A COMM FAILURE CHECK HERE ###
print "Sent the following string:<BR>";
print
"https://secure.authorize.net/gateway/transact.dll?x_Login=testdrive&x_Version=3.0&x_ADC_Delimited_Data=TRUE&x_ADC_URL=FALSE&x_Type=AUTH_ONLY&x_Test_Request=TRUE&x_Method=CC&x_First_Name=John&x_Last_Name=Doe&x_Amount=49.95&x_Card_Num=4007000000027&x_Exp_Date=11/2001&x_Echo_Data=TRUE<BR><BR>";
# The following displays the data received back from the v3.0
# transact.dll. What your script does with the data is up to you!
# Display the reply headers.
#
print "Reply headers received from v3.0 transact.dll:<BR>";
foreach $key (keys %reply_headers)
{ print "$key: $reply_headers{$key}<BR>";
}
print "<BR>Reply type specification received from v3.0
transact.dll:<BR> $reply_type<BR>";
# split out the returned fields
@data = split (/\,/, $reply_data);
# Print the unparsed reply_data.
#
print STDOUT "<BR>Unparsed reply data:<BR> $reply_data<BR>";
print "<BR>Data returned by v3.0 transact.dll
(see v3.0 transact.dll documentation for
a descriptions of each data item returned):<BR>";
$data_item = 1;
foreach(@data)
{ print "Item $data_item: $_<BR>";
$data_item++;
}
# EOF
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com