Система пожертвований через Робокассу (необходимо дописать)

Дмитрий Кесаев

Проверенные
Сообщения
129
Реакции
387
Баллы
11,070
Ставить на уже установленную робокассу.
На скринах настройка плагина.
Процессор обработки подключить в robopayment_callback.php

Т.е. система донайтов изначально создана под PayPal
и обратные запросы идут в этот файл donation_callback.php, а у нас робокасса, поэтому содержимое дописать в robopayment_callback.php

Собственно везде поля/переменные/колонки заточены под PayPal необходимо заменить на обратные запросы Робокассы.
Если у кого-нить будет желание, св. время - премного благодарен буду)))
 

Вложения

  • Robodn.rar
    84.1 KB · Просмотры: 36
  • 1.jpg
    1.jpg
    106.7 KB · Просмотры: 138
  • 2.jpg
    2.jpg
    54.5 KB · Просмотры: 139
  • 3.jpg
    3.jpg
    77.1 KB · Просмотры: 135
  • 4.jpg
    4.jpg
    98.9 KB · Просмотры: 128
  • 11.jpg
    11.jpg
    19.4 KB · Просмотры: 135
  • 22.jpg
    22.jpg
    65.8 KB · Просмотры: 138
  • 333.jpg
    333.jpg
    79.6 KB · Просмотры: 123
Нет, не слетят, там же повышения идут через
$processor = new XenForo_UserUpgradeProcessor_RoboKassa();

т.е. \www\library\XenForo\UserUpgradeProcessor\RoboKassa.php

Короче, примерно такой код должен быть, объединил файлы.
Заменить содержимое в robopayment_callback.php пасс прописать не забудьте
PHP:
<?php
$mrh_pass2  = "ПАССВОРД"; //пароль 2й в робокассе
$startTime = microtime(true);
$fileDir = dirname(__FILE__);
require($fileDir . '/library/XenForo/Autoloader.php');
XenForo_Autoloader::getInstance()->setupAutoloader($fileDir . '/library');
XenForo_Application::initialize($fileDir . '/library', $fileDir);
XenForo_Application::set('page_start_time', $startTime);
$deps = new XenForo_Dependencies_Public();
$deps->preLoadData();
$response = new Zend_Controller_Response_Http();
$request = new Zend_Controller_Request_Http();
$deps = new XenForo_Dependencies_Public();
$deps->preLoadData();
$processor = new XenForo_UserUpgradeProcessor_RoboKassa();
$processor->initCallbackHandling(new Zend_Controller_Request_Http());
$logExtra = array();
try
{
$transaction = new robodn_DonationManager_Transaction_PayPal($request);
$output = $transaction->run();

if ($transaction->hasErrors())
{
$errors = implode("<br />\n", $transaction->getErrors());
$response->setBody(htmlspecialchars($errors));
$response->setHttpResponseCode(400);
}
else
{
$response->setBody($output);
}
if (!$processor->validateRequest($logMessage))
{
$logType = 'error';
$response->setHttpResponseCode(500);
}
else if (!$processor->validatePreConditions($logMessage,$mrh_pass2))
{
$logType = 'error';
}
else
{
list($logType, $logMessage) = $processor->processTransaction();
}
}
catch (Exception $e)
{
$response->setHttpResponseCode(500);
$response->setBody('Exception: ' . $e->getMessage());
XenForo_Error::logException($e);
$logType = 'error';
$logMessage = 'Exception: ' . $e->getMessage();
$logExtra['_e'] = $e;
}
$processor->log($logType, $logMessage, $logExtra);
$response->setBody(htmlspecialchars($logMessage));
$response->sendResponse();
 
Последнее редактирование:
при тестировании в кабинете Robokassa выдает такую ошибку:

HTML:
&lt;br /&gt;
&lt;b&gt;Fatal error&lt;/b&gt;:  Class &#39;robodn_DonationManager_Transaction_PayPal&#39; not found in &lt;b&gt;/home/XXXXX/public_html/forum/robopayment_callback.php&lt;/b&gt; on line &lt;b&gt;20&lt;/b&gt;&lt;br /&gt;
[CODE]
Что я не так делаю?

err.jpg
 
Последнее редактирование:
при тестировании в кабинете Robokassa выдает такую ошибку:

HTML:
&lt;br /&gt;
&lt;b&gt;Fatal error&lt;/b&gt;:  Class &#39;robodn_DonationManager_Transaction_PayPal&#39; not found in &lt;b&gt;/home/XXXXX/public_html/forum/robopayment_callback.php&lt;/b&gt; on line &lt;b&gt;20&lt;/b&gt;&lt;br /&gt;
[CODE]
Что я не так делаю?

Посмотреть вложение 12851
19-21 строчка в файле, покажите их.
 
при тестировании в кабинете Robokassa выдает такую ошибку:
Так уже при попытке пожертвования что ли? Так плагин же не дописан, не будет работать... Если бы он был рабочий, то лежал бы в ресурсах.
 
Сам Donation Manager я не ставил. Поставил сначала Robokassa и наверх сабж, как написано.

PHP:
{
$transaction = new robodn_DonationManager_Transaction_PayPal($request);
$output = $transaction->run();
[DOUBLEPOST=1392822152,1392822077][/DOUBLEPOST]
Так уже при попытке пожертвования что ли? Так плагин же не дописан, не будет работать... Если бы он был рабочий, то лежал бы в ресурсах.
аха, тогда ясно. показалось, что это как на нулледе что-то типа.
 
Это сделали?
Заменить содержимое в robopayment_callback.php пасс прописать не забудьте
[DOUBLEPOST=1392822227,1392822195][/DOUBLEPOST]
аха, тогда ясно. показалось, что это как на нулледе что-то типа.
Это и ести типа того, только не дописанный ещё. :)
 
да, конечно, это с новым robopayment_callback.php[DOUBLEPOST=1392822278,1392822233][/DOUBLEPOST]
Это сделали?
[DOUBLEPOST=1392822227,1392822195][/DOUBLEPOST]
Это и ести типа того, только не дописанный ещё. :-)
так может, скинуться? или что нужно, чтобы его дописать))
 
Допилить постараюсь. Но нужно толком разобраться в чем затык!
Выложу все в эту тему.[DOUBLEPOST=1392910936,1392825152][/DOUBLEPOST]Удалось более-менее разобраться с кодом, но запись в БД не происходит.

library/robodn/DonationManager/DataWriter/Donation.php
PHP:
class robodn_DonationManager_DataWriter_Donation extends XenForo_DataWriter
{
    protected function _getFields()
    {
        return array(
            'robodn_donation' => array(
                'donation_id' => array('type' => self::TYPE_UINT, 'autoIncrement' => true),
                'username' => array('type' => self::TYPE_STRING, 'required' => true),
                'amount' => array('type' => self::TYPE_FLOAT, 'required' => true, 'verification' => array('$this', '_verifyAmount')),
                'note' => array('type' => self::TYPE_STRING, 'maxLength' => 150, 'default' => ''),
                'donation_date' => array('type' => self::TYPE_UINT, 'default' => XenForo_Application::$time),
                'anonymous' => array('type' => self::TYPE_BOOLEAN, 'default' => 0)
            )
        );
    }

Тут вроде все понятно. Таблица robodn_donation и ее поля.
Дальше. Обратный запрос робокасса шлет на robopayment_callback.php
где подключается \library\robodn\DonationManager\Transaction\PayPal.php
В него внес данные по записи. Может в нем наворочил, на 99% почему уверенность

PHP:
<?php

class robodn_DonationManager_Transaction_PayPal extends robodn_DonationManager_Transaction_Abstract
{
    protected $_filtered = null;

    protected $_processor = 'PayPal';

