[TC] bdPaygate: WalletOne [НЕ ПОДДЕРЖИВАЕТСЯ]

[TC] bdPaygate: WalletOne [НЕ ПОДДЕРЖИВАЕТСЯ] 1.3

Нет прав для скачивания

Matew

Модераторы
Сообщения
4,959
Решения
147
Реакции
14,394
Баллы
12,365
Пользователь Matew разместил новый ресурс:

[bd] Paygate: WalletOne - Платёжный шлюз WalletOne для плагина [bd] Paygates.

Внимание: данный плагин создан не разработчиком [bd] Paygates и им не поддерживается!

Данная модификация позволяет вам настроить приём платежей на своем форуме через платежный шлюз .

Требования:
  • Требуется дополнение [bd] Paygates версии не ниже 1.5.2

Установка и настройка:

Настройка магазина WalletOne:
  • ...

Узнать больше об этом ресурсе...
 
Matew, не подскажите, в чем проблема?
PHP:
#0 .ru\library\bdPaygateWalletOne\Processor.php(44): XenForo_Application::handlePhpError(8, 'Undefined index...', 'C:\\OpenServer\\d...', 44, Array)
#1 .ru\bdpaygate\callback.php(83): bdPaygateWalletOne_Processor->validateCallback(Object(Zend_Controller_Request_Http), false, false, Array, false)
#2 {main}
 
poldyaev, вам же в ошибке показано. Даже какой файл и какая строчка
 
Captain если бы я вдруг знал пых и мог решить проблему самостоятельно, я бы не задавал тут вопрос.
Раз там все написано, подскажите в чем проблема:
processor.php
PHP:
$signature = $transactionDetails['WMI_SIGNATURE'];

callback.php
PHP:
catch (bdPaygate_Exception_NotImplemented $nie)
    {
        $validateResult = $processor->validateCallback($request, $transactionId, $paymentStatus, $logDetails, $itemId);
    }
 
Последнее редактирование:
poldyaev, ну немного повангую.

1) Проблема в том, что сервер на винде
2) Проблема в настройках магазина (некорректно подпись генерируется)
 
Оплата проходит, но автоматически не переходит в группу, в [bd] Paygates Logs
 

Вложения

  • 2016-10-25_2-34-31.png
    2016-10-25_2-34-31.png
    32.9 KB · Просмотры: 22
А где вот такое вы нашли
Откройте Настройки и выберите вкладку "Интегреация"
У меня нет
 
Captain если бы я вдруг знал пых и мог решить проблему самостоятельно, я бы не задавал тут вопрос.
Раз там все написано, подскажите в чем проблема:
processor.php
PHP:
$signature = $transactionDetails['WMI_SIGNATURE'];

callback.php
PHP:
catch (bdPaygate_Exception_NotImplemented $nie)
    {
        $validateResult = $processor->validateCallback($request, $transactionId, $paymentStatus, $logDetails, $itemId);
    }
Я так и не смог нормально решить данную проблему, но нашел временное решение:
Нужно отредактировать файл Processor.php.

PHP:
<?php

class bdPaygateWalletOne_Processor extends bdPaygate_Processor_Abstract
{
    const CURRENCY_RUB = 'rub';
    const CURRENCY_UAH = 'uah';
    const CURRENCY_KZT = 'kzt';
 
