v7‰PNG
IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ±üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0AºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT
first_total)
{ // free trial
$tr = new Am_Paysystem_Transaction_Free($this);
$tr->setInvoice($invoice);
$tr->process();
$result->setSuccess($tr);
}
else
{
$request = $this->createHttpRequest();
$user = $invoice->getUser();
$ps = new stdclass;
$ps->x_Invoice_Num = $invoice->public_id;
$ps->x_Cust_ID = $invoice->user_id;
$ps->x_Description = $invoice->getLineDescription();
$ps->x_First_Name = $cc->cc_name_f;
$ps->x_Last_Name = $cc->cc_name_l;
$ps->x_Address = $cc->cc_street;
$ps->x_City = $cc->cc_city;
$ps->x_State = $cc->cc_state;
$ps->x_Country = $cc->cc_country;
$ps->x_Zip = $cc->cc_zip;
$ps->x_Tax = $doFirst ? $invoice->first_tax : $invoice->second_tax;
$ps->x_Email = $user->email;
$ps->x_Phone = $cc->cc_phone;
$ps->x_Auth_Code = $cc->getCvv();
$ps->x_Card_Code = $cc->getCvv();
$ps->x_Amount = $doFirst ? $invoice->first_total : $invoice->second_total;
$ps->x_Currency_Code = $invoice->currency;
$ps->x_Card_Num = $cc->cc_number;
$ps->x_Exp_Date = $cc->cc_expire;
$ps->x_Type = 'AUTH_CAPTURE';
$ps->x_Customer_IP = $user->remote_addr ? $user->remote_addr : $_SERVER['REMOTE_ADDR'];
$ps->x_Relay_Response = 'FALSE';
$ps->x_Delim_Data = 'TRUE';
$request->addPostParameter((array) $ps);
$request = $this->_sendRequest($request);
$transaction = new Am_Paysystem_Transaction_AuthorizeAim_Payment($this, $invoice, $request, $doFirst);
$transaction->run($result);
}
}
/** @return HTTP_Request2_Response */
public function _sendRequest(Am_HttpRequest $request)
{
$request->addPostParameter('x_login', $this->getConfig('login'));
$request->addPostParameter('x_tran_key', $this->getConfig('tkey'));
$request->addPostParameter('x_Delim_Data', "True");
$request->addPostParameter('x_Delim_Char', "|");
$request->addPostParameter('x_Version', "3.1");
if ($this->getConfig('testing'))
{
$request->addPostParameter("x_test_request", "TRUE");
$request->setUrl(self::SANDBOX_URL);
}
else
{
$request->setUrl(self::LIVE_URL);
}
$request->setMethod(Am_HttpRequest::METHOD_POST);
return $request;
}
public function processRefund(InvoicePayment $payment, Am_Paysystem_Result $result, $amount)
{
$isVoid = $payment->amount == $amount;
if ($isVoid) {
$request = $this->createHttpRequest();
$request->addPostParameter('x_Type', 'VOID');
$request->addPostParameter('x_Trans_Id', $payment->transaction_id);
$request = $this->_sendRequest($request);
$transaction = new Am_Paysystem_Transaction_AuthorizeAim_Refund($this, $payment->getInvoice(), $request, $payment->transaction_id, $amount);
$transaction->run($result);
}
if(!$isVoid || $result->isFailure()){
// Transaction is settled already, attempt to run CREDIT
$ccRecord = $this->getDi()->getInstance()->CcRecordTable->findFirstBy(array('user_id' =>$payment->getUser()->pk()));
if(!$ccRecord)
{
$result->setFailed('User does not have cc record on file');
return;
}
$result->reset();
$cc = str_replace('*', '', $ccRecord->cc);
$request = $this->createHttpRequest();
$request->addPostParameter('x_Type', 'CREDIT');
$request->addPostParameter('x_Trans_Id', $payment->transaction_id);
$request->addPostParameter('x_card_num', $cc);
$request->addPostParameter('x_Amount', $amount);
$request = $this->_sendRequest($request);
$transaction = new Am_Paysystem_Transaction_AuthorizeAim_Refund($this, $payment->getInvoice(), $request, $payment->transaction_id, $amount);
$transaction->run($result);
}
}
public function _initSetupForm(Am_Form_Setup $form)
{
$form->addText("login")->setLabel("API Login ID\n" .
'can be obtained from the same page as Transaction Key (see below)');
$form->addText("tkey")->setLabel("Transaction Key\n" .
"
The transaction key is generated by the system
and can be obtained from Merchant Interface.
To obtain the transaction key from the Merchant
Interface
- Log into the Merchant Interface
- Select Settings from the Main Menu
- Click on Obtain Transaction Key in the Security section
- Type in the answer to the secret question configured on setup
- Click Submit
");
$form->addAdvCheckbox("testing")->setLabel("Test Mode Enabled");
}
public function canUseMaxmind()
{
return true;
}
}
class Am_Paysystem_Transaction_AuthorizeAim extends Am_Paysystem_Transaction_CreditCard
{
const APPROVED = 1;
const DECLINED = 2;
const ERROR = 3;
const HELD = 4;
protected $response;
protected $res; // Parsed response;
public function __construct(Am_Paysystem_Abstract $plugin, Invoice $invoice, $request, $doFirst)
{
parent::__construct($plugin, $invoice, $request, $doFirst);
}
public function parseResponse()
{
$response = $this->response->getBody();
$this->response->approved = false;
$this->response->error = true;
$vars = explode('|', $response);
if ($vars)
{
if (count($vars) < 10)
{
$this->response->error_message = "Unrecognized response from AuthorizeNet: $response";
return;
}
// Set all fields
$this->response->response_code = $vars[0];
$this->response->response_subcode = $vars[1];
$this->response->response_reason_code = $vars[2];
$this->response->response_reason_text = $vars[3];
$this->response->authorization_code = $vars[4];
$this->response->avs_response = $vars[5];
$this->response->transaction_id = $vars[6];
$this->response->invoice_number = $vars[7];
$this->response->description = $vars[8];
$this->response->amount = $vars[9];
$this->response->method = $vars[10];
$this->response->transaction_type = $vars[11];
$this->response->customer_id = $vars[12];
$this->response->first_name = $vars[13];
$this->response->last_name = $vars[14];
$this->response->company = $vars[15];
$this->response->address = $vars[16];
$this->response->city = $vars[17];
$this->response->state = $vars[18];
$this->response->zip_code = $vars[19];
$this->response->country = $vars[20];
$this->response->phone = $vars[21];
$this->response->fax = $vars[22];
$this->response->email_address = $vars[23];
$this->response->ship_to_first_name = $vars[24];
$this->response->ship_to_last_name = $vars[25];
$this->response->ship_to_company = $vars[26];
$this->response->ship_to_address = $vars[27];
$this->response->ship_to_city = $vars[28];
$this->response->ship_to_state = $vars[29];
$this->response->ship_to_zip_code = $vars[30];
$this->response->ship_to_country = $vars[31];
$this->response->tax = $vars[32];
$this->response->duty = $vars[33];
$this->response->freight = $vars[34];
$this->response->tax_exempt = $vars[35];
$this->response->purchase_order_number = $vars[36];
$this->response->md5_hash = $vars[37];
$this->response->card_code_response = $vars[38];
$this->response->cavv_response = $vars[39];
$this->response->account_number = $vars[40];
$this->response->card_type = $vars[51];
$this->response->split_tender_id = $vars[52];
$this->response->requested_amount = $vars[53];
$this->response->balance_on_card = $vars[54];
$this->response->approved = ($this->response->response_code == self::APPROVED);
$this->response->declined = ($this->response->response_code == self::DECLINED);
$this->response->error = ($this->response->response_code == self::ERROR);
$this->response->held = ($this->response->response_code == self::HELD);
}
else
{
$this->response->error_message = "Error connecting to AuthorizeNet";
}
}
public function getUniqId()
{
return $this->response->transaction_id;
}
public function getAmount()
{
return $this->response->amount;
}
public function validate()
{
if ($this->response->approved)
{
$this->result->setSuccess($this);
}
else
{
$this->result->setFailed($this->getErrorMessage());
}
}
public function getErrorMessage()
{
return!empty($this->response->error_message) ?
$this->response->error_message :
$this->response->response_reason_text;
}
}
class Am_Paysystem_Transaction_AuthorizeAim_Payment extends Am_Paysystem_Transaction_AuthorizeAim
{
function processValidated()
{
$this->invoice->addPayment($this);
}
}
class Am_Paysystem_Transaction_AuthorizeAim_Refund extends Am_Paysystem_Transaction_AuthorizeAim
{
public $amount;
protected $orig_id;
function __construct(Am_Paysystem_Abstract $plugin, Invoice $invoice, $request, $orig_id, $amount)
{
$this->amount = $amount;
parent::__construct($plugin, $invoice, $request, true);
$this->orig_id = $orig_id;
}
function processValidated()
{
$this->invoice->addRefund($this, $this->orig_id, $this->amount);
}
}