Перейти к содержанию

Webmoney Payment Gateway


Mano

Рекомендуемые сообщения

Webmoney Payment Gateway


Webmoney Payment Gateway for Invision Community 4.6


 

Ссылка на комментарий
Поделиться на другие сайты

проверить кто-нибудь ещё может? 

у меня ошибка вылезает на моменте нажатия кнопки "оплатить" на форуме. перекидывать в вм и пишет это:

1630316067.jpg.781de21a42abaee43f08c982a4ec8a38.jpg

в логах мерчанта это:

1630316061.jpg.e4d0d92b4fd05aae344f851eb23c01c6.jpg

в логах запроса это: 

1630316064.jpg.b0fdbd82d71c67bf2515cc0ba2d6c770.jpg

 

не передаётся сумма покупки. вопрос - почему? 

Ссылка на комментарий
Поделиться на другие сайты

Я с нексой никогда не работал, у меня даже товары в корзину не хотят попадать:)

 

Ссылка на комментарий
Поделиться на другие сайты

33 минуты назад, Desti сказал:

у меня даже товары в корзину не хотят попадать

ошибка везде. и в подписках, и в пожертвованиях.

Ссылка на комментарий
Поделиться на другие сайты

Да у него в генах ошибка, он из коробки не запускается в dev-режиме :)

Ссылка на комментарий
Поделиться на другие сайты

так и что делать? само вм приложение не фиксится никак? 

Ссылка на комментарий
Поделиться на другие сайты

Найди в webmoney/sources/Webmoney/Webmoney.php

         <input type="hidden" name="LMI_PAYMENT_AMOUNT" value="<?= $transactionAmount;?>">

и замени на

         <input type="hidden" name="LMI_PAYMENT_AMOUNT" value="<?= $transaction->amount->amountAsString();?>">

Не уверен, что это единственная ошибка, но вроде цену он теперь должен передавать правильно. 

Ссылка на комментарий
Поделиться на другие сайты

скорее всего там еще лажа с $transaction>id, надо поменять (везде в том же файле) на $transaction->invoice->id

Ссылка на комментарий
Поделиться на другие сайты

Поля "customerNumber" и "cps_phone" вообще не нужны webmoney, зачем их добавили - непонятно. 

Ссылка на комментарий
Поделиться на другие сайты

Desti спасибо, сдвинулись с места.
теперь после подтверждения платежа кодом вылезает ошибка:
123.PNG.1c919b9abf618684e662bcbafefa11e6.PNG

на форуме вм есть подобная тема, там советуют проверить файл на доступ через один сайт.
Result URL (/index.php?app=webmoney&module=webmoney&controller=controller) доступен:
123123.PNG.07e84e94e0fe82942d3c653341458f13.PNG

а вот Success и Fail (/index.php?app=webmoney&module=webmoney&controller=controller&success=1) выдают ошибку:
123123123.PNG.2ab4a6b5d357894c74b53c5898f716f7.PNG

нужно какие-то права на файл ставить?

также, при прямом вызове через форуме лезет это:

Спойлер

321.thumb.PNG.57daef6183a68f14b4f5a3ebc5d78b47.PNG

 

Ссылка на комментарий
Поделиться на другие сайты

39 минут назад, by_ix сказал:

а вот Success и Fail (/index.php?app=webmoney&module=webmoney&controller=controller&success=1) выдают ошибку:

Права - ерунда, ошибка программная.

Вполне логично выдают, там не хватает параметра LMI_PAYMENT_NO, который должен приходить в ответе сервера на транзакцию. Где-то теряется:)

Надо как-то поймать строку, которую сервер передает в контроллер, без этого дело не продвинется. У меня все запросы-подтверждения пишутся в базу, можно всегда найти пропущенный платеж.

 

 

Cоздайте табличку 'debug' в базе, два поля, 'id', int(10) автоинкрементный и  'data', тип text. 

потом в нужных местах (в каждом условии в файле controller.php) поставьте  

\IPS\Db::i()->insert( 'debug', json_encode(\IPS\Request::i()));

Попробуйте оплатить, потом посмотрите в табличку что за запрос он присылает.

Сорри,

\IPS\Db::i()->insert( 'debug', array('data' =>json_encode(\IPS\Request::i())));

Ссылка на комментарий
Поделиться на другие сайты

Desti при каждой оплате только одна строка добавляется.
123123.PNG.f32b11bd5e74ab6784c370836b362662.PNG

я правильно понял, так же вставить?

Спойлер

<?php


namespace IPS\webmoney\modules\front\webmoney;

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
    header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
    exit;
}

/**
 * controller
 */
class _controller extends \IPS\Dispatcher\Controller
{
    /**
     * Execute
     *
     * @return    void
     */
    public function execute()
    {
        
        parent::execute();
    }

    /**
     * ...
     *
     * @return    void
     */
    protected function manage()
    {
        if ( \IPS\Request::i()->fail ) {

            \IPS\Db::i()->insert( 'debug', array('data' =>json_encode(\IPS\Request::i())));
            $transaction = \IPS\nexus\Transaction::load( \IPS\Request::i()->LMI_PAYMENT_NO );
            \IPS\Output::i()->redirect( $transaction->invoice->checkoutUrl()->setQueryString( array( '_step' => 'checkout_pay', 'err' => $transaction->member->language()->addToStack('gateway_err') ) ) );//'� ���������, ������� ������ ���������� ��������!');
        }

        if ( \IPS\Request::i()->LMI_PREREQUEST ) {

            \IPS\Db::i()->insert( 'debug', array('data' =>json_encode(\IPS\Request::i())));
            $transaction = \IPS\nexus\Transaction::load( \IPS\Request::i()->LMI_PAYMENT_NO );

            $settings = json_decode( $transaction->method->settings, TRUE );

            if(\IPS\Request::i()->LMI_PAYMENT_AMOUNT==$transactionAmount
                &&\IPS\Request::i()->LMI_PAYEE_PURSE==($transaction->amount->currency=='RUB'?$settings['RWallet']:$settings['ZWallet'])) echo 'YES';
        }

        if ( \IPS\Request::i()->LMI_HASH ) {

            \IPS\Db::i()->insert( 'debug', array('data' =>json_encode(\IPS\Request::i())));
            $transaction = \IPS\nexus\Transaction::load( \IPS\Request::i()->LMI_PAYMENT_NO );

            $settings = json_decode( $transaction->method->settings, TRUE );

            $key = \IPS\Request::i()->LMI_PAYEE_PURSE . \IPS\Request::i()->LMI_PAYMENT_AMOUNT .\IPS\Request::i()->LMI_PAYMENT_NO .\IPS\Request::i()->LMI_MODE.\IPS\Request::i()->LMI_SYS_INVS_NO .
            \IPS\Request::i()->LMI_SYS_TRANS_NO .\IPS\Request::i()->LMI_SYS_TRANS_DATE .
            $settings['LMI_SECRET_KEY'].\IPS\Request::i()->LMI_PAYER_PURSE .\IPS\Request::i()->LMI_PAYER_WM;
            
            $sha256 = strtoupper(hash("sha256", $key));

            if($sha256 == \IPS\Request::i()->LMI_HASH) {
                $transaction->gw_id = \IPS\Request::i()->LMI_SYS_TRANS_NO;
                $transaction->save();
                $transaction->member = \IPS\Member::load( \IPS\Request::i()->customerNumber );
                $maxMind = NULL;
                if ( \IPS\Settings::i()->maxmind_key )
                {
                    $maxMind = new \IPS\nexus\Fraud\MaxMind\Request;
                    $maxMind->setTransaction( $transaction );
                }

                $transaction->checkFraudRulesAndCapture( $maxMind );
            }
        }

        if ( \IPS\Request::i()->success ) {

            \IPS\Db::i()->insert( 'debug', array('data' =>json_encode(\IPS\Request::i())));
            $transaction = \IPS\nexus\Transaction::load( \IPS\Request::i()->LMI_PAYMENT_NO );
            \IPS\Output::i()->redirect( $transaction->url() );
        }
    }
    
    // Create new methods with the same name as the 'do' parameter which should execute it
}

 

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

