Your IP : 216.73.216.84


Current Path : /home/helpink/www/components/com_jbusinessdirectory/classes/payment/processors/
Upload File :
Current File : /home/helpink/www/components/com_jbusinessdirectory/classes/payment/processors/Cardsave.php

<?php
/**
 * @package    J-BusinessDirectory
 *
 * @author     CMSJunkie http://www.cmsjunkie.com/
 * @copyright  Copyright (C) 2007 - 2022 CMSJunkie. All rights reserved.
 * @license    https://www.gnu.org/licenses/agpl-3.0.en.html
 */

defined('_JEXEC') or die('Restricted access');

class Cardsave extends IPaymentProcessor {
	/**
	 * The payment server URL
	 *
	 * @var string
	 */
	private $paymentServerUrl;

	/**
	 * Normal return URL
	 *
	 * @var string ANS512 url
	 */
	private $normalReturnUrl;

	/**
	 * Secret key
	 *
	 * @var string
	 */
	private $password;

	/**
	 * Merchant ID
	 *
	 * @var string N15
	 */
	private $merchantId;

	/**
	 *
	 * @var string
	 */
	private $email;

	/**
	 *
	 * @var string
	 */
	private $transactionType;

	//////////////////////////////////////////////////

	private $paymentUrlTest = 'https://mms.cardsaveonlinepayments.com/Pages/PublicPages/PaymentForm.aspx';
	private $paymentUrl = 'https://mms.cardsaveonlinepayments.com/Pages/PublicPages/PaymentForm.aspx';

	/**
	 * Constructs and initalize an Buckaroo object
	 */
	public function __construct() {
		$this->requestedServices = array();
	}

	/**
	 * Initialize processor with all data
	 *
	 * @param $data
	 */
	public function initialize($data) {
		$this->type         = $data->type;
		$this->name         = $data->name;
		$this->mode         = $data->mode;
		$this->preSharedKey = $data->preSharedKey;
		$this->password     = $data->password;
		$this->merchantId   = $data->merchantId;
		$transactionType    = "SALE";
	}
	//////////////////////////////////////////////////

	/**
	 * Get the payment server URL
	 *
	 * @return the payment server URL
	 */
	public function getPaymentServerUrl() {
		return $this->paymentServerUrl;
	}

	/**
	 * Set the payment server URL
	 *
	 * @param string $url an URL
	 */
	public function setPaymentServerUrl($url) {
		$this->paymentServerUrl = $url;
	}

	//////////////////////////////////////////////////

	/**
	 * Get the currency numeric code
	 *
	 * @return string currency numeric code
	 */
	public function getCurrencyCode() {
		return $this->currencyCode;
	}

	/**
	 * Set the currency code
	 *
	 * @param string $currencyCode
	 */
	public function setCurrencyCode($currencyCode) {
		$this->currencyCode = $currencyCode;
	}

	//////////////////////////////////////////////////

	/**
	 * Get merchant ID
	 *
	 * @return string
	 */
	public function getMerchantId() {
		return $this->merchantId;
	}

	/**
	 * Set the merchant ID
	 *
	 * @param string $merchantdId
	 */
	public function setMerchantId($merchantId) {
		$this->merchantId = $merchantId;
	}

	//////////////////////////////////////////////////

	/**
	 * Get normal return URL
	 *
	 * @return string
	 */
	public function getNormalReturnUrl() {
		return $this->normalReturnUrl;
	}

	/**
	 * Set the normal return URL
	 *
	 * LET OP! De URL mag geen parameters bevatten.
	 *
	 * @param string $normalReturnUrl
	 */
	public function setNormalReturnUrl($normalReturnUrl) {
		$this->normalReturnUrl = $normalReturnUrl;
	}

	//////////////////////////////////////////////////

	/**
	 * Get amount
	 *
	 * @return float
	 */
	public function getAmount() {
		return $this->amount;
	}

	/**
	 * Get formmated amount
	 *
	 * @return int
	 */
	public function getFormattedAmount() {
		return round($this->amount * 100);
	}

	/**
	 * Set amount
	 *
	 * @param float $amount
	 */
	public function setAmount($amount) {
		$this->amount = $amount;
	}

	//////////////////////////////////////////////////


	/**
	 * Get secret key
	 *
	 * @return string
	 */
	public function getSecretKey() {
		return $this->secretKey;
	}

	/**
	 * Set secret key
	 *
	 * @return string
	 */
	public function setSecretKey($secretKey) {
		$this->secretKey = $secretKey;
	}

