OpenCart 🇺🇦

Схема

public mixed callback ( )

Аргументы

Аргумент Возможный тип Описание
У метода нет аргументов

Описание

Метод пока еще не документирован.

Исходный код

if (isset($this->request->post['custom'])) {
	$order_id = $this->request->post['custom'];
} else {
	$order_id = 0;
}		

$this->load->model('checkout/order');

$order_info = $this->model_checkout_order->getOrder($order_id);

if ($order_info) {
	$request = 'cmd=_notify-validate';

	foreach ($this->request->post as $key => $value) {
		$request .= '&' . $key . '=' . urlencode(html_entity_decode($value, ENT_QUOTES, 'UTF-8'));
	}

	if (!$this->config->get('pp_standard_test')) {
		$curl = curl_init('https://www.paypal.com/cgi-bin/webscr');
	} else {
		$curl = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
	}

	curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_TIMEOUT, 30);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

	$response = curl_exec($curl);

	if (!$response) {
		$this->log->write('PP_STANDARD :: CURL failed ' . curl_error($curl) . '(' . curl_errno($curl) . ')');
	}

	if ($this->config->get('pp_standard_debug')) {
		$this->log->write('PP_STANDARD :: IPN REQUEST: ' . $request);
		$this->log->write('PP_STANDARD :: IPN RESPONSE: ' . $response);
	}

	if ((strcmp($response, 'VERIFIED') == 0 || strcmp($response, 'UNVERIFIED') == 0) && isset($this->request->post['payment_status'])) {
		$order_status_id = $this->config->get('config_order_status_id');

		switch($this->request->post['payment_status']) {
			case 'Canceled_Reversal':
				$order_status_id = $this->config->get('pp_standard_canceled_reversal_status_id');
				break;
			case 'Completed':
				if ((strtolower($this->request->post['receiver_email']) == strtolower($this->config->get('pp_standard_email'))) && ((float)$this->request->post['mc_gross'] == $this->currency->format($order_info['total'], $order_info['currency_code'], $order_info['currency_value'], false))) {
					$order_status_id = $this->config->get('pp_standard_completed_status_id');
				} else {
					$this->log->write('PP_STANDARD :: RECEIVER EMAIL MISMATCH! ' . strtolower($this->request->post['receiver_email']));
				}
				break;
			case 'Denied':
				$order_status_id = $this->config->get('pp_standard_denied_status_id');
				break;
			case 'Expired':
				$order_status_id = $this->config->get('pp_standard_expired_status_id');
				break;
			case 'Failed':
				$order_status_id = $this->config->get('pp_standard_failed_status_id');
				break;
			case 'Pending':
				$order_status_id = $this->config->get('pp_standard_pending_status_id');
				break;
			case 'Processed':
				$order_status_id = $this->config->get('pp_standard_processed_status_id');
				break;
			case 'Refunded':
				$order_status_id = $this->config->get('pp_standard_refunded_status_id');
				break;
			case 'Reversed':
				$order_status_id = $this->config->get('pp_standard_reversed_status_id');
				break;	 
			case 'Voided':
				$order_status_id = $this->config->get('pp_standard_voided_status_id');
				break;								
		}

		if (!$order_info['order_status_id']) {
			$this->model_checkout_order->confirm($order_id, $order_status_id);
		} else {
			$this->model_checkout_order->update($order_id, $order_status_id);
		}
	} else {
		$this->model_checkout_order->confirm($order_id, $this->config->get('config_order_status_id'));
	}

	curl_close($curl);
}