Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

не добавляется заказ


karetnikov

Recommended Posts

Доброе время суток,

сегодня честно купил и установил модуль оплаты Interkassa.

и решил опробовать его в действии, добавил товар стоимостью 1 рубль, заказал его, и проплатил заказ.

но в админке этот заказ не появился! ужас

в чём может быть проблема?

Надіслати
Поділитися на інших сайтах


В этом модуле ошибка есть...

Правда простая но всеже...

В функции

public function success() {
удалил

$this->redirect($this->url->link('checkout/success'));
} else {
if (isset($this->request->post['ik_baggage_fields'])) {
  $this->redirect($this->url->link($this->request->post['ik_baggage_fields'], '', 'SSL'));
} else {
  $this->redirect($this->url->link('checkout/payment', '', 'SSL'));
}
}
эту часть и все заработало...В этой части не нужна валидация, так сюда попадают данные какие нужно заносить в базу после успешной оплаты
  • +1 1
Надіслати
Поділитися на інших сайтах


В этом модуле ошибка есть...

Правда простая но всеже...

В функции

public function success() {
удалил

$this->redirect($this->url->link('checkout/success'));
} else {
if (isset($this->request->post['ik_baggage_fields'])) {
  $this->redirect($this->url->link($this->request->post['ik_baggage_fields'], '', 'SSL'));
} else {
  $this->redirect($this->url->link('checkout/payment', '', 'SSL'));
}
}
эту часть и все заработало...В этой части не нужна валидация, так сюда попадают данные какие нужно заносить в базу после успешной оплаты

спасибо, но Вы указали решение проблемы для версии модуля 1.4. а мне нужно для версии 1.5. пытался сам удалить лишнее, но только накосячил.

вот код файла /catalog/controller/paymebt/shoputilus_ik.php версии 1.5

<?php
/*
* Shoputils
*
* ПРИМЕЧАНИЕ К ЛИЦЕНЗИОННОМУ СОГЛАШЕНИЮ
*
* Этот файл связан лицензионным соглашением, которое можно найти в архиве,
* вместе с этим файлом. Файл лицензии называется: LICENSE.1.5.x.RUS.txt
* Так же лицензионное соглашение можно найти по адресу:
* http://opencart.shoputils.ru/LICENSE.1.5.x.RUS.txt
*
* =================================================================
* OPENCART 1.5.x ПРИМЕЧАНИЕ ПО ИСПОЛЬЗОВАНИЮ
* =================================================================
*  Этот файл предназначен для Opencart 1.5.x. Shoputils не
*  гарантирует правильную работу этого расширения на любой другой
*  версии Opencart, кроме Opencart 1.5.x.
*  Shoputils не поддерживает программное обеспечение для других
*  версий Opencart.
* =================================================================
*/
class ControllerPaymentShoputilsIk extends Controller
{
	private $order;
	private $log;
	private static $LOG_OFF = 0;
	private static $LOG_SHORT = 1;
	private static $LOG_FULL = 2;
	public function __construct($registry)
	{
		parent::__construct($registry);
		$this->language->load('payment/shoputils_ik');
	}
	protected function index()
	{
		$this->data['text_confirm_title'] = $this->language->get('text_confirm_title');
		$this->data['button_confirm'] = $this->language->get('button_confirm');
		$this->data['continue'] = $this->url->link('checkout/success', '', 'SSL');
		$this->load->model('checkout/order');
		$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
		$ik_payment_amount = number_format($this->currency->format($order_info['total'], $this->config->get('shoputils_ik_currency'), $this->currency->getValue($this->config->get('shoputils_ik_currency')), FALSE), 2, '.', '');
		$ik_payment_id = $this->session->data['order_id'];
		$ik_paysystem_alias = '';
		$ik_baggage_fields = '';
		$this->_setData(array(
							 'action' => 'http://www.interkassa.com/lib/payment.php',
							 //Идентификатор магазина
							 //Идентификатор магазина зарегистрированного в системе «INTERKASSA». Узнать его можно в разделе «Настройки магазина».
							 //Пример: 64C18529-4B94-0B5D-7405-F2752F2B716C
							 'ik_shop_id' => $this->config->get('shoputils_ik_shop_id'),
							 //Сумма платежа
							 //Сумма платежа, которую продавец желает получить от покупателя (с учетом валюты и курса магазина, настраивается в «Настройки магазина»). Сумма должна быть больше нуля, дробная часть отделяется точкой.
							 //Пример: 1.00
							 'ik_payment_amount' => $ik_payment_amount,
							 //Идентификатор платежа
							 //В этом поле продавец задает идентификатор покупки в соответствии со своей системой учета. Желательно использовать уникальный номер для каждого платежа, что позволит быстро получить относящуюся к нему информацию через другие интерфейсы системы Interkassa Payment Interface.
							 'ik_payment_id' => $ik_payment_id,
							 //Описание платежа
							 //Описание товара или услуги. Формируется продавцом. Строка добавляется в назначение платежа.
							 //Максимальная длина - 255 символов.
							 //Пример: iPod 80Gb черный
							 'ik_payment_desc' => sprintf($this->language->get('text_ik_payment_desc'), $this->session->data['order_id']),
							 //Способ оплаты (пока не используется)
							 //Поле позволяет заранее определить способ оплаты для покупателя. Для того, что бы покупатель мог сам выбрать способ оплаты, оставьте это поле пустым.
							 //Возможные значения:
							 //<ПУСТО>, webmoneyz, webmoneyu, webmoneyr, webmoneye, ukrmoneyu, ukrmoneyz, ukrmoneyr, ukrmoneye, liberty, pecunix…
							 'ik_paysystem_alias' => $ik_paysystem_alias,
							 //Это поле обрабатываются сервисом Interkassa Payment Interface автоматически и передается на веб-сайт продавца после выполнения платежа.
							 //Максимальная длина - 255 символов.
							 //Пример: email: [email protected], tel: +380441234567
							 'ik_baggage_fields' => $ik_baggage_fields,
							 //Электронная подпись
							 //Контрольная подпись оповещения о выполнении платежа, которая используется для проверки целостности полученной информации и однозначной идентификации отправителя. Несмотря на то, что параметр является не обязательным, мы рекомендуем всегда задавать его для повышения безопасности и сведения к минимуму возможности подделки данных платежа злоумышленником.
							 'ik_sign_hash' => strtoupper(md5($this->config->get('shoputils_ik_shop_id') . ':' .
															  $ik_payment_amount . ':' .
															  $ik_payment_id . ':' .
															  $ik_paysystem_alias . ':' .
															  $ik_baggage_fields . ':' .
															  $this->config->get('shoputils_ik_sign_hash'))),
							 'ik_success_url' => $this->url->link('payment/shoputils_ik/success'),
							 'ik_success_method' => 'POST',
							 'ik_fail_url' => $this->url->link('payment/shoputils_ik/fail'),
							 'ik_fail_method' => 'POST',
							 'ik_status_url' => $this->url->link('payment/shoputils_ik/status'),
							 'ik_status_method' => 'POST',
						));
		$this->id = 'payment';
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/payment/shoputils_ik.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/payment/shoputils_ik.tpl';
		} else {
			$this->template = 'default/template/payment/shoputils_ik.tpl';
		}
		$this->render();
	}
	public function status()
	{
		$this->logWrite('StatusURL: ', self::$LOG_FULL);
		$this->logWrite('  POST:' . var_export($this->request->post, true), self::$LOG_FULL);
		$this->logWrite('  GET:' . var_export($this->request->get, true), self::$LOG_FULL);
		if (!$this->validate(true)) {
			return;
		}
		if ($this->request->post['ik_payment_state'] == 'success') {
			if ($this->order['order_status_id']){
				$this->model_checkout_order->update($this->order['order_id'],
					$this->config->get('shoputils_ik_order_status_id'),
					sprintf($this->language->get('text_comment'),
						$this->request->post['ik_paysystem_alias'],
						$this->request->post['ik_payment_amount'],
						$this->request->post['ik_trans_id']
					),
					true);
			} else {
				$this->model_checkout_order->confirm($this->order['order_id'],
					$this->config->get('shoputils_rk_order_status_id'),
					sprintf($this->language->get('text_comment'),
						$this->request->post['ik_paysystem_alias'],
						$this->request->post['ik_payment_amount'],
						$this->request->post['ik_trans_id']
					));
			}
		}
		$this->sendOk();
	}
	public function success()
	{
		$this->logWrite('SuccessURL', self::$LOG_FULL);
		$this->logWrite('  POST:' . var_export($this->request->post, true), self::$LOG_FULL);
		$this->logWrite('  GET:' . var_export($this->request->get, true), self::$LOG_FULL);
		if ($this->validate(false)) {
			$this->redirect($this->url->link('checkout/success', '', 'SSL'));
		} else {
			$this->redirect($this->url->link('checkout/checkout', '', 'SSL'));
		}
		return true;
	}
	public function fail()
	{
		$this->logWrite('FailURL', self::$LOG_FULL);
		$this->logWrite('  POST:' . var_export($this->request->post, true), self::$LOG_FULL);
		$this->logWrite('  GET:' . var_export($this->request->get, true), self::$LOG_FULL);
		$this->redirect($this->url->link('checkout/checkout', '', 'SSL'));
		return true;
	}
	private function validate($check_sign_hash = true)
	{
		$this->load->model('checkout/order');
		if ($this->request->server['REQUEST_METHOD'] != 'POST') {
			$this->sendForbidden($this->language->get('text_error_post'));
			return false;
		}
		if ($check_sign_hash){
			$ik_sign_hash_string =
					$this->config->get('shoputils_ik_shop_id') . ':' .
					$this->request->post['ik_payment_amount'] . ':' .
					$this->request->post['ik_payment_id'] . ':' .
					$this->request->post['ik_paysystem_alias'] . ':' .
					$this->request->post['ik_baggage_fields'] . ':' .
					$this->request->post['ik_payment_state'] . ':' .
					$this->request->post['ik_trans_id'] . ':' .
					$this->request->post['ik_currency_exch'] . ':' .
					$this->request->post['ik_fees_payer'] . ':' .
					$this->config->get('shoputils_ik_sign_hash');
			$ik_sign_hash = strtoupper(md5($ik_sign_hash_string));
			if (strtoupper($this->request->post['ik_sign_hash']) != $ik_sign_hash) {
				$this->sendForbidden($this->language->get('text_error_ik_sign_hash'));
				$this->logWrite($ik_sign_hash . '=md5(' . $ik_sign_hash_string . ')', self::$LOG_SHORT);
				return false;
			}
		}
		$this->order = $this->model_checkout_order->getOrder($this->request->post['ik_payment_id']);
		if (!$this->order) {
			$this->sendForbidden(sprintf($this->language->get('text_error_order_not_found'), $this->request->post['ik_payment_id']));
			return false;
		}
		return true;
	}
	private function sendForbidden($error)
	{
		$this->logWrite('ERROR: ' . $error, self::$LOG_SHORT);
		header('HTTP/1.1 403 Forbidden');
		echo "<html>
				<head>
				   <title>403 Forbidden</title>
				</head>
				<body>
					<p>$error.</p>
				</body>
		</html>";
	}
	private function sendOk()
	{
		$this->logWrite('OK: ' . http_build_query($this->request->post, '', ','), self::$LOG_SHORT);
		header('HTTP/1.1 200 OK');
		echo "<html><head><title>200 OK</title></head></html>";
	}
	private function _setData($values)
	{
		foreach ($values as $key => $value) {
			if (is_int($key)) {
				$this->data[$value] = $this->language->get($value);
			} else {
				$this->data[$key] = $value;
			}
		}
	}
	private function logWrite($message, $type)
	{
		switch ($this->config->get('shoputils_ik_log')) {
			case self::$LOG_OFF:
				return;
			case self::$LOG_SHORT:
				if ($type == self::$LOG_FULL) {
					return;
				}
		}
		if (!$this->log) {
			$this->log = new Log('shoputils_ik.log');
		}
		$this->log->Write($message);
	}
}
?>
Надіслати
Поділитися на інших сайтах


