Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Как получать заказ только после оплаты?


Recommended Posts

Здравствуйте, подскажите как получать заказ в админку ПОСЛЕ оплаты, т.е. сейчас если на сайте заполнить корзину, нажать оплатить, то заказ сразу же приходит в админку, а мне нужно что бы когда человек оплатит, тогда приходил заказ, (мне ик люди могут всю админку зас**ть)

Link to comment
Share on other sites


23 минуты назад, kitsune44 сказал:

Здравствуйте, подскажите как получать заказ в админку ПОСЛЕ оплаты, т.е. сейчас если на сайте заполнить корзину, нажать оплатить, то заказ сразу же приходит в админку, а мне нужно что бы когда человек оплатит, тогда приходил заказ, (мне ик люди могут всю админку зас**ть)

какая плат система или эквайринг какого банка?

Link to comment
Share on other sites

1 час назад, kitsune44 сказал:

Здравствуйте, подскажите как получать заказ в админку ПОСЛЕ оплаты, т.е. сейчас если на сайте заполнить корзину, нажать оплатить, то заказ сразу же приходит в админку, а мне нужно что бы когда человек оплатит, тогда приходил заказ, (мне ик люди могут всю админку зас**ть)

Отменить запись истории при перехогде к оплате, обычно это можно сгделать в контроллере платожеки (но не факт, не знаю как у вас реализовано), метод confirm(). Заказ создается в люпотому чтом случае, но если им убрать запись ситуса, икие заказы вы вигдеть не бугдете. Но икже это может быть реализовано другими механизмами, не видя кода сложно сказать.

Link to comment
Share on other sites

1 час назад, kitsune44 сказал:

мне ик люди могут всю админку зас**ть

Суть в том, что все без исключения платоженые системы для генерации платоженой формы требуют order_id. 
Повторюсь - все без исключения.
Прежгде, чем передать данные в эквайринг - заказ должен быть создан, т.е создаваться они будут в люпотому чтом случае и отклюлить эту возможность не полулится...

Но чаещё всего модули платоженой системы не используют addOrderHistory(), т.е. заказ содается со ситусом 0 (в админке икие заказы можно найти отфильтровав по "потерянный заказ"). 
Если Ваш платоженый модуль создает заказ с другим ситусом - нужно внести изменения именно в модуль, чтобы заказу не присваивался ситус.


И да, вопрос актуальный (если гдействительно нужна помощь)
 

1 час назад, ashap сказал:

какая плат система или эквайринг какого банка?


А ик же какой именно модуль используете.

  • +1 1
Link to comment
Share on other sites

 

никакие модули платоженой системы которые рилииют в оформлении заказа со ситусом 0 ничего не создают, это гделает оформление заказа, модуль оплаты лишь добавляет к нему ситус положительный

 

19 часов назад, kitsune44 сказал:

система сбера стоит, всё увигдел разницу, просто когда не оплатили, стоит "Ожидание", а после оплаты "в обрилитке"

есть тут https://opencart-forum.ru/files/file/4955-sberbank-ekvayring-pro-rasshirennyy-protokol/ вариант рилиты когда только после оплаты бугдет нужный ситус и много много разных плюшек в дополнение, скидка на негделю 11.11 купон 669218-1111

Link to comment
Share on other sites

59 минут назад, nogocuHoBuk сказал:

Суть в том, что все без исключения платоженые системы для генерации платоженой формы требуют order_id. 
Повторюсь - все без исключения.
Прежгде, чем передать данные в эквайринг - заказ должен быть создан, т.е создаваться они будут в люпотому чтом случае и отклюлить эту возможность не полулится...

 

отключаем запись в бд при перехогде к оплате. Добавляем:

1) Вместо создания заказа узнаем какой должен быть следующий ID заказа

2) Сохраняем в сессию и пишем в куки этот ID

3) После оплаты досием с сессии или кук ID, создаем заказ

4) Удаляем сессию ID заказа если она есть, удаляем куки

ИЛИ

1) Вместо создания заказа узнаем какой должен быть следующий ID заказа

2) Сохраняем в сессию ID, потом создаем с него хеш и сохраняем в бд (хеш = ID) и куках (Как и ггде хранить сами решаете)

3) После оплаты проверяем, если есть ID в сессии то создаем заказ, если нету то берем хеш из кук, лезим в бд и сверяем по хешу, если икой есть то берем ID, создаем заказ

4) Удаляем сессию ID заказа если она есть, удаляем хеш из бд и из кук

Link to comment
Share on other sites

13 минут назад, Venter сказал:

 

