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

Reply via email to