|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
||||||
Интеграция DLE и UNITPAY (Отправка формы методом POST)10.11.2014, 21:57. Показов 12926. Ответов 39
Метки нет (Все метки)
Доброго времени суток!
Сижу, кручу-верчу у себя движок DLE и систему оплаты UNITPAY. И собственно возник вопрос. Описание: У меня на движке стоит модуль ADDNEWS, с помощью которого пользователь может сам разместить новость на главной странице. Для размещения новости создана страница с формой. Пользователь заполняет информацию, и отправляет форму методом POST (Обработчик addnews.php), и новость собственно попадает в БД. Есть система Unitpay Для тех кто не знаком с системой: Кликните здесь для просмотра всего текста
Сторонняя система оплаты, которая имеет собственную форму для оплаты и соответственно свой обработчик этой формы unitpay.php.
Обработчик передает запись о совершении платежа на сервер unitpay, а с сервера возвращается ответ: SUCCESS или ERROR. Так вот. Мне нужна помощь в объединении форм, или указании "как сделать лучше". Нужно что бы при нажатии на кнопку ДОБАВИТЬ НОВОСТЬ, статья не уходила сразу в БД, а открывалась форма для оплаты UNITPAY, и если UNITPAY вернет ответ SUCCESS то тогда только статья добавиться в базу, а при ответе ERROR статья не добавлялась в БД, а пользователя переадресовывало на другу страницу(о неудачной оплате). Конец кода обработчика ADDNEWS.PHP
P\S: Если еще надо какая информация, задавайте вопросы.
0
|
||||||
| 10.11.2014, 21:57 | |
|
Ответы с готовыми решениями:
39
Отправка формы методом post Отправка формы методом $.post Отправка формы методом POST в новое окно |
|
(ノಠ益ಠ)ノ彡┻━┻
|
|
| 11.11.2014, 07:22 | |
|
temkasky, хм, если использовать метод API, то необходимо сделать для пользователя баланс, и перед тем как показать ему кнопку "Добавить новость", он должен его пополнить. Хотя та же история и через форму.
Не по теме: Я думал API PayPal странный, оказывается это еще цветочки... Не ясен смысл того зачем им обращаться на прямую к сайту, если достаточно будет отдать GET запрос с сгенерированным ключем(при передаче запроса на unitpa.ru). Единственный выход что я вижу, это баланс пользователя.
0
|
|
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
||||||
| 11.11.2014, 15:07 [ТС] | ||||||
|
N3stY, Все было бы хорошо, и я переписал бы готовые решения под себя. Если бы у меня была регистрация в принципе(
Мой сайт не предусматривает регистрации, все пользователи, это гости. По другому быть не должно, ибо регистрация это лишний гемор. Есть сайты примеры, на которых сделано это без регистрации. Добавлено через 19 минут Есть еще такой вариант, Сделать так
Можно ли передать на сервер unitpay, отдельные строки из формы Addnews
0
|
||||||
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
||||||
| 11.11.2014, 21:18 [ТС] | ||||||
|
N3stY,
В смысле, нельзя передать отдельные данные формы? Например:
0
|
||||||
|
(ノಠ益ಠ)ノ彡┻━┻
|
|
| 11.11.2014, 21:38 | |
|
Можно сделать следующим образом, добавить таблицу например dle_post_topay, заносить в нее новость, а unitpay передавать ключь этой новости, после того как к обработчику поступят данные о том что счет оплачен, новость переносить в таблицу dle_post.
0
|
|
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
|||||||||||||||||||||||||||
| 11.11.2014, 23:00 [ТС] | |||||||||||||||||||||||||||
|
Добавлено через 1 час 17 минут N3stY, нашел интересную статейку Слежение за изменениями данных в MySQL при помощи PHP Кликните здесь для просмотра всего текста
А что если к такой замечательной возможности MySQL как создание триггеров, способных записывать старые и новые значения данных при вставке, изменении и удалении записей добавить информацию, которой обладает php скрипт? Триггеры MySQL знают:
PHP знает:
Каким же способом можно умудриться записать всю необходимую информацию? Воспользуемся особенностями PHP и MySQL! MySQL умеет создавать временные таблицы, которые живут только пока коннект к бд не закроется, а PHP как раз при открытии каждой страницы — создаёт новый коннект (в абсолютном большинстве конфигураций вебсервера и php). Таким образом, если триггер будет писать ещё и во временную таблицу — мы сможем узнать кто или что в ответе за конкретные изменения. Чуть подробнее — мы можем вначале страницы создавать временную таблицу, если триггер срабатывает, он записывает информацию в таблицу предназначенную для слежения за данными, а айдишники, которые возвращает last_insert_id() записывать во временную таблицу. При завершении работы обращаемся к временной таблице, и если она не пуста — записываем в таблицу изменений всё что хотим из того что знает загруженная PHP страница. Далее — вариант реализации. 1) Начнём с временной таблицы — мы можем её создавать, когда триггер выполняется на странице в первый раз! Для этого нужно всего лишь написать CREATE TEMPORARY TABLE temp_watch_changes IF NOT EXISTS. Есть только небольшая проблема — в текущих версиях MySQL невозможно узнать существует ли временная таблица каким-либо запросом. Поэтому, она обязательно должна быть создана, чтобы не было ошибки, когда через php мы будем выбирать значения. Мы может потрюкачить, а можем всё сделать прямолинейно. В качестве небольшого трюка — в MySQL может одновременно существовать таблица обычная и временная с одинаковым именем. Если есть временная — то будет использоваться именно она. И каждый раз из пхп проверяя есть ли записи внутри таблицы temp_watch_changes там будет либо пусто, либо айдишники записанные триггером и никаких ошибок. Более прямолинейный метод — просто создавать временную таблицу каждый раз при загрузке страницы. На нашем сервере это занимает 0.0008 секунд, что впринципе приемлемо ![]()
Вызываться может так:
Воспользуемся register_shutdown_function, которая позволяет выполнить любую функцию по завершении скрипта. На любом проекте есть файл, который инклюдится всегда — туда её и разместим.
0
|
|||||||||||||||||||||||||||
|
(ノಠ益ಠ)ノ彡┻━┻
|
||||||||||||||||
| 12.11.2014, 01:07 | ||||||||||||||||
|
temkasky, для начала создадим таблицу для временных записей через phpmyadmin
1
|
||||||||||||||||
|
(ノಠ益ಠ)ノ彡┻━┻
|
||||||
| 12.11.2014, 01:27 | ||||||
|
Дальше выбрать по ключику данные из бд. Ключ пишется в столбец autor.
Так же в .htaccess в корне сайта добавить нужно RewriteRule ^тут_имя_обработчика/([0-9]+)(/?)$ путь_к обработчику.php?sec_code=$1 [L] Добавлено через 5 минут Исправил ошибку в коде:
Извиняюсь, в .htaccess в корне сайта добавить нужно RewriteRule ^тут_имя_обработчика/([^/]*)(/?)$ путь_к обработчику.php?sec_code=$1 [L]
0
|
||||||
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
||||||||||||||||||||||||||||||||||||
| 12.11.2014, 11:05 [ТС] | ||||||||||||||||||||||||||||||||||||
|
N3stY,
Воу воу, спасибо спасибо))))) Вот кое-что не понятно 1.
2.
RewriteRule ^тут_имя_обработчика/([^/]*)(/?)$ путь_к обработчику.php?sec_code=$1 [L] может лучше так? RewriteRule ^путь_к обработчику/([^/]*)(/?)$ тут_имя_обработчика.php?sec_code=$1 [L] Добавлено через 2 часа 17 минут а вот еще беда, после нажатия на "отправить" Method not found Добавлено через 41 минуту в тестовой форме инитпея успешный ответ идет вот по такой ссылке
Универсальная форма оплаты Итак, как же дать пользователю возможность оплатить Ваш товар или услугу? Самый простой способ — воспользоваться нашей универсальной формой оплаты: https://unitpay.ru/pay/12549-7... ого+заказа Обратите внимание на передаваемые параметры, без них работа формы невозможна!
в общем нашел я свой затуп. Разобрался во всем, но осталось самое последнее. вот что пишет: Error UnitPay: Получатель отклонил платеж: Character not found Новость добавлена Ваша статья была успешно добавлена в базу данных. После проверки администратором она будет опубликована на сайте. Добавить еще или Вернуться назад Только вот новость не добавляется, ни в post, ни в post_temp. Соответственно Unitpay и не может найти ID куда платить. надеюсь я все правильно заполнил
Кажись я понял, Дело в том что UnitPay ищет статью которой нету (так как в коде сказано: При ответе от сервера SUCCESS > Добавить статью в post_temp) Кажись наоборот надо) Сначала добавить в темп, потом проверить на succes. А потом закинуть в POST, или удалить из TEMP при ERROR ответе. P/S: Ох и понастрачивал я поэм за ночь) Добавлено через 1 час 33 минуты Сделал добавление статьи, до запроса на сервер unitpay, все-равно не находит $title Создаю статью с именем "Dark" > вижу сообщение Получатель отклонил платеж: Character not found Если делать запрос ко мне в бд из сервера unitpay > {"jsonrpc":"2.0","result":{"message":"PA Y is successful"},"id":1} не пойму в чем беда( Добавлено через 18 минут
0
|
||||||||||||||||||||||||||||||||||||
|
(ノಠ益ಠ)ノ彡┻━┻
|
|||||||||||||||||||||||||||||||||||||||||||||||||
| 13.11.2014, 00:11 | |||||||||||||||||||||||||||||||||||||||||||||||||
|
Модуль нужно зарегистрировать, но сначала положить его в папку modules,
Далее в engine.php в папке engine нужно найти:
И .htaccess
Добавлено через 3 минуты Добавлено через 4 минуты И в наше случае ответ должен быть таким:
Этот код должен быть исключительно а addnews.php в папке modules и должен быть таким как я привел выше. Это не правильно:
То есть вот этот код:
Приведите пожалуйста код /unit/index.php Добавлено через 2 минуты Этот код не формы, а API Добавлено через 2 часа 33 минуты Нужно соблюдать последовательность работы скриптов, иначе ничего не выйдет. 1. Код в addnews.php - Срабатывает когда пользователь пытается запостить статью, он его перекидывает на сайт unitpay если все ок, если нет то выведет ошибку. 2. Это скрипт обработчик, на сколько я понял у вас это /unit/index.php, его запускает система unitpay, передав ему данные о счете. Если:
1
|
|||||||||||||||||||||||||||||||||||||||||||||||||
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
|
| 13.11.2014, 00:17 [ТС] | |
|
Спасибо огромное что вникаете в мою проблему.
Сейчас сделаю все так как вы сказали! unitpay.zip Вот собственно модуль unitpay
0
|
|
|
(ノಠ益ಠ)ノ彡┻━┻
|
||||||||
| 13.11.2014, 00:24 | ||||||||
Добавлено через 3 минуты Примеры работы скрипта:
1
|
||||||||
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
||||||
| 13.11.2014, 00:46 [ТС] | ||||||
|
N3stY,
transcode я пересунул из AUTOR в TAGS (поле автор использую для своих целей)
Так как я нуждаюсь в том, что бы при оплате unitpay изменял некоторые опции в новости, а именно autor, approve, fixed. Вот измененный код unit.rar
0
|
||||||
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
||||||
| 13.11.2014, 00:49 [ТС] | ||||||
|
То есть Unitpay должен найти новсть в TEMP, изменить в ней данные, а потом уже разместить в POST
Это код который меняет данные(по крайней мере должен)
0
|
||||||
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
||||||||||||||||||||||||||||||||||||
| 13.11.2014, 02:12 [ТС] | ||||||||||||||||||||||||||||||||||||
Без этой записи все хорошо, но после оплаты, другая беда из за этого - транскод вернуло "http://sw-studio.in/unit/qEXmQtKC2F5yv4uicr5G4o" но...
может вам дать пароль от личного кабинета UP? и доступ к FTP сайта, легче будет понять что тут у меня что-ли) Добавлено через 8 минут А когда включил ModRewrite и попробовал ввести ссылку ответа, то UNIT выдал вот такое
судя по тестам, код который приходит при успехе такой. Сначала идет CHECK
0
|
||||||||||||||||||||||||||||||||||||
|
(ノಠ益ಠ)ノ彡┻━┻
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 13.11.2014, 03:07 | |||||||||||||||||||||||||||||||||||||||||||||||||||
|
temkasky,
Давайте объясню по порядку все пункты. 1. Установка обработчика: В engine.php после:
Открыть .htaccess и добавить строку:
Создать файл unitpay.php и поместить его в modules В файл вставить этот код:
Проверить. Добавлено через 7 минут Так же в коде в addnews.php лучше заменить:
Добавлено через 7 минут 4. Пункт код:
Добавлено через 19 секунд Проверял get запросами в виде Кликните здесь для просмотра всего текста
localhost/unit/254654654fddfssf/&method=check¶ms[account]=user12¶ms[date]=2012-10-0112:32:00¶ms[operator]=beeline¶ms[paymentType]=mc¶ms[projectId]=1¶ms[phone]=9XXXXXXXXX¶ms[sum]=10.00¶ms[sign]=9bdf52a4830779a1383ac24f1b3ed054¶ms[orderSum]=10.00¶ms[orderCurrency]=rub¶ms[unitpayId]=1234567
Добавлено через 4 минуты Этот код просто вбивает в свою таблицу логи транзакции
0
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
|
| 13.11.2014, 03:14 [ТС] | |
|
N3stY, ага, ясно, спасибо, пробую
0
|
|
|
(ノಠ益ಠ)ノ彡┻━┻
|
||||||||||||||||
| 13.11.2014, 03:16 | ||||||||||||||||
|
Хотя, можно воспользоватся и таким методом:
В addnews.php вместо
$response =
0
|
||||||||||||||||
| 13.11.2014, 03:16 | |
|
Помогаю со студенческими работами здесь
20
Отправка данных из формы методом POST на другую страницу Отправка методом POST
Отправка данных методом POST Отправка JSON Методом POST Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|