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
Yes I have seen that and tried it. But can't incorporate it to my situation. This is the code they give but I can't find a way to send that:
include_once ("../anet_php_sdk/AuthorizeNet.php");
include_once ("vars.php");
include_once ("util.php");
echo "create profile...<br><br>";
//build xml to post
$content =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
"<createCustomerProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
MerchantAuthenticationBlock().
"<profile>".
"<merchantCustomerId>12346</merchantCustomerId>". // Your own identifier for the customer.
"<description></description>".
"<email>" . $_POST["email"] . "</email>".
"</profile>".
"</createCustomerProfileRequest>";
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 "customerProfileId <b>"
. htmlspecialchars($parsedresponse->customerProfileId)
. "</b> was successfully created.<br><br>";
}
echo "<br><a href=index.php?customerProfileId="
. urlencode($parsedresponse->customerProfileId)
. ">Continue</a><br>";
?>
03-06-2013 10:58 AM
why did you add, this is the sample code and that is for the SDKs
include_once ("../anet_php_sdk/AuthorizeNet.php");
did you read the readme.txt?
it is using
$response = send_xml_request($content);
which is in util.php
03-06-2013 11:28 AM
Yes I have read the readme file and all the documentation many times. I have no trouble using the sample code by itself. One page send data to a page that processes it. Simple. But my current store uses this page that had AIM procedure on it. I am trying to replace that. The function Build() fires off thelogic to send the AIM data.
I can't find a way to send the XML data.
( I included anet_php_sdk/AuthorizeNet.php) becuase I was just including everything until I got it to work.
03-06-2013 11:39 AM
Just to summarize what I had before using AIM I need to change out the contnet in the function called Build() to use CIM. Again sorry the code does not format well in this window.
<?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
?>
03-06-2013 01:02 PM - edited 03-06-2013 01:03 PM
so don't use the build() and add the CIM code.
03-06-2013 03:08 PM
Right but the process () function triggers the build () fuction. I don't see how it will send the XML. The CIM code never runs.
03-06-2013 08:41 PM - edited 03-06-2013 08:41 PM
It doesn't now, not until you add the code to call the CIM function.
03-07-2013 04:09 AM
Thanks RaynorC1emen7. Hopefully with your expertise I can get this working. You seem to know your stuff. This is what I have now. I entered all my CIM code in the build() function. I get this error:
(TESTMODE) The merchant login ID or password is invalid or the account is inactive.
include_once ("XML/util.php");
include_once ("XML/vars.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';
//worksvar $testurl = 'https://test.authorize.net/gateway/transact.dll';
//var $testurl = 'https://apitest.authorize.net/xml/v1/request.api';
//var $liveurl = 'https://test.authorize.net/xml/v1/request.api';
var $testurl = 'https://apitest.authorize.net/xml/v1/request.api';
function AuthorizeNet () {
parent::__construct();
$this->setup('login','password','testmode');
}
function actions () {
add_action('mycart_process_order',array(&$this,'process'));
add_action('mycart_process_order','runxml');
}
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 () {
//create Auth & Capture Transaction
$request = new AuthorizeNetCIM;
$customerProfile = new AuthorizeNetCustomer;
$customerProfile->description = "Description of customer here";
$customerProfile->merchantCustomerId = 987;
//create and add payment profiles and addresses
// add payment profile.
$paymentProfile = new AuthorizeNetPaymentProfile;
$paymentProfile->customerType = "individual";
$paymentProfile->payment->creditCard->cardNumber = $Mycart->Order->Billing->card;
$paymentProfile->payment->creditCard->expirationDate = date("my",$Mycart->Order->Billing->cardexpires);
$paymentProfile->payment->creditCard->cardCode = $Mycart->Order->Billing->cvv;
$customerProfile->paymentProfiles[] = $paymentProfile;
$customerProfile->email = $Order->Customer->email;
//add a shipping address
$address = new AuthorizeNetAddress;
$address->firstName = $Mycart->Order->Customer->firstname;
$address->lastName = $Mycart->Order->Customer->lasttname;
$address->company = "John Doe Company";
$address->address = $Mycart->Order->Shipping->address;
$address->city = $Mycart->Order->Shipping->city;
$address->state = $Mycart->Order->Shipping->state;
$address->zip = $Mycart->Order->Shipping->postcode;
$address->country = $Mycart->Order->Shipping->country;
$address->phoneNumber = $Mycart->Order->Customer->phone;
$response = $request->createCustomerShippingAddress($customerProfileId, $address);
$customerAddressId = $response->getCustomerAddressId();
//create the transaction
$transaction = new AuthorizeNetTransaction;
$transaction->customerProfileId = $customerProfileId;
$transaction->customerPaymentProfileId = $paymentProfileId;
$transaction->customerShippingAddressId = $customerAddressId;
$transaction->amount = $Order->Cart->Totals->total;
//$lineItem = new AuthorizeNetLineItem;
$transaction->lineItems[] = $lineItem;
$response = $request->createCustomerProfileTransaction("AuthCapture", $transaction);
$transactionResponse = $response->getTransactionResponse();
$transactionId = $transactionResponse->transaction_id;
// Line Items
$i = 1;
foreach($Order->Cart->contents as $Item) {
$transaction->lineItems[] = ($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");
}
//build xml to post
function runxml() {
//header('Location: https://apitest.authorize.net/xml/v1/request.api');
//$request = new AuthorizeNetCIM;
//$customerProfile = new AuthorizeNetCustomer;
//$customerProfile->description = "Description of customer here";
//$customerProfile->merchantCustomerId = 987;
//create and add payment profiles and addresses
$content =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
"<createCustomerPaymentProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
MerchantAuthenticationBlock().
"<profile>".
"<merchantCustomerId>9999</merchantCustomerId>". // Your own identifier for the customer.
"<description>none</description>".
"<email></email>".
"</profile>".
"</createCustomerProfileRequest>";
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>";
}
}
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));
}
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
03-07-2013 05:38 AM - edited 03-07-2013 05:38 AM
did you put your loginID, transactionKey in vars.php?
03-07-2013 05:44 AM
Sorry this is the corrected version. Still same error. Yes I have my login ID and transaction key in vars.
include_once ("XML/util.php");
include_once ("XML/vars.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';
//worksvar $testurl = 'https://test.authorize.net/gateway/transact.dll';
//var $testurl = 'https://apitest.authorize.net/xml/v1/request.api';
var $liveurl = 'https://test.authorize.net/xml/v1/request.api';
var $testurl = 'https://apitest.authorize.net/xml/v1/request.api';
function AuthorizeNet () {
parent::__construct();
$this->setup('login','password','testmode');
}
function actions () {
add_action('mycart_process_order',array(&$this,'process'));
add_action('mycart_process_order','runxml');
}
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 () {
($this->settings['testmode'] == "off")?"TRUE":"FALSE"; // Set "TRUE" while testing
//create Auth & Capture Transaction
$request = new AuthorizeNetCIM;
$customerProfile = new AuthorizeNetCustomer;
$customerProfile->description = "Description of customer here";
$customerProfile->merchantCustomerId = 987;
//create and add payment profiles and addresses
// add payment profile.
$paymentProfile = new AuthorizeNetPaymentProfile;
$paymentProfile->customerType = "individual";
$paymentProfile->payment->creditCard->cardNumber = $Mycart->Order->Billing->card;
$paymentProfile->payment->creditCard->expirationDate = date("my",$Mycart->Order->Billing->cardexpires);
$paymentProfile->payment->creditCard->cardCode = $Mycart->Order->Billing->cvv;
$customerProfile->paymentProfiles[] = $paymentProfile;
$customerProfile->email = $Order->Customer->email;
//add a shipping address
$address = new AuthorizeNetAddress;
$address->firstName = $Mycart->Order->Customer->firstname;
$address->lastName = $Mycart->Order->Customer->lasttname;
$address->company = "John Doe Company";
$address->address = $Mycart->Order->Shipping->address;
$address->city = $Mycart->Order->Shipping->city;
$address->state = $Mycart->Order->Shipping->state;
$address->zip = $Mycart->Order->Shipping->postcode;
$address->country = $Mycart->Order->Shipping->country;
$address->phoneNumber = $Mycart->Order->Customer->phone;
$response = $request->createCustomerShippingAddress($customerProfileId, $address);
$customerAddressId = $response->getCustomerAddressId();
//create the transaction
$transaction = new AuthorizeNetTransaction;
$transaction->customerProfileId = $customerProfileId;
$transaction->customerPaymentProfileId = $paymentProfileId;
$transaction->customerShippingAddressId = $customerAddressId;
$transaction->amount = $Order->Cart->Totals->total;
//$lineItem = new AuthorizeNetLineItem;
$transaction->lineItems[] = $lineItem;
$response = $request->createCustomerProfileTransaction("AuthCapture", $transaction);
$transactionResponse = $response->getTransactionResponse();
$transactionId = $transactionResponse->transaction_id;
// Line Items
$i = 1;
foreach($Order->Cart->contents as $Item) {
$transaction->lineItems[] = ($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");
//build xml to post
//header('Location: https://apitest.authorize.net/xml/v1/request.api');
//$request = new AuthorizeNetCIM;
//$customerProfile = new AuthorizeNetCustomer;
//$customerProfile->description = "Description of customer here";
//$customerProfile->merchantCustomerId = 987;
//create and add payment profiles and addresses
$content =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
"<createCustomerPaymentProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">" .
MerchantAuthenticationBlock().
"<profile>".
"<merchantCustomerId>9999</merchantCustomerId>". // Your own identifier for the customer.
"<description>none</description>".
"<email></email>".
"</profile>".
"</createCustomerProfileRequest>";
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>";
}
}
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));
}
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
03-07-2013 05:58 AM