liqpay и order_id
#1
Отправлено 03 February 2012 - 04:01 PM
Ошибка! Не передана информация для покупки.
Order ID Нарушена уникальность Order id
пытался в liqpay.php сделать при формировании запроса
$rand=rand(100,999);
$orderID+=$rand;
и такой $orderID передать в запрос,
а с ответа наоборот
$orderID-=$rand;
и с этого роя не выходит нифига есть еще варианты решения?
P.S. операторы приветбанка говорят что ковыряйте свой магазин чтобы он как-то формировал уникальный order_id
#2
Отправлено 03 February 2012 - 04:39 PM
#3
Отправлено 03 February 2012 - 05:06 PM
абсолютно верно! есть в магазине заказ с номером 55, клиент переходит на сайт ликпея оплатить его, но не оплачивает (вводит неверные данные карты или даже просто закрывает окно на первом же шаге оплаты), потом нажимает кнопку "оплатить заказ" в личном кабинете, а ликпей выдаст Order ID Нарушена уникальность Order id. т.е. никто ничего не очищает, и речь идет об одном и том же заказеorder_id является уникальным полем (не может быть двух заказов с одинаковыми order_id), для магазина, конфликты с платежными системами могут возникать при ручном очищении таблицы заказов, при котором сбивается счетчик. Например у Вас человек оплатил заказ 55, Вы очистили вручную таблицу, и когда опять получится закакз 55, то может возникнуть конфликт
#4
Отправлено 04 February 2012 - 12:59 AM
получается нужно чтобы при каждом повторном вызове функции оплаты из личного кабинета к номеру заказа дописывалась какая-то приставка 1 2 3 4абсолютно верно! есть в магазине заказ с номером 55, клиент переходит на сайт ликпея оплатить его, но не оплачивает (вводит неверные данные карты или даже просто закрывает окно на первом же шаге оплаты), потом нажимает кнопку "оплатить заказ" в личном кабинете, а ликпей выдаст Order ID Нарушена уникальность Order id. т.е. никто ничего не очищает, и речь идет об одном и том же заказе
#5
Отправлено 04 February 2012 - 10:33 AM
и передается в ликпей в operation_xml как
$rand=rand(100,999);
$orderID+=$rand;
$request="
в таком варианте, когда ордер_ид суммируется с произвольным числом, и передается на ликпей, можно пробовать оплачивать сколько угодно.
Теперь, когда приходит ответ от ликпея, нужно от полученного ордер_ид отнять $rand, чтобы правильно изменялось состояние заказа - но до этого пока руки не дошли
сам номер заказ в магазине можно не трогать, а уже мутить с ним в модуле оплаты ликпейполучается нужно чтобы при каждом повторном вызове функции оплаты из личного кабинета к номеру заказа дописывалась какая-то приставка 1 2 3 4
#6
Отправлено 04 February 2012 - 10:46 AM
При отказе от оплаты в платежной системе должна формироваться запись вида "заказ #1234 отменен"
И это правильно, но при этом отмена заказа в магазине не происходит, а должна
Тоесть чтобы все работало правильно необходимо допил вать модули платежных систем чтобы они обрабатывали
ответы отказа от платежной системы и переводили заказ в статус отменег
#7
Отправлено 04 February 2012 - 11:17 AM
Вы неправильно рассматриваете логику платежных систем, обьясню в чем причина
При отказе от оплаты в платежной системе должна формироваться запись вида "заказ #1234 отменен"
И это правильно, но при этом отмена заказа в магазине не происходит, а должна
Тоесть чтобы все работало правильно необходимо допил вать модули платежных систем чтобы они обрабатывали
ответы отказа от платежной системы и переводили заказ в статус отменег
речь идет не об отмене заказа! пример: заказываю товар в интернет-магазине, перехожу на страницу оплаты картой, и оказывается что карту забыл на работе, закрываю браузер... приезжаю на работу, беру карту чтобы оплатить заказ, захожу в личный кабинет, выбираю "оплатить заказ", и получаю от ликпея ошибку в ордер_ид, и чтобы мне его оплатить, мне нужно этот же заказ (со стороны клиента) создавать по новой, чтобы ему присвоился новый номер!
#8
Отправлено 04 February 2012 - 12:09 PM
речь идет не об отмене заказа! пример: заказываю товар в интернет-магазине, перехожу на страницу оплаты картой, и оказывается что карту забыл на работе, закрываю браузер... приезжаю на работу, беру карту чтобы оплатить заказ, захожу в личный кабинет, выбираю "оплатить заказ", и получаю от ликпея ошибку в ордер_ид, и чтобы мне его оплатить, мне нужно этот же заказ (со стороны клиента) создавать по новой, чтобы ему присвоился новый номер!
Ну тогда вот вам решение
order_Id + did.mm.hh (+ часы минуты и секунды ) + количество символов в order_I'd
Потом в обработчикеувыбираете все символы после "количества символов order_id"
#9
Отправлено 04 February 2012 - 12:22 PM
Ну тогда вот вам решение
order_Id + did.mm.hh (+ часы минуты и секунды ) + количество символов в order_I'd
Потом в обработчикеувыбираете все символы после "количества символов order_id"
вот и я того же мнения, только я прибавляю не дату, а произвольное число от 100 до 999
теперь основной вопрос - реализация сего чуда кодом
#10
Отправлено 04 February 2012 - 12:27 PM
вот и я того же мнения, только я прибавляю не дату, а произвольное число от 100 до 999
теперь основной вопрос - реализация сего чуда кодом
какое произвольое число, и в итоге в некоторых случаях опять будет тоже самое, дата всегда уникальна, а произвольное число нет
#11
Отправлено 04 February 2012 - 12:53 PM
согласен! но можно увеличить диапазон генерации числа например от 1000000 до 9999999. в таком случае, при нескольких попытках оплаты генерация одинакового числа сводится почти к нулюкакое произвольое число, и в итоге в некоторых случаях опять будет тоже самое, дата всегда уникальна, а произвольное число нет
#12
Отправлено 04 February 2012 - 01:47 PM
согласен! но можно увеличить диапазон генерации числа например от 1000000 до 9999999. в таком случае, при нескольких попытках оплаты генерация одинакового числа сводится почти к нулю
да может и так но зачем это делать если дата всегда удобней и всегда уникальна ничего не нужно к нулю сводить ))
#13
Отправлено 04 February 2012 - 01:48 PM
да это так, мысли вслухда может и так но зачем это делать если дата всегда удобней и всегда уникальна ничего не нужно к нулю сводить ))
#14
Отправлено 04 February 2012 - 09:51 PM
#15
Отправлено 05 February 2012 - 02:20 PM
ВСЕ! модуль исправил! генерит уникальный ордер_ид для одного и того же заказа, и статусы меняет при успешной и неуспешной оплате. кому интересно - поделюсь решением
Так не делают. Если допилил и готов делиться - выкладывай. Если не со всем выкладывай под хайдом. Если не готов делиться - молчи. А то ни туда ни сюда.
---------- Сообщение объединено ----------
И вообще зачем куча тем наплодил?
http://vsupport.club/t296-3.html
http://vsupport.club/t962.html
#16
Отправлено 05 February 2012 - 03:03 PM
Так не делают. Если допилил и готов делиться - выкладывай. Если не со всем выкладывай под хайдом. Если не готов делиться - молчи. А то ни туда ни сюда.
1)
$desc = substr($desc, 0, -1); }
else $desc = str_replace("[orderID]", $orderID, $desc);
$desc = iconv('windows-1251', 'utf-8', $desc);
// делаем уникальным ордер_ид
$rand="_".rand(100000,999999); // по советам R.Sergey, eugene_wb можно использовать дату вместо произвольного числа
$orderID.=$rand;
$request="";
1.2
$url
$url
$Id
$orderID
$amount
$currency
$desc
$phone
card,liqpay,delayed //delayed = оплата налом в терминалах Приватбанка
2)
function after_payment_php($operation_xml, $signature) {
$sign = $this->_getSettingValue('CONF_PAYMENTMODULE_LIQPAY_SECRET');
$resp = base64_decode($operation_xml);
$action = $this->parseTag($resp, 'action');
$orderID = $this->parseTag($resp, 'order_id');
$orderID=substr($orderID,0,strlen($orderID)-7); // убираем лишние символы, которые влепили в ордер_ид в запросе
3) вместо 2 нужно ставить statusID статуса заказа, который должен быть присвоен в зависимости от ответа ликпея
case 'wait_secure': // платеж проверяется службой безопасности
ostSetOrderStatusToOrder($orderID, 2, $this->_getSettingValue('CONF_PAYMENTMODULE_LIQPAY_MESSAGE_WAIT'),$mail);
break;
case 'checksum': // ошибка контрольной суммы
ostSetOrderStatusToOrder($orderID, 2, $this->_getSettingValue('CONF_PAYMENTMODULE_LIQPAY_MESSAGE_CHECKSUM'));
case 'failure': // платеж отклонен системой
ostSetOrderStatusToOrder($orderID, 2, $this->_getSettingValue('CONF_PAYMENTMODULE_LIQPAY_MESSAGE_FAILURE'),$mail,$sms);
прочитал правила - больше не будуИ вообще зачем куча тем наплодил?
Модуль оплаты через LiqPAY
НОРМАЛЬНЫЙ модуль для liqpay