    public function getSupportedCurrencies()
    {
        $currencies = array();
        $currencies[] = self::CURRENCY_RUB;
        $currencies[] = self::CURRENCY_UAH;
        $currencies[] = self::CURRENCY_KZT;
        $currencies[] = self::CURRENCY_USD;
        $currencies[] = self::CURRENCY_EUR;
     
        return $currencies;
    }
    public function isAvailable()
    {
        $options = XenForo_Application::getOptions();
        // Единая Касса не поддерживает тестовый режим,
        // поэтому на всякий случай отключаем её, если включён "Sandbox"
        if (empty($options->bdPaygateWalletOne_ID) || empty($options->bdPaygateWalletOne_SecretKey) || $this->_sandboxMode()) {
            return false;
        }
        return true;
    }
    public function isRecurringSupported()
    {
        return false;
    }
    public function validateCallback(Zend_Controller_Request_Http $request, &$transactionId, &$paymentStatus, &$transactionDetails = array(), &$itemId)
    {
        // TODO: Пофиксить алгоритм
        $input = new XenForo_Input($request);
        $transactionDetails = $input->getInput();
        $signature = $transactionDetails['WMI_SIGNATURE'];
        $transactionId = (!empty($transactionDetails['WMI_ORDER_ID']) ? ('walletone_' . $transactionDetails['WMI_ORDER_ID']) : '');
        $paymentStatus = bdPaygate_Processor_Abstract::PAYMENT_STATUS_OTHER;
        $processorModel = $this->getModelFromCache('bdPaygate_Model_Processor');
        $options = XenForo_Application::get('options');
        $walletone_key = $options->bdPaygateWalletOne_SecretKey;

        /// Генерация MD5 подписи
        // Удаление лишних элементов из массива
        unset($transactionDetails['WMI_SIGNATURE'], $transactionDetails['p'], $transactionDetails['0'], $transactionDetails['_callbackIp']);
        // Сортировка эл-тов массива в алфавитном порядке
        ksort($transactionDetails, SORT_STRING);
        // Конкатенация значений
        $crc = implode($transactionDetails);
        // Кодирование MD5 хэша в BASE64
        $crc = base64_encode(pack("H*", md5($crc . $walletone_key)));
     
        // Документация (API) — «Единая касса» Wallet One
        switch ($transactionDetails['WMI_ORDER_STATE']) {
            case "Accepted":
                // Платеж успешно проведен
                $itemId = $transactionDetails['PAYMENT_ITEM'];
                $paymentStatus = bdPaygate_Processor_Abstract::PAYMENT_STATUS_ACCEPTED;
                echo "WMI_RESULT=OK";
                break;
            default:
                $paymentStatus = bdPaygate_Processor_Abstract::PAYMENT_STATUS_REJECTED;
        }
        return true;
    }
    public function generateFormData($amount, $currency, $itemName, $itemId, $recurringInterval = false, $recurringUnit = false, array $extraData = array())
    {
        $this->_assertAmount($amount);
        $this->_assertCurrency($currency);
        $this->_assertItem($itemName, $itemId);
        $this->_assertRecurring($recurringInterval, $recurringUnit);
        $formAction = 'https://wl.walletone.com/checkout/checkout/Index';
        $callToAction = new XenForo_Phrase('bdpaygate_walletone_call_to_action');
        $visitor = XenForo_Visitor::getInstance();
        $options = XenForo_Application::get('options');
        $walletone_key = $options->bdPaygateWalletOne_SecretKey;
        switch (utf8_strtoupper($currency)) {
            case 'RUR':
                $currency_id = 643;
                break;
            case 'USD':
                $currency_id = 840;
                break;
            case 'EUR':
                $currency_id = 978;
                break;
            case 'UAH':
                $currency_id = 980;
                break;
            case 'KZT':
                $currency_id = 398;
                break;
            default:
                $currency_id = 643;
        }
        $payment = array(
            'PAYMENT_ITEM'          => $itemId,
            'WMI_DESCRIPTION'       => "BASE64:" . base64_encode($itemName),
            'WMI_PAYMENT_AMOUNT'    => $amount,
            'WMI_CURRENCY_ID'       => $currency_id,
            'WMI_MERCHANT_ID'       => $options->bdPaygateWalletOne_ID,
            'WMI_SUCCESS_URL'       => $extraData['returnUrl'],
            '_csrfToken'            => $visitor['csrf_token_page'],
        );
        /// Генерация MD5 подписи для формы
        // Сортировка эл-тов массива в алфавитном порядке
        ksort($payment, SORT_STRING);
        // Конкатенация значений
        $crc = implode($payment);
        // Кодирование MD5 хэша в BASE64
        $payment['WMI_SIGNATURE'] = base64_encode(pack("H*", md5($crc.$walletone_key)));
        // Генерация формы
        $form = "<form action=\"{$formAction}\" method=\"POST\">";
        foreach ($payment as $item => $value){
            $form .= "<input type=\"hidden\" name=\"$item\" value=\"$value\" />";
        }
        $form .= "<input type=\"submit\" value=\"{$callToAction}\" class=\"button\"/></form>";
        return $form;
    }
}

Matew, не хочешь пофиксить плагин? Ну мало ли там, желание появилось)
 
Пссс... Парень, тут июль уже :-D
Да, я знаю. Просто спустя N дней общения с тех. поддержкой я с удивлением узнал, что больной роскомнадзор, оказывается, блокирует CloudFlare

Какие же они человекы, ей богу
 
Пользователь Matew обновил ресурс [bd] Paygate: WalletOne новой записью:

Полное обновление

Формально, дополнение было почти полностью переписано.

Порядок обновления:
  • Удалить полностью файлы старого дополнения
  • Загрузить новые файлы
  • Обновить

Узнать больше об этом обновлении...
 
Последнее редактирование:
Да, я знаю. Просто спустя N дней общения с тех. поддержкой я с удивлением узнал, что больной роскомнадзор, оказывается, блокирует CloudFlare

Какие же они человекы, ей богу
Я слышал что роскомнадзор блокирует отдельные IP-адреса CF, а не всю сеть CloudFlare.

Matew, спасибо за обновление!
 
Matew, удалил старый аддон, удалил его файлы. Пытаюсь установить через менеджер ресурсов по ссылке, мне пишет: "Неверный обработчик bdPaygateWalletOne_Listener::load_class (Неверный класс).".
 
Если устанавливать в ручную (закинуть файлы по FTP и установить XML файл), то на странице покупки товара пишет: 2017-07-18_150335.jpg
 
Последнее редактирование:
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу