views:

965

answers:

9

I'm working on a PHP project and am looking for a good authorize.net gateway. I want something with mature code that's tested. The goal is to avoid writing and testing the entire thing myself based on the authorize.net api docs.

Does anyone know of any good PHP libraries for this? I've search Google to no avail.

A: 

http://www.micahcarrick.com/04-19-2005/php-authorizenet-aim-interfacing-class.html

That is the class I use. Fairly simple to use. You're still going to need to dig into the API though, to figure out what variables you want to send and which ones you don't.

Mark
A: 

Magento supports Authorize.Net. Extract out the code you need as Magento is well tested and good quality code.

CodeToGlory
I think he was looking more for a ready-to-go solution. Digging through magento's code might be more work than he is looking for
Mark
+1  A: 

You're in luck. This is what I use (for the SIM gateway):

include("../../simdata.php");
...
<!--form action="https://test.authorize.net/gateway/transact.dll" method="POST"-->
<FORM action="https://secure.authorize.net/gateway/transact.dll" method="POST">
<?
$x_description = "website.com";
$currency = "";
$tstamp = time();
// Seed random number for security and better randomness.
srand(time());
$sequence = rand(1, 1000);
$data = "$x_loginid^$sequence^$tstamp^$total^$currency";
#echo "data = $data\n";
#echo $x_tran_key;
$fingerprint = bin2hex(mhash(MHASH_MD5, $data, $x_tran_key));
# php 5 only $fingerprint = hash_hmac("md5", $data, $x_tran_key);
echo ("<input type='hidden' name='x_fp_sequence' value='" . $sequence . "'>\n" );
echo ("<input type='hidden' name='x_fp_timestamp' value='" . $tstamp . "'>\n" );
echo ("<input type='hidden' name='x_fp_hash' value='" . $fingerprint . "'>\n" );
echo ("<input type=\"hidden\" name=\"x_description\" value=\"" . $x_description . "\">\n" );
echo ("<input type=\"hidden\" name=\"x_login\" value=\"$x_loginid\">\n");
echo ("<input type=\"hidden\" name=\"x_amount\" value=\"$total\">\n");

?>
<input type="hidden" name="x_first_name" value="<?=firstName($_SESSION['user']['name'])?>">
<input type="hidden" name="x_last_name" value="<?=lastName($_SESSION['user']['name'])?>">
<input type="hidden" name="x_company" value="<?=$_SESSION['user']['company']?>">
<input type="hidden" name="x_address" value="<?=$_SESSION['user']['address']?>">
<input type="hidden" name="x_city" value="<?=$_SESSION['user']['city']?>">
<input type="hidden" name="x_state" value="<?=$_SESSION['user']['state']?>">
<input type="hidden" name="x_zip" value="<?=$_SESSION['user']['zip']?>">
<input type="hidden" name="x_phone" value="<?=$_SESSION['user']['phone']?>">
<input type="hidden" name="x_email" value="<?=$_SESSION['user']['email']?>">
<input type="hidden" name="x_cust_id" value="<?=$_SESSION['user']['username']?>">
<INPUT TYPE="HIDDEN" name="x_logo_url" VALUE= "https://secure.authorize.net/mgraphics/logo_99999.gif"&gt;
<INPUT type="hidden" name="x_show_form" value="PAYMENT_FORM">
<!--INPUT type="hidden" name="x_test_request" value="TRUE"-->

<!--input type="hidden" name="x_receipt_link_method" value="POST">
<input type="hidden" name="x_receipt_link_text" value="Click for listings">
<input type="hidden" name="x_receipt_link_url" value="http://website.com/confirmation.php"--&gt;

<input type="hidden" name="x_relay_response" value="TRUE">
<input type="hidden" name="x_relay_url" value="http://website.com/confirmation.php"&gt;
<input type="hidden" name="<?=session_name()?>" value="<?=session_id()?>">

<input type="hidden" name="" value="">
<input type="hidden" name="" value="">
<input type="hidden" name="" value="">
<? if ($total==0) { ?>
    <a href="account.php">Your Account</a>
<? } else { ?>
    <INPUT type="submit" value="Accept Order">
<? } ?>
</form>

And this is what I use for the confirmation.php

include("../../simdata.php");
#print_r($_POST);

// verify transaction comes from authorize.net and save user details
$responseCode = $_POST['x_response_code'];
if ( $responseCode == 1) { // approved
    $md5 = $_POST['x_MD5_Hash'];
    $transId = $_POST['x_trans_id'];
    $amount = $_POST['x_amount'];
    $myMD5 = strtoupper(md5("$x_tran_key$x_loginid$transId$amount"));
    #echo $myMD5;
    #print_r ($_POST);
    #print_r ($_SESSION['user']);

    if ($myMD5 == $md5) { // authenticated response from authorize.net
       ...
    } else {
     $error = "Unauthenticated response.";
    }
} else if (isset($_POST['x_response_code'])) { // error
    $error = $_POST['x_response_reason_text'].", #".$_POST['x_response_code'].'.'.$_POST['x_response_subcode'].
     '.'.$_POST['x_response_reason_code'];
}
Chloe
A: 

Not free but not too expensive: http://www.authnetscripts.com/

pbreitenbach
+1  A: 

this is a decent library to use in CodeIgniter, but it can be used stand-alone:

http://code.google.com/p/authorizenetlib/downloads/detail?name=Authorize%5Fnet-1.0.php

credit: james gifford for the code.

phirschybar
The link no longer appears to be valid.
ocdcoder
A: 

I have used the Payment module included in Kohana 2.3.x with the built-in Authorize.Net driver. http://docs.kohanaphp.com/addons/payment

A: 

Hello,

Can you please let me know what is "include("../../simdata.php");". From where i get this simdata.php file?

Thanks!

Arif
It's good form to put your reply to another answer as a comment, not as another answer as otherwise it wont be seen since answers aren't ordered by time but by votes.
markwatson
A: 

I think simdata.php just contains the transaction data... like the amount, the person's firstname, etc.

jacob beasley
A: 

James Gifford created some Authorize.net code for codeigniter. Download here...

http://jamesgifford.com/programming/codeigniter-authorize-net-library/

I'm using the php sdk I got straight from Authorize.nets dev site...

http://developer.authorize.net/downloads/

jfountain