I have this cart and it uses the AIM method. I need to use the CIM. Searching through allthe files there is only one file called Authorize.net.php Below is the code on this page.
<?php class AuthorizeNet extends GatewayFramework implements GatewayModule { var $cards = array("visa", "mc", "amex", "disc", "jcb", "dc"); var $liveurl = 'https://secure.authorize.net/gateway/transact.dll'; var $testurl = 'https://secure.authorize.net/gateway/transact.dll'; function AuthorizeNet () { parent::__construct(); $this->setup('login','password','testmode'); } function actions () { add_action('mycart_process_order',array(&$this,'process')); } function process () { $transaction = $this->build(); $Response = $this->send($transaction); if ($Response->code == '1') { // success $this->Order->transaction($this->txnid($Response),'CHARGED'); return; } elseif ($Response->code == '4') { // flagged for merchant review or risk management $this->Order->transaction($this->txnid($Response),'PENDING'); return; } else $this->error($Response); } function txnid ($Response) { if (empty($Response->transactionid)) return parent::txnid(); return $Response->transactionid; } function error ($Response) { return new MycartError($Response->reason,'authorize_net_error',MYCART_TRXN_ERR, array('code'=>$Response->reasoncode)); } function build () { $Order = $this->Order; $_ = array(); // Options $_['x_test_request'] = ($this->settings['testmode'] == "on")?"TRUE":"FALSE"; // Set "TRUE" while testing $_['x_login'] = $this->settings['login']; $_['x_password'] = $this->settings['password']; $_['x_Delim_Data'] = "TRUE"; $_['x_Delim_Char'] = ","; $_['x_Encap_Char'] = ""; $_['x_version'] = "3.1"; $_['x_relay_response'] = "FALSE"; $_['x_type'] = "AUTH_ONLY"; //= "AUTH_CAPTURE"; $_['x_method'] = "CC"; $_['x_email_customer'] = "FALSE"; $_['x_merchant_email'] = $this->settings['merchant_email']; // Required Fields $_['x_amount'] = $Order->Cart->Totals->total; $_['x_customer_ip'] = $_SERVER["REMOTE_ADDR"]; $_['x_fp_sequence'] = mktime(); $_['x_fp_timestamp'] = time(); // $_['x_fp_hash'] = hash_hmac("md5","{$_['x_login']}^{$_['x_fp_sequence']}^{$_['x_fp_timestamp']}^{$_['x_amount']}",$_['x_password']); // Customer Contact $_['x_first_name'] = $Order->Customer->firstname; $_['x_last_name'] = $Order->Customer->lastname; $_['x_email'] = $Order->Customer->email; $_['x_phone'] = $Order->Customer->phone; // Billing $_['x_card_num'] = $Order->Billing->card; $_['x_exp_date'] = date("my",$Order->Billing->cardexpires); $_['x_card_code'] = $Order->Billing->cvv; $_['x_address'] = $Order->Billing->address; $_['x_city'] = $Order->Billing->city; $_['x_state'] = $Order->Billing->state; $_['x_zip'] = $Order->Billing->postcode; $_['x_country'] = $Order->Billing->country; // Shipping $_['x_ship_to_first_name'] = $Order->Customer->firstname; $_['x_ship_to_last_name'] = $Order->Customer->lastname; $_['x_ship_to_address'] = $Order->Shipping->address; $_['x_ship_to_city'] = $Order->Shipping->city; $_['x_ship_to_state'] = $Order->Shipping->state; $_['x_ship_to_zip'] = $Order->Shipping->postcode; $_['x_ship_to_country'] = $Order->Shipping->country; // Transaction $_['x_freight'] = $Order->Cart->Totals->shipping; $_['x_tax'] = $Order->Cart->Totals->tax; // Line Items $i = 1; foreach($Order->Cart->contents as $Item) { $_['x_line_item'][] = ($i++)."<|>".substr($Item->name,0,31)."<|>".((sizeof($Item->options) > 1)?" (".substr($Item->option->label,0,253).")":"")."<|>".(int)$Item->quantity."<|>".number_format($Item->unitprice,$this->precision,'.','')."<|>".(($Item->tax)?"Y":"N"); } return $this->encode($_); } function send ($data) { if ($this->settings['testmode'] == "on") $url = $this->testurl; else $url = $this->liveurl; $url = apply_filters('mycart_authorize_net_url',$url); return $this->response(parent::send($data,$url)); } function response ($buffer) { $_ = new stdClass(); list($_->code, $_->subcode, $_->reasoncode, $_->reason, $_->authcode, $_->avs, $_->transactionid, $_->invoicenum, $_->description, $_->amount, $_->method, $_->type, $_->customerid, $_->firstname, $_->lastname, $_->company, $_->address, $_->city, $_->state, $_->zip, $_->country, $_->phone, $_->fax, $_->email, $_->ship_to_first_name, $_->ship_to_last_name, $_->ship_to_company, $_->ship_to_address, $_->ship_to_city, $_->ship_to_state, $_->ship_to_zip, $_->ship_to_country, $_->tax, $_->duty, $_->freight, $_->taxexempt, $_->ponum, $_->md5hash, $_->cvv2code, $_->cvv2response) = explode(",",$buffer); return $_; } function settings () { $this->ui->cardmenu(0,array( 'name' => 'cards', 'selected' => $this->settings['cards'] ),$this->cards); $this->ui->text(1,array( 'name' => 'login', 'value' => $this->settings['login'], 'size' => '16', 'label' => __('Enter your AuthorizeNet Login ID.','Mycart') )); $this->ui->password(1,array( 'name' => 'password', 'value' => $this->settings['password'], 'size' => '24', 'label' => __('Enter your AuthorizeNet Password or Transaction Key.','Mycart') )); $this->ui->checkbox(1,array( 'name' => 'testmode', 'checked' => $this->settings['testmode'], 'label' => __('Enable test mode','Mycart') )); } } // END class AuthorizeNet ?>
I was thinking I need to add the XML part to this page. Somehow to have it parse the XML.
//build xml to post $content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" . "<createCustomerProfileTransactionRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" . //MerchantAuthenticationBlock(). "<transaction>". "<profileTransAuthOnly>". "<amount>" . $_['x_amount'] . "</amount>". // should include tax, shipping, and everything. "<shipping>". "<amount></amount>". "<name>Free Shipping</name>". "<description>Free UPS Ground shipping. Ships in 5-10 days.</description>". "</shipping>". "<lineItems>". $_['x_amount'] ."</lineItems>". //"<unitPrice>" . ($_POST["amount"] - 1.00) . "</unitPrice>". "<customerProfileId>12711484</customerProfileId>". "<customerPaymentProfileId>11714901</customerPaymentProfileId>". "<customerShippingAddressId>11804938</customerShippingAddressId>". "<order>". "<invoiceNumber>INV12345</invoiceNumber>". "</order>". "</profileTransAuthOnly>". "</transaction>". "</createCustomerProfileTransactionRequest>"; echo "Raw request: " . htmlspecialchars($content) . "<br><br>"; $response = send_xml_request($content); echo "Raw response: " . htmlspecialchars($response) . "<br><br>"; $parsedresponse = parse_api_response($response); if ("Ok" == $parsedresponse->messages->resultCode) { echo "A transaction was successfully created for customerProfileId <b>" . htmlspecialchars($_POST["customerProfileId"]) . "</b>.<br><br>"; } if (isset($parsedresponse->directResponse)) { echo "direct response: <br>" . htmlspecialchars($parsedresponse->directResponse) . "<br><br>"; $directResponseFields = explode(",", $parsedresponse->directResponse); $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error $responseReasonCode = $directResponseFields[2]; // See http://www.authorize.net/support/AIM_guide.pdf $responseReasonText = $directResponseFields[3]; $approvalCode = $directResponseFields[4]; // Authorization code $transId = $directResponseFields[6]; if ("1" == $responseCode) echo "The transaction was successful.<br>"; else if ("2" == $responseCode) echo "The transaction was declined.<br>"; else echo "The transaction resulted in an error.<br>"; echo "responseReasonCode = " . htmlspecialchars($responseReasonCode) . "<br>"; echo "responseReasonText = " . htmlspecialchars($responseReasonText) . "<br>"; echo "approvalCode = " . htmlspecialchars($approvalCode) . "<br>"; echo "transId = " . htmlspecialchars($transId) . "<br>"; } echo "<br><a href=index.php?customerProfileId=" . urlencode($_POST["customerProfileId"]) . "&customerPaymentProfileId=" . urlencode($_POST["customerPaymentProfileId"]) . "&customerShippingAddressId=" . urlencode($_POST["customerShippingAddressId"]) . ">Continue</a><br>";
Solved! Go to Solution.
โ03-01-2013 06:34 AM
Look like the code have echo the raw xml request. It the data there? Is the url on the vars.php correct?
โ03-07-2013 06:09 AM - edited โ03-07-2013 06:10 AM
Not sure what you are asking about the echo. I didn't change the URL.
$g_loginname = "xxxxx"; // Keep this secure.
$g_transactionkey = "xxxxx"; // Keep this secure.
$g_apihost = "apitest.authorize.net";
$g_apipath = "/xml/v1/request.api";
โ03-07-2013 06:11 AM - edited โ03-07-2013 06:11 AM
And you are using a test account not your production/live account?
โ03-07-2013 06:21 AM
Yes I am using the account they gave me when I signed up with https://test.authorize.net/
Maybe the logic is not correct in the code that checks if its in test mode or not. The old setting inthe build() function had this.
//$_['x_test_request'] = ($this->settings['testmode'] == "on")?"TRUE":"FALSE"; // Set "TRUE" while testing //$_['x_login'] = $this->settings['login']; //$_['x_password'] = $this->settings['password'];
โ03-07-2013 06:25 AM
I made a change to this function to try to see if this might work.
From this....
function send ($data) { if ($this->settings['testmode'] == "off") $url = $this->testurl; else $url = $this->liveurl; $url = apply_filters('mycart_authorize_net_url',$url); return $this->response(parent::send($data,$url)); }
to this... function send ($data) { $url = 'https://apitest.authorize.net/xml/v1/request.api'; $url = apply_filters('mycart_authorize_net_url',$url); return $this->response(parent::send($data,$url)); }
โ03-07-2013 06:34 AM
Isn't send() is only use for AIM?
โ03-07-2013 06:52 AM
I'm not sure but I commented out the send () function to see if that would effect it. But it didn't. Seems the build() function not triggering. It might not get any response from the function error($Response)
โ03-07-2013 07:06 AM - edited โ03-07-2013 07:08 AM
Look to me you are using the SDKs CIM method and adding the sample code CIM. And it only using the SDKs CIM code.
Did you set
define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
define("AUTHORIZENET_SANDBOX", true);
โ03-07-2013 09:10 AM
Just realized it was trying to read another copy of the file Ihave inthe same folder. So. Now getting Fatal error: Class 'AuthorizeNetCustomer' not found.
Where should I put
define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
define("AUTHORIZENET_SANDBOX", true);
โ03-07-2013 10:22 AM - edited โ03-07-2013 10:33 AM
I got this
Fatal error: Class 'AuthorizeNetRequest' not found in C:\inetpub\wwwroot\.....\AuthorizeNet\lib\AuthorizeNetCIM.php on line 19.. I have this at the top of the page.
include_once ('XML/util.php'); include_once ('XML/vars.php'); include_once ('lib/AuthorizeNetCIM.php'); include_once ('lib/shared/AuthorizeNetRequest.php'); include_once ('lib/shared/AuthorizeNetResponse.php'); include_once ('lib/shared/AuthorizeNetTypes.php'); include_once ('lib/shared/AuthorizeNetXMLResponse.php'); $METHOD_TO_USE = "CIM"; class AuthorizeNet extends GatewayFramework implements GatewayModule {
โ03-07-2013 12:17 PM