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/ROBOKASSA.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 ROBOKASSA extends IPaymentProcessor {
	public $type;
	public $name;
	public $mode;

	private $mrh_login;
	private $mrh_pass1;
	private $mrh_pass2;

	public $out_summ;
	public $out_summ_curr;
	public $inv_desc;
	public $inv_id;
	public $crc;
	public $isTest;

	public $paymentURL = "https://merchant.roboxchange.com/Index.aspx";
	public $paymentURLTest = 'https://merchant.roboxchange.com/Index.aspx';

	// return URL
	public $successURL;
	// notify URL
	public $resultURL;
	// fail/cancel URL
	public $failURL;

	public function initialize($data) {
		$this->type      = $data->type;
		$this->name      = $data->name;
		$this->mode      = $data->mode;
		$this->mrh_login = $data->merchant_login;
		$this->mrh_pass1 = $data->merchant_pass_1;
		$this->mrh_pass2 = $data->merchant_pass_2;
	}

	public function getPaymentGatewayUrl() {
		if ($this->mode == "test" || $this->mode == "TEST") {
			$this->isTest = '1';
			return $this->paymentURLTest;
		} else {
			return $this->paymentURL;
		}
	}

	public function getHtmlFields() {
		$html = '';
		$html .= sprintf('<input type="hidden" name="MrchLogin" id="MrchLogin" value="%s" />', $this->mrh_login);
		$html .= sprintf('<input type="hidden" name="OutSum" id="OutSum" value="%s" />', $this->out_summ);
		if ($this->out_summ_curr != 'RUB') {
			$html .= sprintf('<input type="hidden" name="OutSumCurrency" id="OutSumCurrency" value="%s" />', $this->out_summ_curr);
		}
		$html .= sprintf('<input type="hidden" name="InvId" id="InvId" value="%d" />', $this->inv_id);
		$html .= sprintf('<input type="hidden" name="Desc" id="Desc" value="%s" />', $this->inv_desc);
		$html .= sprintf('<input type="hidden" name="SignatureValue" id="SignatureValue" value="%s" />', $this->crc);
		$html .= sprintf('<input type="hidden" name="isTest" id="isTest" value="%s" />', $this->isTest);

		return $html;
	}

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

		return $html;
	}

	public function processTransaction($data, $controller = "payment") {
		// Note: For ROBOKASSA, success, result and fail URL-s are stored in the robokassa merchant account
		$this->successUrl = JRoute::_("index.php?option=com_jbusinessdirectory&task=$controller.processResponse&processor=robokassa", false, 1);
		$this->resultUrl  = JRoute::_("index.php?option=com_jbusinessdirectory&task=$controller.procesAutomaticResponse&processor=robokassa", false, 1);
		$this->failUrl    = JRoute::_("index.php?option=com_jbusinessdirectory&task=$controller.processCancelResponse", false, 1);
		;

		$this->out_summ      = $data->amount;
		$this->inv_desc      = $data->service . " " . $data->description;
		$this->inv_id        = $data->id;
		$this->out_summ_curr = $data->currency;

		$this->crc = md5("$this->mrh_login:$this->out_summ:$this->inv_id:$this->out_summ_curr:$this->mrh_pass1");
		if ($this->out_summ_curr == 'RUB') {
			$this->crc = md5("$this->mrh_login:$this->out_summ:$this->inv_id:$this->mrh_pass1");
		}

		$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($data) {
		$result                       = new stdClass();
		$result->amount               = $data["OutSum"];
		$result->order_id             = $data["InvId"];
		$result->currency             = isset($data["OutSumCurrency"]) ? $data["OutSumCurrency"] : 'RUB';
		$result->payment_date         = date("Y-m-d");
		$result->transaction_id       = $result->order_id . strtotime($result->payment_date);
		$result->processor_type       = $this->type;
		$result->response_code        = '';
		$result->response_message     = '';
		$result->processAutomatically = true;

		$checkSum = $data["SignatureValue"];
		$checkSum = strtoupper($checkSum);

		$local_checksum = strtoupper(md5("$result->amount:$result->order_id:$this->mrh_pass2"));

		// check signature
		if ($checkSum == $local_checksum) {
			echo "OK" . $result->order_id;
			$result->status         = PAYMENT_SUCCESS;
			$result->payment_status = PAYMENT_STATUS_PAID;
		} else {
			$result->status         = PAYMENT_SUCCESS;
			$result->payment_status = PAYMENT_STATUS_PAID;
		}


		return $result;
	}

	public function getPaymentDetails($paymentDetails) {
		return JText::_('LNG_PROCESSOR_ROBOKASSA', true);
	}
}