Я для OpenCart 1.5 ставил...В этой функции

public function success() {
Удали проверку, оставь только

$this->redirect($this->url->link('checkout/success'));
Эта проверка тут никак не сработает, так как сюда уже попадают другие post данные от сервера

if ($this->validate()) {

Заменяй эту проверку

if ($this->validate(false)) {
  $this->redirect($this->url->link('checkout/success', '', 'SSL'));
} else {
  $this->redirect($this->url->link('checkout/checkout', '', 'SSL'));
}
на

$this->redirect($this->url->link('checkout/success', '', 'SSL'));
Смело...на трех магазинах работает и нет никаких проблем
Надіслати
Поділитися на інших сайтах


Я для OpenCart 1.5 ставил...В этой функции

public function success() {
Удали проверку, оставь только

$this->redirect($this->url->link('checkout/success'));
Эта проверка тут никак не сработает, так как сюда уже попадают другие post данные от сервера

if ($this->validate()) {

Заменяй эту проверку

if ($this->validate(false)) {
  $this->redirect($this->url->link('checkout/success', '', 'SSL'));
} else {
  $this->redirect($this->url->link('checkout/checkout', '', 'SSL'));
}
на

$this->redirect($this->url->link('checkout/success', '', 'SSL'));
Смело...на трех магазинах работает и нет никаких проблем
сделал как Вы и сказали, но ничего не изменилось :(
Надіслати
Поділитися на інших сайтах


Включи тогда в настройках вести полный лог событий и просмотри, что приходит в первый раз и что приходит во второй...

тогда можно смотреть будет дальше

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.