Не создается транзакция и не меняется статус заказа.
Связка commerce_robokassa и kickstart 2
Устанавливается и настраивается модуль без проблем.
Проверяется работа на тестовом сервере Robokassa.
Во время оформления заказа переходим к пункту с оплатой.
Выбираем Robokassa.
Происходит перенаправление на сайт Robokassa.
Нажимаем успешную операцию.
Возвращаемся на сайт.
Показывается сообщение, что платеж прошел.
Проверяем:
Переходим в Заказы.
Смотрим статус заказа. Он замерз на статусе Оформление заказа: Оплата.
Заходим в раздел Оплаты заказа. Видис, что баланс не 0.00.
Транзакция не создана.
Должно работать так:
....... Возвращаемся на сайт.
Показано сообщение об успешной оплате.
Автомтически создается транзакция.
Происходит смена статуса с Оплаты на Завершен.
No transaction is created and does not change the status of your order.
Ligament commerce_robokassa and kickstart 2
Installed and configured the module without problems.
Checks the operation on the test server Robokassa.
During checkout, go to step with payment.
Choose Robokassa.
Redirected to the website of Robokassa.
Push successful operation.
Return to the site.
Shows a message that the payment has gone through.
Check:
Turn in Orders.
Watch the status of your order. He froze on the status of my order: Payment.
Go to the Payment section of the order. See that the balance is not 0.00.
The transaction is not created.
Should work like this:
....... Return to the site.
See the message on successful payment.
Avtomticheski transaction is created.
There is a change of status with Payment Completed.
Comment | File | Size | Author |
---|---|---|---|
#39 | commerce_robokassa-with_through_transactions-2497615-39.patch | 14.25 KB | lukasss |
Comments
Comment #1
andypostПохоже придется переделать часть логики, чтобы в пакет обмена данными передавался не заказ, а транзакция, поэтому нужно делать 7.x-2.x ветку по аналогии с https://www.drupal.org/project/commerce_interkassa
Comment #2
UksusoFF CreditAttribution: UksusoFF commentedЕсть решение для этой проблемы?
Comment #3
shevgenyТоже интересует. Интеркасса — не катит.
Comment #4
andypostрешение есть - переделать на передачу транзакции, патчи приветствуются
Comment #5
lukasss CreditAttribution: lukasss commentedТоже недавно ковырялся с вашим модулем, на самом деле там всё основное реализовано и исправить этот недостаток не сложно. Я не брал модуль с интерфейсом, а просто решил переписать, чтобы самому вникнуть в код. Сейчас сделал патч с изменениями уже в самом модуле, патч не тестировал вообще, так что на ваш страх и риск. Там есть некоторые вещи которые неплохо было бы в интерфейс перенести, например, выбор статуса заказа после проведения и т.д., но это мелочи. Если что-то не заработает - пишите. В патче изменил функции:
commerce_robokassa_result
commerce_robokassa_create_transaction
commerce_robokassa_success
commerce_robokassa_fail
Comment #6
andypostИсправлено, я так понимаю, только обновление статуса, но теперь транзакции плодятся при каждом ответе шлюза, а всё потому, что передавать шлюзу нужно идентификатор транзакции, а не заказа.
Обязательно нужно учесть, что пользователь может настроить более одного метода оплаты робокассой, с разными параметрами, и тогда транзакция не будет найдена.
Также очень большие нарекания на форматирование кода, соблюдайне плиз https://www.drupal.org/coding-standards
это как success перенаправляет на fail?
те настроенное сообщение не выведется
Comment #7
lukasss CreditAttribution: lukasss commentedЕщё раз всё протестировал:
Пробовали на тестовом сервере?
Если так, то скорее так и должно быть: вы, наверное, переходили по Success Url. Если так, то да, транзакция не создаётся и выводится простое сообщение об оплате, но по Result Url транзакция создается! и по моему тут всё корректно, единственное, что AMOUNT = 0.
Транзакции плодятся и без патча, но передавать, наверное нужно действительно их.
И вторая проблема - это то что когда происходит отказ от платежа, вот тогда он и зависает в корзине.
Сейчас пробую сделать нормальный патч
Comment #8
andypostспасибо за тестирование, я настоятельно рекомендую посмотреть комиты http://cgit.drupalcode.org/commerce_interkassa/log/
там боролись с абсолютно той же проблемой, в итоге единственный выход - сделать версию 2.х (один из важнейших комитов)
то есть - нужно переходить к отправке именно кода транзакции, также крайне важно оперировать правильно инстансом платежной системы, те пользователь запросто может настроить более одного шлюза робокассы (например с разными реквизитами)... в текущей версии это работать не будет, но в интеркассе это исправлено
Comment #9
lukasss CreditAttribution: lukasss commentedКоммиты не читал, но всё же посмотрите пожалуйста ещё один патч
Comment #10
lukasss CreditAttribution: lukasss commentedнемного исправил
Comment #11
andypostВ целом теперь правильно передается транзакция, так что осталлось дочистить код
очень рекомендую выкладывая новый патч прилагать interdiff изменений
тогда реально легче делать ревью и следить за ходом изменений/мыслей
также нужно подумать, как разделить транзакции сохраненные до патча и после
строка или булево значение?
полагаю, что комерсу нужно булево
лишние пробелы в конце строки, www.dreditor.org показывает всё
уверен, что это отладочный код. ибо выводить что-либо не нужно.
Comment #12
lukasss CreditAttribution: lukasss commentedВроде всё почистил, исправил, просмотрел coder.
Проверял только на тестовом сервере!!!
Comment #13
lukasss CreditAttribution: lukasss commentedисправил кое, что
Для чего это может потребоваться?
Comment #14
andypostбегло просмотрел патч, в целом - супер!
довольно много нареканий на пробелы в пустых строках... просьба поправить
#13 чтобы люди после установки новой версии модуля могли обслужить оплаты созданные до обновления
полагаю, что можно написать
hook_update_N()
чтобы обновить данные в таблицахComment #15
andypostтакже приветствуются ревью от остальных заинтересованых! :)
нужно просто проверить работу модуля с патчем... у меня сейчас нет активных акаутов, так что это затруднительно
Comment #16
lukasss CreditAttribution: lukasss commentedвроде все пробелы убрал...
Comment #17
lukasss CreditAttribution: lukasss commentedнет, не все 1 упустил )
Comment #18
lukasss CreditAttribution: lukasss commentedПротестировал сам на рабочем аккаунте, Вроде все работает...
Comment #19
andypost@lukasss большое спасибо за новые патчи и тестирование
главная проблема для принятия - это отсутствие обновления с предыдущей версии, мы не можем потерять платежки, которые Уже созданы на заказы...
ну и было бы хорошо еще пару глаз привлеч для ревью и тестирования
ну и интересный момент с настройками остался:
как-то странно, настроек еще нет но умолчания берутся из них?! по идее должно быть TRUE
а если 2 ака робокассы добавлено? с разными настройками...
Comment #20
lukasss CreditAttribution: lukasss commentedВообще не думал об этом...Вы имеете в виду создание ещё одного способа оплаты на основе уже имеющегося со статусом Custom?
Comment #21
lukasss CreditAttribution: lukasss commentedНу они же берутся из умолчания, которое в форме прописывается
Comment #22
andypost#20 да можно включить более одного идентичного плагина оплаты
#21 это как раз умолчание, которое потом должно в форму попасть, насколько я понимаю
Comment #23
lukasss CreditAttribution: lukasss commentedЕщё потестирую...
Comment #24
sozonov CreditAttribution: sozonov commentedХотел уточнить, можно ли как-нибудь передать номер заказа в робокассу, чтобы там можно было посмотреть номер заказа для текущей транзакции?!
(я использовал #10 патч, может сейчас что-то изменилось уже).
спасибо!
Comment #25
andypostхорошее замечание! сейчас как раз именно номер заказа и передается, но так как патч делает правильно - передает номер транзакции, то стоит передавать и дополнительную информацию
насколько я помню, можно передавать пару дополнительных параметров, но можно и просто расширить информацию в передаваемом описание
Comment #26
UksusoFF CreditAttribution: UksusoFF commentedКогда при использовании тестового сервера должен изменятся статус заказа?
Пробовал отправлять по result url и переходить по success url.
На сайте отображается "Спасибо, оплата прошла успешно!", но статус заказа все равно в ожидании.
Патч применял из #17 поста.
Comment #27
lukasss CreditAttribution: lukasss commentedВы должны в первую очередь смотреть не на статус заказа, а на статус оплаты.
А нужный статус выставляется в настройках рулеса
Comment #28
lukasss CreditAttribution: lukasss commentedстатус заказа я имел в виду
Comment #29
UksusoFF CreditAttribution: UksusoFF commentedТак?
Comment #30
lukasss CreditAttribution: lukasss commentedменяется здесь: admin/commerce/config/payment-methods/manage/commerce_payment_commerce_robokassa/edit/3
Comment #31
UksusoFF CreditAttribution: UksusoFF commentedМожно скрин или экспорт рулса?
Comment #32
lukasss CreditAttribution: lukasss commentedComment #33
UksusoFF CreditAttribution: UksusoFF commentedТам как раз и стоит "Выполнено", только статусы в этом чекбоксе не совпадают с возможными статусами заказа.
Comment #34
lukasss CreditAttribution: lukasss commentedимеете в виду селекте?
Comment #35
UksusoFF CreditAttribution: UksusoFF commentedДа, в селекте.
Comment #36
lukasss CreditAttribution: lukasss commentedВы используете кастомные статусы?
Comment #37
UksusoFF CreditAttribution: UksusoFF commentedНет: http://screenshot.net/lwv43ao
Comment #38
lukasss CreditAttribution: lukasss commentedда, вы правы, сейчас не работает, я работаю над патчем
Comment #39
lukasss CreditAttribution: lukasss commentedТолько прошу сразу камнями не закидывать )))
Много чего поисправлял...
Самое трудное оказалось решить вопрос:
Точнее ту часть с настройками авторедиректа. Ничего лучшего не придумал, как аттачить файл js прямо в альтере формы.
Пришлось полностью переделать логику получению настроек. Теперь они берутся прямо из payment_method, а не из переменной как раньше.
Протестировал с двумя акаунтами: в рабочим и с тестовым.
Вроде всё работает...
У меня теперь новый вопрос: Что делать с рулесом оплаты после удаления модуля? Он остается...
Жду отзывов )
P.S.: Код на корректность и лишние пробелы не проверял пока.
Comment #40
andypostО! это уже больше похоже на то, что я пытался показать в 1-м коментарии
просто в интеркассе тоже было переписывание на вторую версию точно по тем же причинам и там как раз учтены все нюансы
Может имеет смысл пока перенести код на github и заанонсить где-нить, чтобы люди потестировали
Comment #41
lukasss CreditAttribution: lukasss commentedМне можно это сделать?
Если только на drupal.ru )))
Comment #42
lukasss CreditAttribution: lukasss commentedМожет быть Вы обновите свой пост: http://www.drupal.ru/node/70117 ?
Comment #43
shevgenyА вы не смотрели подобный модуль от PayAnyWay (https://www.payanyway.ru/info/w/ru/public/w/partnership/developers/instr...)?
Comment #44
lukasss CreditAttribution: lukasss commentedБегло просмотрел. Не увидел реализации авторедиректа.
Comment #45
keereelСкачал, пропатчил #39, установил. Проверил... Статус заказа меняется на тот, который в rules для этого способа поставил.. Но! Мне необходимо, что бы срабатывало ещё и другое правило, в котором Event - "When an order is first paid in full" (по этому событию активируются проданные лицензии на файлы), и оно не срабатывает, судя по всему это событие не активируется. Уже всю голову сломал, подскажите, плс, как быть?
Comment #46
lukasss CreditAttribution: lukasss commentedНедавно работал c продажей файлов, честно говоря не замечал проблем.
Всё как обычно было, при смене статуса заказа активировалась лицензия.
Смогу протестировать ещё раз чуть позже
Comment #47
dillix CreditAttribution: dillix commented#39 пашет отлично! Энди сделай приз коммит)
Comment #48
dillix CreditAttribution: dillix commentedComment #49
fortis CreditAttribution: fortis as a volunteer commentedя правильно понимаю что commerce_robokassa_create_transaction вызывается в конструкторе формы?
кажется в патче транзакция создается при показе формы, имхо это не верно, но нужно меня проверить)
Comment #50
andypostПолагаю, что изменение довольно сильно изменяет модуль, и его нужно выносить в отдельную ветку 2.x
Также необходимо продумать upgrade path, чтобыпользователи 1.x могли обновиться связав данные предыдущих транзакций.
Именно для миграции данных таск всё еще требует доработок.
Как только будет готов патч, я сразу сделаю 2ю ветку
Comment #51
niko- CreditAttribution: niko- commentedНа досуге сделаю тут рефакторинг в стиле интеркассы
Comment #52
fortis CreditAttribution: fortis as a volunteer commentedв интеркассе транзакция создается в колбеке который вызывает шлюз, так правильнее, создавать ее до оплаты при показе формы не стоит, если есть необходимость отслеживать какие платежи бросили то это видно по статусу заказа да и можно прикрутить воронку/цели от аналитики или метрики
Comment #53
fortis CreditAttribution: fortis as a volunteer commentedи сейчас в робокассе настраивается метод хеширования, лучше сделать чтобы можно было выбирать в админке md5 или другое
> Поддерживаются следующие алгоритмы расчёта хэша: MD5, RIPEMD160, SHA1, SHA256, SHA384, SHA512
Comment #54
dillix CreditAttribution: dillix commentedfortis, если я буду юзать патченную версию у меня сайт сломается?
Comment #55
fortis CreditAttribution: fortis as a volunteer commented@dillix, нет, но я указал на недостаток патча, теоретически тут можно бесконтрольно генерировать сколько угодно транзакций для этого заказа, в итоге будет оплачена одна транзакция, но возможен флуд pending-транзакциями.
ну и так как транзакция создается заранее и ее id открыт (в форме он как hidden), то если на сайте будет возможно провести csrf атаку - получим возможность направлять пользователей на оплату чужих заказов и транзакций
Comment #56
andypostправильно подмечено, по идее транзакция должна создаваться только когда запускается оплата
стоит проверить вариант с редиректом, чтобы не делать hidden поля, по хорошему там должен быть хеш
полагаю, что нужно оставить и добавить комент, почему именно FALSE/TRUE
trailing whitespace
Comment #57
niko- CreditAttribution: niko- commentedКак и обещал сделал версию робокассы с учетом наработок интеркассы тут
Фичи
1. Использованы все наработки интеркассы с учетом того, что протокол робокассы обрезан по сравнению с интеркассой (к примеру нет статустов wait process и отложеных транзакций)
2. модуль умеет грузить и работать с не завершенніми транзациями версии 1.x Для определения что транзакция родная используется параметр shp_order_id если он присутствует это версия 2 если нет 1. соотвественно по разному грузится тразакция.
3. Добавленна поддержка нескольких рулов
4. Версия 2.х не совместима с версией 1.х по настройкам - прийдется перстроить платежный метод и кабинет в робокассе (урлы).
5. Простановка статусов транзакции и ордера происходит drupal commerce way
6. Убраны кастомные страницы success/fail вместо них используется стандартный процесинг редиректа ордера на следующий\прошлый степ (опять же drupal commerce way ) Что позволяет после платежа добавлять шаги как это обычно делается у комерса а не строить костыли
7. Платежная транзакция создается когда ей положено при редиректе на платежку (по аналогии с интеркассой)
Ложка дегтя
1. Так как я не резидент РФ то я не смог зарегестрировать хост и протестировать в связке с робокассой.
2. Провел проверку на включение и "офлайн" тестирование на сайте. Ничего не упало
Онлайн тесты, фидбек, мерж реквесты приветствуются.
Comment #58
niko- CreditAttribution: niko- commentedИ да поддерживаются все доступные в робокассе алгоритмы хеширования
Comment #59
niko- CreditAttribution: niko- commentedТестинг\фиксы прошли успешно вроде все ровно.
Спасибо @dillix за помощь с тестированием
Comment #60
dillix CreditAttribution: dillix commentedПодтверждаю, протестировали в тест моде все работает отлично!
Comment #61
niko- CreditAttribution: niko- commentedВернул отправку order ID в InvId
shp_order_id заменен на shp_trxid
В shp_trxid отправляю GUID транзакции и по нему же происходит загрузка необходимой транзакции на result/fail GUID хранится в remote_id так как Робокасса не использует его.
Добавлена проверка суммы
Comment #62
andypostПредоставил Олегу доступ к проекту, ожидаю ветку 2.х
shp_trxid
таки лучше заменить наshp_txn_id
вроде как это общепринятое именованиеComment #63
niko- CreditAttribution: niko- commentedВерсия 7.x-2.х выпущена, читайте release notes
Comment #64
niko- CreditAttribution: niko- commentedComment #65
dillix CreditAttribution: dillix commentedЗакрываю ишью в связи с выходом ветки 2.x. Там данный функционал реализован.
Comment #66
andypostright status, to make issue visible for 2 weeks