    public function __construct(Zend_Controller_Request_Http $request)
    {
        parent::__construct($request);

            $data = $this->_filtered = $this->_input->filter(array(
            'shp_username' => XenForo_Input::STRING,
            'Shp_item' => XenForo_Input::UINT,
            'OutSum' => XenForo_Input::FLOAT,
            'shp_note' => XenForo_Input::STRING,
        ));

        $dateInput = $this->_input->filter(array(
            'date' => XenForo_Input::STRING,
            'hour' => XenForo_Input::UINT,
            'minute' => XenForo_Input::UINT
        ));

        if (!empty($dateInput['date']))
        {
            $datetime = new DateTime("$dateInput[date] $dateInput[hour]:$dateInput[minute]");
            $data['donation_date'] = $datetime->format('U');
        }

        if (empty($data['user_id']))
        {
            $userModel = $this->getModelFromCache('XenForo_Model_User');
            $data['user_id'] = $userModel->getUserIdFromUser($userModel->getUserByName($data['username']));
        }
               

        $dw = XenForo_DataWriter::create('robodn_DonationManager_DataWriter_Donation');
        if ($donateId)
            $dw->setExistingData($donateId);

        $dw->bulkSet(array (
            'user_id'       => $data['shp_username'],
            'donation_id'   => $data['InvId'],
            'transaction_id' => $data['shp_username'],
            'goal_id'        => $data['shp_username'],
            'username'    => $data['shp_username'],
            'amount'       => $data['OutSum'],
            'note'        => $data['shp_note'],
            'donation_date'    => XenForo_Application::$time,
            'anonymous'   => false
        ));
        $dw->save();

        return $this->responseRedirect(
            $donateId ? XenForo_ControllerResponse_Redirect::RESOURCE_UPDATED : XenForo_ControllerResponse_Redirect::RESOURCE_CREATED,
            XenForo_Link::buildAdminLink('donations')
        );
    }
    public function validateRequest()
    {
        return true;
    }
   
    public function validateTransaction()
    {
        $options = XenForo_Application::get('options');

        $itemParts = explode(',', $this->_filtered['Shp_item'], 4);
        if (count($itemParts) != 4)
        {
            return $this->error('Invalid item (Shp_item)');
        }

        list($token, $validation) = $itemParts;

        $this->_transaction = $this->_transactionModel->getTransaction($token);


        if ($this->_transaction['InvId'])
        {
            $user = $this->_userModel->getFullUserById($this->_transaction['InvId'], array('join' => XenForo_Model_User::FETCH_USER_PERMISSIONS));
            if ($user)
            {
                $tokenParts = explode(',', $validation);
                if (count($tokenParts) != 3 || sha1($tokenParts[1] . $user['csrf_token']) != $tokenParts[2])
                {
                    return $this->error('Invalid validation');
                }
            }
        }
        return true;
    }

    public function processTransaction()
    {
        $donationId = $this->_transactionModel->commit($this->_transaction['token']);
          return $this->log($donationId, $this->_transaction['transaction_id'], 'payment', 'Donation Received', $this->_transaction);
          return $this->log(0, $this->_transaction['transaction_id'], 'info', 'OK, no action', $this->_transaction);
    }

}
shp_note и shp_username - дополнительные поля передаваемые в робокассу и от неё следовательно

Что не так? Может кто что увидит или подскажет. Реально запутался(((
 
Последнее редактирование:
Дмитрий Кесаев, а Donation Manager для теоретического функционирования всей этой конструкции должен быть тоже установлен?
 
Дмитрий Кесаев, а Donation Manager для теоретического функционирования всей этой конструкции должен быть тоже установлен?
Конечно... На основе его и делаю, как и др. кодеры)))

Можно протестить передачу не от робокассы, а через (как пример):


PHP:
<?php
print'<form action="http://localhost/robopayment_callback.php" method="post">
<input type="text" name="OutSum"  value="55" />
<input type="text" name="shp_note"  value="На развитие форума бла-бла" />
<input type="submit" value="Пожертвовать" accesskey="s" class="button primary" />
<input type="text" name="shp_userid" value="12" />
<input type="text" name="shp_username" value="Pupkin" />  
<input type="text" name="_xfToken" value="1,1392921621,bea444f936ba3ce45bab5b998f7ed15d7fd5e65b" />
</form>';
?>
 
Последнее редактирование:
вот у меня не полуается его поставить почему-то
 
Ибо не рабочее всё
 
рабочее $75 вроде рублей стоит
 
тоесть она не работает вообще?
 
Ну как бы да. :)
 
cпасибо теперь буду бдителен
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу