MiniShop2: Paypal и разные контексты на сайте
Здравствуйте!
Вводное:
У меня есть сайт-магазин. На сайте два языка, сделано через контексты: site.ru и site.ru/en/ и Babel. На сайте есть система приема платежей Paypal, она подключена и работает на первом контексте, но не работает на втором. У PayPal'а стоят в настройках админки нужные страницы: ms2_payment_paypal_success_id и ms2_payment_paypal_cancel_id.
Проблема:
Если клиент на английской части сайта что-то покупает, его пересылают на гейт пейпала, там всё тоже окей, но вот обратно он приходит на неправильный адрес:
site.ru/en/assets/components/minishop2/payment/paypal.php?action=succses&token=EC-000000&PayerID=0000000000 — что вызывает 404 ошибку и платеж НЕ проходит.
Вопрос:
1. Как указать PayPal'у что с английского контекста он должен переходить на site.ru/assets/ а не site.ru/en/assets/?
2. Как прописать страницы для английского контекста о статусах «оплачен» или «отменен»?
Дополнительно:
По поводу второго вопроса: я пытался для контекста создать свои настройки, но из-за того что в оригинале «Тип поля» стоит «numbfield» — настройку не сохранить, отказывается наотрез.
Так же в .htaccses прописано:
Я подозреваю что это одна строка в htaccses, но у меня не получается. :(
Технические данные:
MODX Revolution 2.4.2-pl (traditional)
PHP Version 5.4.44-1+mh1
miniShop2 2.2.0-pl2
Вводное:
У меня есть сайт-магазин. На сайте два языка, сделано через контексты: site.ru и site.ru/en/ и Babel. На сайте есть система приема платежей Paypal, она подключена и работает на первом контексте, но не работает на втором. У PayPal'а стоят в настройках админки нужные страницы: ms2_payment_paypal_success_id и ms2_payment_paypal_cancel_id.
Проблема:
Если клиент на английской части сайта что-то покупает, его пересылают на гейт пейпала, там всё тоже окей, но вот обратно он приходит на неправильный адрес:
site.ru/en/assets/components/minishop2/payment/paypal.php?action=succses&token=EC-000000&PayerID=0000000000 — что вызывает 404 ошибку и платеж НЕ проходит.
Вопрос:
1. Как указать PayPal'у что с английского контекста он должен переходить на site.ru/assets/ а не site.ru/en/assets/?
2. Как прописать страницы для английского контекста о статусах «оплачен» или «отменен»?
Дополнительно:
По поводу второго вопроса: я пытался для контекста создать свои настройки, но из-за того что в оригинале «Тип поля» стоит «numbfield» — настройку не сохранить, отказывается наотрез.
Так же в .htaccses прописано:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(ru|en)/assets(.*)$ assets$2 [L,QSA]
Попытки прописать редирект не помогают. Я плохо знаю синтаксис, может я что-то не так делаю.Я подозреваю что это одна строка в htaccses, но у меня не получается. :(
Технические данные:
MODX Revolution 2.4.2-pl (traditional)
PHP Version 5.4.44-1+mh1
miniShop2 2.2.0-pl2
Комментарии: 3
Даже если в paypal.class.php захардкодить $paymentUrl, то возвращает пустую страницу для других языков :/
оу… нашел решение:
1. захардкодить $paymentUrl в paypal.class.php в папке core/components/minishop2/custom/payment
1. захардкодить $paymentUrl в paypal.class.php в папке core/components/minishop2/custom/payment
$paymentUrl = 'http://сайт.com/assets/components/minishop2/payment/paypal.php';
2. в assets/components/minishop2/payment/paypal.php добавить перед $success id страниц отменыif ($context == 'web') {
$makeId = '277';
} elseif ($context == 'ru') {
$makeId = '278';
}
3. заменить наif ($id = $modx->getOption('ms2_payment_paypal_cancel_id', null, 0)) {
$cancel = $modx->makeUrl($makeId, $context, $params, 'full');
}
Мой знакомый программист нашел решение так:
Вот что он мне оставил, может кому пригодится, актуально только для MiniShop2 2.2!
Описание проблемы:
1) Инициализация оплаты происходит по прямой ссылке paypal.php, вне зависимости от языковой версии.
2) При запросе paypal.php в контексте /en/* файл физически отсутствует на сервере и выдается ошибка 404. Так как информация запроса передается методом POST редирект в .htaccess файле не может помочь с этой проблемой. Возможно создание «симлинка» или копии файла paypal.php с физическим созданием папки /en/* на сервере, но при этом решении нужно изменять условия редиректов движка ModX с самыми интересными последствиями.
3) В условиях редиректов успешной и не успешной оплаты используется конструкция $modx->getOption('ms2_payment_paypal_success_id', null, 0) без указания контекста (языковой версии). При этом получение параметров cancel английской версии не работает.
4) paypal.class.php — файл отвечает за отправку и получение результатов с платежного шлюза. Файл при вызове не содержит информацию языковой версии, поэтому формирование платежной ссылки, а также распознавание результата (hash верификация) проходят только в рублях
Решение:
[index.php]
# Самое начало сайта
if(substr($_SERVER['REQUEST_URI'], 0, 50) == "/en/assets/components/minishop2/payment/paypal.php"){
$ch = curl_init();
$postvars = '';
foreach($_POST as $key=>$value) {
$postvars .= $key. "=". $value. "&";
}
$url = «site.ru».substr($_SERVER['REQUEST_URI'], 3)."&isEng=1";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
curl_close ($ch);
echo $response;
die();
}
# Описание:
Если ссылка на paypal.php содержит /en/ мы переадресуем этот запрос на /web/ контекст передавая в $_GET запросе дополнительный параметр "&isEng=1". Информацию POST мы передаем в том же виде, как она поступила. Ждем результат выполнения запроса и выводим его на экран. Если приходит редирект — следуем редиректу.
Вот что он мне оставил, может кому пригодится, актуально только для MiniShop2 2.2!
Описание проблемы:
1) Инициализация оплаты происходит по прямой ссылке paypal.php, вне зависимости от языковой версии.
2) При запросе paypal.php в контексте /en/* файл физически отсутствует на сервере и выдается ошибка 404. Так как информация запроса передается методом POST редирект в .htaccess файле не может помочь с этой проблемой. Возможно создание «симлинка» или копии файла paypal.php с физическим созданием папки /en/* на сервере, но при этом решении нужно изменять условия редиректов движка ModX с самыми интересными последствиями.
3) В условиях редиректов успешной и не успешной оплаты используется конструкция $modx->getOption('ms2_payment_paypal_success_id', null, 0) без указания контекста (языковой версии). При этом получение параметров cancel английской версии не работает.
4) paypal.class.php — файл отвечает за отправку и получение результатов с платежного шлюза. Файл при вызове не содержит информацию языковой версии, поэтому формирование платежной ссылки, а также распознавание результата (hash верификация) проходят только в рублях
Решение:
[index.php]
# Самое начало сайта
if(substr($_SERVER['REQUEST_URI'], 0, 50) == "/en/assets/components/minishop2/payment/paypal.php"){
$ch = curl_init();
$postvars = '';
foreach($_POST as $key=>$value) {
$postvars .= $key. "=". $value. "&";
}
$url = «site.ru».substr($_SERVER['REQUEST_URI'], 3)."&isEng=1";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $postvars);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
curl_close ($ch);
echo $response;
die();
}
# Описание:
Если ссылка на paypal.php содержит /en/ мы переадресуем этот запрос на /web/ контекст передавая в $_GET запросе дополнительный параметр "&isEng=1". Информацию POST мы передаем в том же виде, как она поступила. Ждем результат выполнения запроса и выводим его на экран. Если приходит редирект — следуем редиректу.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.