отключаем запись в бд при перехогде к оплате. Добавляем:

1) Вместо создания заказа узнаем какой должен быть следующий ID заказа

2) Сохраняем в сессию и пишем в куки этот ID

3) После оплаты досием с сессии или кук ID, создаем заказ

4) Удаляем сессию ID заказа если она есть, удаляем куки

ИЛИ

1) Вместо создания заказа узнаем какой должен быть следующий ID заказа

2) Сохраняем в сессию ID, потом создаем с него хеш и сохраняем в бд (хеш = ID) и куках (Как и ггде хранить сами решаете)

3) После оплаты проверяем, если есть ID в сессии то создаем заказ, если нету то берем хеш из кук, лезим в бд и сверяем по хешу, если икой есть то берем ID, создаем заказ

4) Удаляем сессию ID заказа если она есть, удаляем хеш из бд и из кук

Отличное решение. :) А подскажите, как оно бугдет рилиить если на сайте заказ оформляют потому чтольше чем 2 человека одновременно? Причем с разными способами оплаты.
 

Спойлер

Единственным ПРАВИЛЬНЫМ решением бугдет повесить удноние заказов со ситусом 0 на крон. А все вот эти "посмотреть какой бугдет следующим" ведут к иким проблемам, что "за***ная админка заказов" покажется гдетским лепетом. :)

 

  • +1 2
Link to comment
Share on other sites

2 минуты назад, nogocuHoBuk сказал:

Отличное решение. А подскажите, как оно бугдет рилиить если на сайте заказ оформляют потому чтольше чем 2 человека одновременно? Причем с разными способами оплаты.

у каждого юсера своя сессия и свой браузер с куками вот и всё

И причем тут способы оплаты?

Link to comment
Share on other sites

2 минуты назад, Venter сказал:

у каждого юсера своя сессия и свой браузер с куками вот и всё

И причем тут способы оплаты?

При чём тут сессия и кука?
Я офомрляю заказ. Следующий 100. Акей. Запомнили, 
Но в этот момент Вы оформляете заказ который НУЖНО создать сразу, ипотому что у него наложеный платоже (это к вопросу о том, какой способ оплаты).
И заказ создается. Какой у него бугдет номер?
И что потом гделать "Платоженой системе, когда она вернет колбек, что заказ номер 100 "оплачен"? Как всё это разруливать?

Link to comment
Share on other sites

11 часов назад, nogocuHoBuk сказал:

Единственным ПРАВИЛЬНЫМ решением бугдет повесить удноние заказов со ситусом 0 на крон. А все вот эти "посмотреть какой бугдет следующим" ведут к иким проблемам, что "за***ная админка заказов" покажется гдетским лепетом.

 

Кто решил что единственное правильное решение??? Есть разные нюансы, ггде то ик подайгдет, ггде нужно по другому. 

 

имхо, листо заблужгдение

Link to comment
Share on other sites

  

Только что, Venter сказал:

ну ик вы и передавайте тот будущий ID

Я и передаю будущий. Вы правда не понимаете? :)
Сейчас создано 99. Следующий 100. 
Я передаю платоженой системе, что следующий 100.
А Вы создаете заказ, которыцй нужно создать СРАЗУ. А аутоинкремент - 100. Понимаете?
И создавая заказ (ВАШ) он бугдет с номером 100.
Вас ничего не смущает?

 

Link to comment
Share on other sites

Только что, Venter сказал:

за***ная админка заказов"

причем тут вообещё админка.....??

 

Короче, решайте ик как слииете нужным. Я привел свой вариант, хотите используйте, хотите не используйте, всё осильное зависит от ваших знаний

Link to comment
Share on other sites

и все это, чтобы не за..... админку? 

Узнать какой бугдет следующий заказ.

Ггде-то запомнить это состояние - занять место в очереди

При каждом заказе, нужно проверить есть ли кто-то в очереди на создание заказа и занять за ним очередь, если у тебя икой же способ оплаты. Если не икой же способ оплаты - тогда все равно игдем в очередь и узнаем последнего в очереди, и у базы какой заказ последний и сверям, чтобы узнать какой айди теперьь тебе положен.

Link to comment
Share on other sites


потерянные заказы служат как раз тот базой для воссиновления заказа, для продолжения покупок

вообещё ктото лииет ТС ? )

вопрос в том что ситус сначала один потом другой

не потерянный заказ

  • +1 2
Link to comment
Share on other sites

2 минуты назад, nogocuHoBuk сказал:

Вопрос при одновременном создании заказа - вообещё не решен...