	/**
	 * Get payment processor html content
	 */
	public function getPaymentProcessorHtml($data = null) {
		$html = "<ul id=\"payment_form_$this->type\" style=\"display:none\" class=\"form-list\">
		<li>
		" . JText::_('LNG_PROCESSOR_CARDSAVE_INFO', true) . "
		</li>
		</ul>";

		return $html;
	}


	protected function getHash() {
		$HashString = "PreSharedKey=" . $this->preSharedKey;
		$HashString = $HashString . '&MerchantID=' . $this->merchantId;
		$HashString = $HashString . '&Password=' . $this->password;
		$HashString = $HashString . '&Amount=' . $this->getFormattedAmount();
		$HashString = $HashString . '&CurrencyCode=' . $this->currencyCode;
		$HashString = $HashString . '&EchoAVSCheckResult=' . 'true';
		$HashString = $HashString . '&EchoCV2CheckResult=' . 'true';
		$HashString = $HashString . '&EchoThreeDSecureAuthenticationCheckResult=' . 'true';
		$HashString = $HashString . '&EchoCardType=' . 'true';
		$HashString = $HashString . '&OrderID=' . $this->orderId;
		$HashString = $HashString . '&TransactionType=' . $this->transactionType;
		$HashString = $HashString . '&TransactionDateTime=' . $this->transactionDateTime;
		$HashString = $HashString . '&CallbackURL=' . $this->returnUrl;

		$HashString = $HashString . '&OrderDescription=' . $this->orderDescription;
		$HashString = $HashString . '&CustomerName=' . '';
		$HashString = $HashString . '&Address1=' . '';
		$HashString = $HashString . '&Address2=' . '';
		$HashString = $HashString . '&Address3=' . '';
		$HashString = $HashString . '&Address4=' . '';
		$HashString = $HashString . '&City=' . '';
		$HashString = $HashString . '&State=' . '';
		$HashString = $HashString . '&PostCode=' . '';
		$HashString = $HashString . '&CountryCode=' . '';
		$HashString = $HashString . '&EmailAddress=' . '';
		$HashString = $HashString . '&PhoneNumber=' . '';

		$HashString = $HashString . '&EmailAddressEditable=false';
		$HashString = $HashString . '&PhoneNumberEditable=false';
		$HashString = $HashString . "&CV2Mandatory=false";
		$HashString = $HashString . "&Address1Mandatory=false";
		$HashString = $HashString . "&CityMandatory=false";
		$HashString = $HashString . "&PostCodeMandatory=false";
		$HashString = $HashString . "&StateMandatory=false";
		$HashString = $HashString . "&CountryMandatory=false";
		$HashString = $HashString . "&ResultDeliveryMethod=" . 'SERVER';
		$HashString = $HashString . "&ServerResultURL=" . $this->notifyUrl;
		$HashString = $HashString . "&PaymentFormDisplaysResult=" . 'false';
		$HashString = $HashString . "&ServerResultURLCookieVariables=" . '';
		$HashString = $HashString . "&ServerResultURLFormVariables=" . '';
		$HashString = $HashString . "&ServerResultURLQueryStringVariables=" . '';
		$HashDigest = sha1($HashString);

		return $HashDigest;
	}

	public function getPaymentGatewayUrl() {
		if ($this->mode == "test") {
			return $this->paymentUrlTest;
		} else {
			return $this->paymentUrl;
		}
	}

	public function gatewaydatetime() {
		$str = date('Y-m-d H:i:s O');
		return $str;
	}

