First
Last
Address
City
State
Zip
Phone
Credit Card Num
Amount
Exp_date
Card Code
Other
Authorize.Net
Advanced Implementation Method (AIM)
PHP Example Code


This is just a test to:
1) post an HTTP request to the secure Authorize.Net server
2) process feedback from the secure Authorize.Net transaction DLL

"your_login_id_from_authorizenet_goes_here", "x_version" => "3.1", "x_delim_char" => "|", "x_delim_data" => "TRUE", "x_url" => "FALSE", "x_type" => "AUTH_CAPTURE", "x_method" => "CC", "x_tran_key" => "your_transaction_key_from_authorizenet_goes_here", "x_relay_response" => "FALSE", "x_card_num" => "4222222222222", "x_exp_date" => "1209", "x_description" => "Recycled Toner Cartridges", "x_amount" => "7.00", "x_first_name" => "Charles D.", "x_last_name" => "Gaulle", "x_address" => "342 N. Main Street #150", "x_city" => "Ft. Worth", "x_state" => "TX", "x_zip" => "12345", "x_merchant_email" => "your_email_goes_here", "CustomerBirthMonth" => "Customer Birth Month: 12", "CustomerBirthDay" => "Customer Birth Day: 1", "CustomerBirthYear" => "Customer Birth Year: 1959", "SpecialCode" => "Promotion: Spring Sale", "x_encap_char" => "", "x_card_code" => "888", "x_test_request" => "TRUE", ); $fields = ""; foreach( $authnet_values as $key => $value ) $fields .= "$key=" . urlencode( $value ) . "&"; echo "
"; /////////////////////////////////////////////////////////// echo "01: Post the transaction (see the code for specific information):
"; $ch = curl_init("https://test.authorize.net/gateway/transact.dll"); ### Uncomment the line ABOVE for test accounts or BELOW for live merchant accounts ### $ch = curl_init("https://secure.authorize.net/gateway/transact.dll"); curl_setopt($ch, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from response curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1) curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, "& " )); // use HTTP POST to send form data ### curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment this line if you get no gateway response. ### $resp = curl_exec($ch); //execute post and get results curl_close ($ch); echo "
"; /////////////////////////////////////////////////////////// echo "02: Get post results:
"; echo $resp; echo "
"; echo "
"; /////////////////////////////////////////////////////////// echo "03: Parse post results (simple approach)
"; $text = $resp; echo ""; echo ""; echo ""; echo ""; echo "
"; $tok = strtok($text,"|"); while(!($tok === FALSE)){ //while ($tok) { echo "     ".$tok."
"; $tok = strtok("|"); } echo "
"; echo "
"; /////////////////////////////////////////////////////////// echo "04: Parse the results string into individual, meaningful segments:
"; echo ""; /////////////////////////////////////////////////////////// // STATISTICAL USE ONLY: // /////////////////////////////////////////////////////////// echo ""; echo ""; echo ""; echo ""; $howMany = substr_count($resp, "|"); echo ""; echo ""; echo ""; echo ""; /////////////////////////////////////////////////////////// $text = $resp; $h = substr_count($text, "|"); $h++; for($j=1; $j <= $h; $j++){ $p = strpos($text, "|"); if ($p === false) { // note: three equal signs echo ""; echo ""; echo ""; echo ""; echo ""; }else{ $p++; // We found the x_delim_char and accounted for it . . . now do something with it // get one portion of the response at a time $pstr = substr($text, 0, $p); // this prepares the text and returns one value of the submitted // and processed name/value pairs at a time // for AIM-specific interpretations of the responses // please consult the AIM Guide and look up // the section called Gateway Response API $pstr_trimmed = substr($pstr, 0, -1); // removes "|" at the end if($pstr_trimmed==""){ $pstr_trimmed="NO VALUE RETURNED"; } echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; // remove the part that we identified and work with the rest of the string $text = substr($text, $p); } } echo "
"; echo "Length of the returned string from Authorize.Net:"; echo ""; echo strlen($resp); echo "
"; echo "Number of delimiter characters in the returned string:"; echo ""; echo $howMany; echo "
"; // x_delim_char is obviously not found in the last go-around if($j>=69){ echo "Merchant-defined (".$j."): "; echo ": "; echo ""; echo $text; echo "
"; } else { echo $j; echo ": "; echo "
"; echo $text; echo "
"; } echo "
"; switch($j){ case 1: echo "Response Code: "; echo ""; $fval=""; if($pstr_trimmed=="1"){ $fval="Approved"; }elseif($pstr_trimmed=="2"){ $fval="Declined"; }elseif($pstr_trimmed=="3"){ $fval="Error"; } echo $fval; echo "
"; break; case 2: echo "Response Subcode: "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 3: echo "Response Reason Code: "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 4: echo "Response Reason Text: "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 5: echo "Approval Code: "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 6: echo "AVS Result Code: "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 7: echo "Transaction ID: "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 8: echo "Invoice Number (x_invoice_num): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 9: echo "Description (x_description): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 10: echo "Amount (x_amount): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 11: echo "Method (x_method): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 12: echo "Transaction Type (x_type): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 13: echo "Customer ID (x_cust_id): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 14: echo "Cardholder First Name (x_first_name): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 15: echo "Cardholder Last Name (x_last_name): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 16: echo "Company (x_company): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 17: echo "Billing Address (x_address): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 18: echo "City (x_city): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 19: echo "State (x_state): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 20: echo "ZIP (x_zip): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 21: echo "Country (x_country): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 22: echo "Phone (x_phone): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 23: echo "Fax (x_fax): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 24: echo "E-Mail Address (x_email): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 25: echo "Ship to First Name (x_ship_to_first_name): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 26: echo "Ship to Last Name (x_ship_to_last_name): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 27: echo "Ship to Company (x_ship_to_company): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 28: echo "Ship to Address (x_ship_to_address): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 29: echo "Ship to City (x_ship_to_city): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 30: echo "Ship to State (x_ship_to_state): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 31: echo "Ship to ZIP (x_ship_to_zip): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 32: echo "Ship to Country (x_ship_to_country): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 33: echo "Tax Amount (x_tax): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 34: echo "Duty Amount (x_duty): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 35: echo "Freight Amount (x_freight): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 36: echo "Tax Exempt Flag (x_tax_exempt): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 37: echo "PO Number (x_po_num): "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 38: echo "MD5 Hash: "; echo "
"; echo $pstr_trimmed; echo "
"; break; case 39: echo "Card Code Response: "; echo "
"; $fval=""; if($pstr_trimmed=="M"){ $fval="M = Match"; }elseif($pstr_trimmed=="N"){ $fval="N = No Match"; }elseif($pstr_trimmed=="P"){ $fval="P = Not Processed"; }elseif($pstr_trimmed=="S"){ $fval="S = Should have been present"; }elseif($pstr_trimmed=="U"){ $fval="U = Issuer unable to process request"; }else{ $fval="NO VALUE RETURNED"; } echo $fval; echo "
"; break; case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 55: case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: echo "Reserved (".$j."): "; echo "
"; echo $pstr_trimmed; echo "
"; break; default: if($j>=69){ echo "Merchant-defined (".$j."): "; echo ": "; echo "
"; echo $pstr_trimmed; echo "
"; } else { echo $j; echo ": "; echo "
"; echo $pstr_trimmed; echo "
"; } break; } echo "
"; echo "
"; echo "
"; /////////////////////////////////////////////////////////// echo "04: Done.
"; ?>