LMI_PAYMENT_NO

в логах мерчанта он есть. или это не то уже?
321321.PNG.1e2b127963d2cc4c75ae6eacc1707dff.PNG

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, by_ix сказал:

в логах мерчанта он есть. или это не то уже?

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

Вставили правильно, давайте по другому попробуем. 

\IPS\Db::i()->insert( 'debug', array('data' =>json_encode(\IPS\Request::i()->LMI_PAYMENT_NO)));

Можно не во все условия, а один раз над всеми. 

 

Ссылка на комментарий
Поделиться на другие сайты

Нормально, кстати. Сервер возвращает то, что надо, следовательно, проблема не в контроллере.

Давайте для чистоты эксперимента вот такую конструкцию туда вставим..

\IPS\Db::i()->insert( 'debug', array('data' => json_encode(var_export(\IPS\Request::i(), true)) ));

Должен быть полный ответ.

Вам бы еще в табличку транзакций заглянуть, там вообще есть записи с такими индексами?

Ссылка на комментарий
Поделиться на другие сайты

Какое отвратительное приложение... несуществующие переменные в коде, неправильные имена объектов, полный пц. Как такое дерьмо можно выкладывать в общий доступ (это не в адрес the.bunin , а в адрес автора этого чуда).

Ссылка на комментарий
Поделиться на другие сайты

Desti ну да, солидарен) Так то меня просто попросил by_ix скачать ему, ну я и решил выложить ещё. А потом уже начались эти качели с кривизной. Знал бы, что такой косяк сплошной, не выкладывал бы вообще

Ссылка на комментарий
Поделиться на другие сайты

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

Вам бы еще в табличку транзакций заглянуть, там вообще есть записи с такими индексами?

не увидел этого.
да, есть.
123123.thumb.PNG.34ff66e08fdc9913318a85e5f1fa47e8.PNG

4 минуты назад, the.bunin сказал:

А потом уже начались эти качели с кривизной.

в первой версии всего этого, почему-то, не было.
а на 4.6, она уже даже не добавляла способ оплаты в ац, эрроры летели.
так бы на ней и остался.

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, by_ix сказал:

так бы на ней и остался.

а бекапа то не осталось?

Ссылка на комментарий
Поделиться на другие сайты

да ладно, вполне починябельно, тем более, что уже понятно, что делать. 

я в режиме эмуляции запросов дошел до финала, так что не всё потеряно :)

Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, the.bunin сказал:

а бекапа то не осталось?

бэкапа чего? я как обновился до 4.6, так версия приложения 1.0 сразу отвалилась.
или даже на 4.4 перестала работать. уже помню.
но на 4.2 точно она стояла.
не откатывать же форум обратно на 4.2.)

Ссылка на комментарий
Поделиться на другие сайты

by_ix ааа, понял) думал просто в версии приложения только дело)

Ссылка на комментарий
Поделиться на другие сайты

Вах, починякалось : )

Из найденного:

В файлах source/Webmoney/Webmoney.php и /modules/front/Checkout/Checkout.php заменить несуществующую переменную $transactionAmount на $transaction->amount->amountAsString(), это даст нам правильную сумму в запросе и в проверке ответа. 

В файле source/Webmoney/Webmoney.php после строки с echo 'YES' добавить строку die(); Сервер ждет в ответ YES, а получал YES и до кучи дефолтную страницу форума. 

После этого вроде всё заработало.

Ссылка на комментарий
Поделиться на другие сайты

the.bunin обнови шапку.

и огроменское спасибо @Desti, как всегда лучший. :ab:

Webmoney Payment Gateway 1.0.1.tar

Изменено пользователем by_ix
Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

Друзья, как заполучить простому человеку с улицы, у которого есть подтвержденный аттестат на WM, данные для активации этого чуда, которое вы тут дружно допилили? Shop ID и Secret Key. И будет ли это возможно, если физическое лицо, без ИП или ООО.

Payment Methods - Google Chrome.jpg

Техподдержка WM говорит непонятные слова. Что им ответить, я не знаю. 

WebMoney Support - Google Chrome.jpg

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...