	public function getHtmlFields() {
		$html                      = '';
		$this->transactionDateTime = $this->gatewaydatetime();

		$html .= sprintf('<input type="hidden" name="HashDigest" value="%s"/>', $this->getHash());
		$html .= sprintf('<input type="hidden" name="MerchantID" value="%s"/>', $this->merchantId);
		$html .= sprintf('<input type="hidden" name="Amount" value="%s">', $this->getFormattedAmount());
		$html .= sprintf('<input type="hidden" name="CurrencyCode" value="%s">', $this->currencyCode);
		$html .= sprintf('<input type="hidden" name="EchoAVSCheckResult" value="true">');
		$html .= sprintf('<input type="hidden" name="EchoCV2CheckResult" value="true">');
		$html .= sprintf('<input type="hidden" name="EchoThreeDSecureAuthenticationCheckResult" value="true">');
		$html .= sprintf('<input type="hidden" name="EchoCardType" value="true">');
		$html .= sprintf('<input type="hidden" name="OrderID" value="%s">', $this->orderId);

		$html .= sprintf('<input type="hidden" name="TransactionType" value="%s">', $this->transactionType);
		$html .= sprintf('<input type="hidden" name="TransactionDateTime" value="%s">', $this->transactionDateTime);
		$html .= sprintf('<input type="hidden" name="CallbackURL" value="%s">', $this->returnUrl);
		$html .= sprintf('<input type="hidden" name="OrderDescription" value="%s" />', $this->orderDescription);

		$html .= sprintf('<input type="hidden" name="CustomerName" value="">');
		$html .= sprintf('<input type="hidden" name="Address1" value="">');
		$html .= sprintf('<input type="hidden" name="Address2" value="">');
		$html .= sprintf('<input type="hidden" name="Address3" value="">');
		$html .= sprintf('<input type="hidden" name="Address4" value="">');
		$html .= sprintf('<input type="hidden" name="City" value="">');
		$html .= sprintf('<input type="hidden" name="State" value="">');
		$html .= sprintf('<input type="hidden" name="PostCode" value="">');
		$html .= sprintf('<input type="hidden" name="CountryCode" value="">');
		$html .= sprintf('<input type="hidden" name="EmailAddress" value="">');
		$html .= sprintf('<input type="hidden" name="PhoneNumber" value="">');

		$html .= sprintf('<input type="hidden" name="EmailAddressEditable" value="false">');
		$html .= sprintf('<input type="hidden" name="PhoneNumberEditable" value="false">');
		$html .= sprintf('<input type="hidden" name="CV2Mandatory" value="false">');
		$html .= sprintf('<input type="hidden" name="Address1Mandatory" value="false">');
		$html .= sprintf('<input type="hidden" name="CityMandatory" value="false">');
		$html .= sprintf('<input type="hidden" name="PostCodeMandatory" value="false">');
		$html .= sprintf('<input type="hidden" name="StateMandatory" value="false">');
		$html .= sprintf('<input type="hidden" name="CountryMandatory" value="false">');

		$html .= sprintf('<input type="hidden" name="ResultDeliveryMethod" value="SERVER">');
		$html .= sprintf('<input type="hidden" name="ServerResultURL" id="ServerResultURL" value="%s">', $this->notifyUrl);
		$html .= sprintf('<input type="hidden" name="PaymentFormDisplaysResult" value="false">');
		$html .= sprintf('<input type="hidden" name="ServerResultURLCookieVariables" value="">');
		$html .= sprintf('<input type="hidden" name="ServerResultURLFormVariables" value="">');
		$html .= sprintf('<input type="hidden" name="ServerResultURLQueryStringVariables" value="">');
		$html .= sprintf('<input type="hidden" name="ThreeDSecureCompatMode" value="false">');
		$html .= sprintf('<input type="hidden" name="ServerResultCompatMode" value="false">');

		return $html;
	}

	public function processTransaction($data, $controller = "payment") {
		$this->returnUrl        = JRoute::_("index.php?option=com_jbusinessdirectory&task=$controller.processCardSaveResponse", false, 1);
		$this->notifyUrl        = JRoute::_("index.php?option=com_jbusinessdirectory&task=$controller.processCardSaveAutomaticResponse", false, 1);
		$this->amount           = $data->amount;
		$this->orderDescription = $data->service . " " . $data->description;
		$this->orderId          = $data->id;
		$this->transactionType  = "SALE";
		$this->setCurrencyCode(826);

		$result                 = new stdClass();
		$result->transaction_id = 0;
		$result->amount         = $data->amount;
		$result->payment_date   = date("Y-m-d");
		$result->response_code  = 0;
		$result->order_id       = $data->id;
		$result->currency       = $data->currency;
		$result->processor_type = $this->type;
		$result->status         = PAYMENT_REDIRECT;
		$result->payment_status = PAYMENT_STATUS_PENDING;

		return $result;
	}


	public function processResponse($params) {
		$result = new stdClass();

		$result->amount           = $params["Amount"];
		$result->currencyCode     = $params["CurrencyCode"];
		$result->transaction_id   = $params["CrossReference"];
		$result->order_id         = $params["OrderID"];
		$result->response_code    = $params["StatusCode"];
		$result->response_message = $params["Message"];

		$result->transactionTime = $params["TransactionDateTime"];
		$result->payment_method  = "Card";

		if ($result->response_code == "0") {
			$result->status         = PAYMENT_SUCCESS;
			$result->payment_status = PAYMENT_STATUS_PAID;
		} else {
			$result->status         = PAYMENT_CANCELED;
			$result->payment_status = PAYMENT_STATUS_FAILURE;
		}

		return $result;
	}

	public function getPaymentDetails($paymentDetails) {
		return JText::_('LNG_CARD_SAVE');
	}
}