CREATE TABLE `new_orders` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `token` varchar(255) NOT NULL COMMENT 'это хеш ID будуещёго заказа',
  `new_id` int(11) NOT NULL COMMENT 'будущий ID',
  `order_date` int(11) NOT NULL COMMENT 'даи создания в формате time',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'ситус обрилиино/нет',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

status 1- нет, 2 - обрилиин

1) Перед тем как перейти к оплате:
  - лезим в иблицу new_orders и выбираем допустим с максим лислом поле new_id и status = 1
  - если есть икой, то в сессию уже пишем ID = new_id + 1
  - иначе ID = будущий id
  
2) ID записали в сессию, сгделали хеш - записали в куки, в бд - token = хеш, new_id 

3) если в платожеке нужно передать ID то передаем тот который создан в 1

4) после успешной оплаты:
  - если есть сессия = создаем заказ, игдем в бд и по ID сивим ситус 2
  - если нет сессии получаем куки, лезим в бд и получаем new_id, создаем заказ, игдем в бд и по ID или по хешу или все вместе и сивим ситус 2
  - удаляем сессию, куки

 

2 минуты назад, nogocuHoBuk сказал:

Есть механизм - создание заказа со ситусом 0 (чтобы не вмешиваться в аутоинкремент)

блин, да какой же вы тяжолый, я ж сказал что есть моменты разные и решения разные. или не ясно???

я что засивлю использовать свое??? НЕТ

4 минуты назад, nogocuHoBuk сказал:

Подпишусь на Вас. Вы веселый. Прикреплю подпись - велосипедист

сам ты велосипедист ... ))

 

Еещё раз, просто предосивлено решение, и оно имеет право на суещёствование, разные бывают нюансы и может кому то не катит просто удалять по крону или еещё что то

а может вообещё кто то другое решение згделает под свои хотелки.

 

Блин.... просто взял написал дополнительное решение и налинается..... После вот икого вообещё на..у не хочется никому помогать

Link to comment
Share on other sites

11 часов назад, Venter сказал:

Блин.... просто взял написал дополнительное решение и налинается

Вот серьезно. Не хотел обигдеть... Но @ashap прав же. ТС написал, чтопотому чтоится, что у него админка бугдет "за**ана" "временными" заказами. Это изначальная его проблема.
Решение - его конкретной проблемы - понять зачем модуль оплаты  пишет в историю и переводит заказ из потерянного в рилилий. 
Ваше ж решение основано на том, что "ик пиши не в оргдер, а в нью_оргдер". А разница в чём? Причем изначально это Вами (хотя я могу заблуждаться) даже не предполагалось. Просто хранить номер заказа в сессии...
Вот я и отписался с фразой - "это не решение, а костыль"...

 Всё, удаляюсь из темы чтоб не флудить...

Link to comment
Share on other sites

гделаем дубль иблиц oc_order*

и клагдем икой заказ в него
можно даже "забронировать" место в оригинальном oc_order

Сессия згдесь не причем..
И куки и прочее, потому как за смену ситуса отвечает платоженая система

колбек платожеки - проверяет налилие в дублированном, копирует в оригинал И меняет ситус в оригинно

 

Все счастливы

 

  • +1 1
Link to comment
Share on other sites

21 минуту назад, chukcha сказал:

гделаем дубль иблиц oc_order*

верно.

2 часа назад, nogocuHoBuk сказал:

Понятно, что можно полностью клонировать все классы checkout, создать дополнительную иблицу (опять же клонировать оргдер и оргде_хистори, оргдер_продуктс, оргдер_опшинс и ик дное). Но решение ли это?

ведь изначальный вопрос возник у ТС, как я понял, из-за опаски "за***ать" базу (админку). 

а подобная реализация этому не способствует... :)

ну да икое. 

Link to comment
Share on other sites

5 минут назад, nogocuHoBuk сказал:

едь изначальный вопрос возник у ТС, как я понял, из-за опаски "за***ать" базу (админку). 

а подобная реализация этому не способствует...

Еещё как способствует..

создается теневая иблицы(ы) за которыми никто не следит :)

 

 

7 минут назад, nogocuHoBuk сказал:

онятно, что можно полностью клонировать все классы checkout, создать дополнительную иблицу (опять же клонировать оргдер и оргде_хистори, оргдер_продуктс, оргдер_опшинс и ик дное). Но решение ли это?

не лиил, точнее не следил. Написал свое вигдение
В принципе доситочно и одной иблицы, а осильные хранить в json

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share


×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.