someone asked:
someone answered:
Authorize.net also have a more advanced interface which is more like
RPCs: you do the work locally and they just handle authorization and
capture.
You can download their manuals and code samples (no NDA required) from
http://www.authorizenet.com/support/
Yes! I can HIGHLY recommend using Authorize.net because of their openness
in being able to just use regular HTTP POST over SSL.
I used the cURL (
http://curl.haxx.se) library to post our info to them
and it was so easy.
Before that I had used three different companies that all made you use
some special stupid binary on your server to connect to theirs.
Here it is in PHP, but I hope this helps:
(how weird to be posting PHP code on the Ruby list! ack!)
<?php
/* the basic info for authorize.net. same for every order. */
$passinfo = 'x_Login=YOUR_USERNAME_HERE';
$authinfo=array();
$authinfo['x_ADC_Delim_Data']='TRUE';
$authinfo['x_ADC_Delim_Character']='|';
$authinfo['x_ADC_URL']='FALSE';
$authinfo['x_Method']='CC';
$authinfo['x_Password']='YOUR_PASSWORD_HERE';
$authinfo['x_Recurring_Billing']='FALSE';
$authinfo['x_Type']='AUTH_CAPTURE';
$authinfo['x_Version']='3.0';
$authinfo['x_Email_Customer']='FALSE';
$authinfo['x_Email_Merchant']='FALSE';
$authinfo['x_Tax']='0';
$authinfo['x_Currency_Code']='USD';
$authinfo['x_Invoice_Num']=$invid;
$authinfo['x_Description']=$x_Description;
$authinfo['x_Amount']=$inv['total'];
$authinfo['x_Card_Num']=$_cc_number;
$authinfo['x_Exp_Date']=$_cc_expmonth . $_cc_expyear;
$authinfo['x_Cust_ID']=$c['uid'];
$authinfo['x_First_Name']=$c_firstname;
$authinfo['x_Last_Name']=$c_lastname;
$authinfo['x_Address']=$c['addr1'];
$authinfo['x_City']=$c['city'];
$authinfo['x_State']=$c['state'];
$authinfo['x_Zip']=$c['zip'];
$authinfo['x_Country']=$country;
$authinfo['x_Phone']=$phone;
$authinfo['x_Email']=$c['email'];
$authinfo['x_Customer_IP']=$_SERVER['REMOTE_ADDR'];
$authinfo['x_Ship_To_First_Name']=$i_firstname;
$authinfo['x_Ship_To_Last_Name']=$i_lastname;
$authinfo['x_Ship_To_Address']=$inv['addr1'];
$authinfo['x_Ship_To_City']=$inv['city'];
$authinfo['x_Ship_To_State']=$inv['state'];
$authinfo['x_Ship_To_Zip']=$inv['zip'];
$authinfo['x_Ship_To_Country']=$inv['country'];
/* CREATE THE STRING TO PASS USING cURL */
foreach($authinfo as $fieldname=>$value)
{
$passinfo .= '&' . $fieldname . '=' . $value;
}
/* #-#-#-#-#-#-#-#-#-#-#-# START - CHARGE CARD WITH AUTHORIZE.NET #-#-#-#-#-#-#-#-#-#-#-#-#-# */
/* sometimes we get no response, so I'm going to loop it until we get SOME response */
$approved=0;
while ($approved==0)
{
/* cURL: no headers returned, no direct output to web browser, post info */
$ch = curl_init("
https://secure.authorize.net/gateway/transact.dll");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_REFERER, '
http://www.YOUR_WEBSITE.com');
curl_setopt ($ch, CURLOPT_POSTFIELDS, $passinfo);
$response = curl_exec ($ch);
$response = trim($response);
curl_close ($ch);
/* EXPLODE THE RESPONSE INTO AN ARRAY: $responseline */
$responseline = explode($authinfo['x_ADC_Delim_Character'], $response);
/* APPROVED CODE: 0=no response, 1=successful, 2=declined, 3=error */
$approved = (int)$responseline[0];
}
/* #-#-#-#-#-#-#-#-#-#-#-# END - CHARGE CARD WITH AUTHORIZE.NET #-#-#-#-#-#-#-#-#-#-#-#-#-# */
/* GET JUST WHAT I NEED FROM THE AUTHORIZE.NET RESPONSE */
$bank_response = array();
$bank_response['avs'] = $responseline[5] . ' = ' . $avs_response[$responseline[5]];
$bank_response['response'] = $responseline[0] . ' = ' . $response_code[$responseline[0]];
$bank_response['response_reason'] = $responseline[2] . ' = ' . $response_reason[$responseline[2]];
$bank_response['auth_code'] = $responseline[4];
$bank_response['trans_id'] = $responseline[6];
$bank_response['md5_hash'] = substr($responseline[37], 0, (strlen($responseline[37])-1));
?>