<?php

require_once("lib-mbapi/include/modules/gateway/gateway.php");

$className = "AuthorizeNet";
$GLOBALS["moduleInfo"][$className] = array(
    "type" => "gateway",
    "status" => PaymentGateway::STATUS_STABLE,
    "version" => "1.0.2",
    "gatewaytype" => "1",
    "displayName" => "AuthorizeNet",
    "author" => "Parallels",
    "capabilities" => array(GATEWAY_CHARGE, GATEWAY_AUTHORIZE, GATEWAY_PRIOR_AUTH_CHARGE, GATEWAY_REFUND, GATEWAY_PARTIAL_REFUND, GATEWAY_VOID, GATEWAY_IPV6_COMPLIANCE),
    "countryCodes" => array("US", "CA"),
);

class AuthorizeNet extends Gateway
{
	public function __construct($params)
	{
		parent::Gateway($params);
		$this->liveURL = "https://secure.authorize.net/gateway/transact.dll";
		$this->testURL = "https://test.authorize.net/gateway/transact.dll";
	}

	/**
	 * {@inheritdoc}
	 */
	public function getModuleInfo()
	{
		return $GLOBALS["moduleInfo"]["AuthorizeNet"];
	}

	/**
	 * {@inheritdoc}
	 */
	public function addDefaultConfigParams()
	{
		static $defaultConfigParams = array(
			array(NULL, NULL, "Login_ID", "", "", "TRANS_AUTHNET_LOGINID", "TRANS_AUTHNET_LOGINID_DESC", "t", 1, 1, 0, null),
			array(NULL, NULL, "Password", "", "", "TRANS_AUTHNET_PASSWORD", "TRANS_AUTHNET_PASSWORD_DESC", "p", 1, 2, 0, null),
			array(NULL, NULL, "Version", "3.1", "", "TRANS_AUTHNET_VERSION","TRANS_AUTHNET_VERSION_DESC", "t", 1, 3, 0, null),
			array(NULL, NULL, "Invoice_Description", "", "", "TRANS_INVOICE_DESCRIPTION", "TRANS_INVOICE_DESCRIPTION_DESC", "t", 0, 4, 0, null),
			array(NULL, NULL, "Generic_Emails", "0", "", "TRANS_GATEWAY_GEN_EMAIL","TRANS_GATEWAY_GEN_EMAIL_DESC", "b", 0, 5, 0, null),
			array(NULL, NULL, "Batch_Recurring", "1", "", "TRANS_BATCH_RECURRING","TRANS_BATCH_RECURRING_DESC", "b", 1, 6, 0, null),
			array(NULL, NULL, "Gateway_URL", "1", "", "TRANS_GATEWAY_URL", "TRANS_GATEWAY_URL_DESC", "r", 1, 7, 0,
				array (
					array(NULL, NULL, "0", "TRANS_LIVE_URL", 0),
					array(NULL, NULL, "1", "TRANS_TESTING_URL", 1)
				)
			),
			array(NULL, NULL, "Testing", "1", "", "TRANS_GATEWAY_TESTING", "TRANS_GATEWAY_TESTING_DESC", "b", 1, 8, 0, null),
			array(NULL, NULL, "card_accept_0", "1", "", "TRANS_ACCEPT_VISA", "TRANS_ACCEPT_VISA_DESC", "b", 1, 9, 0, null),
			array(NULL, NULL, "card_accept_9", "1", "", "TRANS_ACCEPT_DELTA", "TRANS_ACCEPT_DELTA_DESC", "b", 1, 10, 0, null),
			array(NULL, NULL, "card_accept_11", "1", "", "TRANS_ACCEPT_ELECTRON", "TRANS_ACCEPT_ELECTRON_DESC", "b", 1, 11, 0, null),
			array(NULL, NULL, "card_accept_1", "1", "", "TRANS_ACCEPT_MASTERCARD", "TRANS_ACCEPT_MASTERCARD_DESC", "b", 1, 12, 0, null),
			array(NULL, NULL, "card_accept_2", "1", "", "TRANS_ACCEPT_AMEX", "TRANS_ACCEPT_AMEX_DESC", "b", 1, 13, 0, null),
			array(NULL, NULL, "card_accept_3", "1", "", "TRANS_ACCEPT_DISCOVER", "TRANS_ACCEPT_DISCOVER_DESC", "b", 1, 14, 0, null),
			array(NULL, NULL, "card_accept_4", "1", "", "TRANS_ACCEPT_JCB", "TRANS_ACCEPT_JCB_DESC", "b", 1, 15, 0, null),
			array(NULL, NULL, "accept_echeck", "1", "", "TRANS_ACCEPT_ECHECK", "TRANS_ACCEPT_ECHECK_DESC", "b", 1, 16, 0, null),
		);
		return $defaultConfigParams;
	}

	/**
	 * {@inheritdoc}
	 */
	public function execute()
	{
		$this->simulateRefundsForTestURL = 1;
		return $this->runAuthNETProtocol();
	}

	public function getCurlObject($url = '', $fields = '', $cli = 0, $config_identity = NULL)
	{
        $c = parent::getCurlObject($url, $fields, $cli, $config_identity);
		$c->unsetOption("CURLOPT_SSLVERSION"); // PPPM-2240 POODLE
		return $c;
	}
}
