private function viewRobokassa() { if (!extension::getInstance()->getConfig('balance_use_rk', 'user', extension::TYPE_COMPONENT, 'boolean')) { exit("Robokassa API disabled"); } require_once root . '/resource/payments/robokassa/robokassa.class.php'; $init_rk = new Robokassa(extension::getInstance()->getConfig('balance_rk_id', 'user', extension::TYPE_COMPONENT, 'str'), extension::getInstance()->getConfig('balance_rk_key_1', 'user', extension::TYPE_COMPONENT, 'str'), extension::getInstance()->getConfig('balance_rk_key_2', 'user', extension::TYPE_COMPONENT, 'str'), extension::getInstance()->getConfig('balance_rk_test', 'user', extension::TYPE_COMPONENT, 'boolean')); $init_rk->OutSum = $amount = (double) system::getInstance()->post('OutSum'); $init_rk->InvId = $transid = (int) system::getInstance()->post('InvId'); $user_id = (int) system::getInstance()->post('shp_userid'); $init_rk->addCustomValues(array('shp_userid' => $user_id)); if (!$init_rk->checkHash($_POST['SignatureValue'])) { exit("Hash sum was wrong!"); } $mul = $params['config']['balance_rk_mul'] = extension::getInstance()->getConfig('balance_rk_mul', 'user', extension::TYPE_COMPONENT, 'float'); $amount *= $mul; user::getInstance()->addBalance($user_id, $amount); $payparam = array('amount' => $amount, 'sys_trans_id' => $transid); user::getInstance()->putLog($user_id, 'balance.rkadd', $payparam, 'Recharge balance via robokassa'); echo "Success payment"; }
/** * Тест метода checkSuccessAndFailSignature */ public function testCheckSuccessAndFailSignature() { $config = $this->_getConfig(); $this->_setConfig(); $invId = 1; $outSum = 2; $term = 3; $hash = md5($outSum . ':' . $invId . ':' . $config['pass1'] . ':' . 'shpa=' . $term); $testResult = Robokassa::checkSuccessAndFailSignature($invId, $outSum, $term, $hash); $this->assertEquals($testResult, true); $testResult = Robokassa::checkSuccessAndFailSignature($invId, $outSum, $term, 'wrong hash'); $this->assertEquals($testResult, false); }
} if (isset($_REQUEST['Desc'])) { $order['Desc'] = filter_var($_REQUEST['Desc'], FILTER_SANITIZE_STRING); } if (isset($_REQUEST['name'])) { $order['name'] = filter_var($_REQUEST['name'], FILTER_SANITIZE_STRING); } if (isset($_REQUEST['email'])) { $order['email'] = filter_var($_REQUEST['email'], FILTER_SANITIZE_EMAIL); } if (isset($_REQUEST['phone'])) { $order['email'] = filter_var($_REQUEST['phone'], FILTER_SANITIZE_STRING); } // Database save row, and get this row ID require_once API_ROOT_PATH . '/core/class/database/database.class.php'; require_once API_ROOT_PATH . '/core/config/pdo.config.php'; $db = new Database($pdoconfig_lander); $id = $db->putOne('payments', $order); // Подготовка запроса в Робокассу $robokassa_data = array('InvId' => $id, 'Desc' => $order['Desc'], 'IncCurrLabel' => "", 'Culture' => "ru", 'Encoding' => "utf-8"); $robokassa_data = array_merge($robokassa_data, $order); $robokassa = new Robokassa($robokassa_data, $payments_config['robokassa']); $order['SignatureValue'] = $robokassa->genCRC2(); $db->updateOne('payments', $id, $order); if (DEBUG) { print "payURL: " . $robokassa->payURL() . "\n"; print_r($order); print_r($robokassa->resultArray()); } else { header('Location: ' . $robokassa->payURL()); }
define('MODX_API_MODE', true); require dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/index.php'; $modx->getService('error', 'error.modError'); $modx->setLogLevel(modX::LOG_LEVEL_ERROR); $modx->setLogTarget('FILE'); /* @var miniShop2 $miniShop2 */ $miniShop2 = $modx->getService('minishop2'); $miniShop2->loadCustomClasses('payment'); if (!class_exists('Robokassa')) { exit('Error: could not load payment class "Robokassa".'); } $context = ''; $params = array(); /* @var msPaymentInterface|Robokassa $handler */ $handler = new Robokassa($modx->newObject('msOrder')); if (!empty($_REQUEST['SignatureValue']) && !empty($_REQUEST['InvId']) && empty($_REQUEST['action'])) { if ($order = $modx->getObject('msOrder', $_REQUEST['InvId'])) { $handler->receive($order, $_REQUEST); } else { $modx->log(modX::LOG_LEVEL_ERROR, '[miniShop2:Robokassa] Could not retrieve order with id ' . $_REQUEST['LMI_PAYMENT_NO']); } } if (!empty($_REQUEST['InvId'])) { $params['msorder'] = $_REQUEST['InvId']; } $success = $failure = $modx->getOption('site_url'); if ($id = $modx->getOption('ms2_payment_rbks_success_id', null, 0)) { $success = $modx->makeUrl($id, $context, $params, 'full'); } if ($id = $modx->getOption('ms2_payment_rbks_failure_id', null, 0)) {
/** * Проверка для success и fail одинаковая, так что, выносим в отдельный метод * * @param sfWebRequest $request * @return BillingTransaction */ private function checkSuccessAndFailParams(sfWebRequest $request) { $userId = $this->getUser()->getUserRecord()->getId(); // Получаем POST параметры $transactionId = (int) $request->getPostParameter("InvId", 0); $price = $request->getPostParameter("OutSum", 0); $signature = $request->getPostParameter("SignatureValue", ""); $term = (int) $request->getPostParameter("shpa", 0); // Получаем транзакцию $transaction = Doctrine::getTable('BillingTransaction')->find($transactionId); $this->forward404Unless($transaction); // Проверяем ID пользователя $this->forward404Unless((int) $transaction->getUserId() == $userId); // Проверяем совпадение суммы $this->forward404Unless(floatval($transaction->getTotal()) == floatval($price)); // Проверяем подпись $this->forward404Unless(Robokassa::checkSuccessAndFailSignature($transactionId, $price, $term, $signature)); return $transaction; }
public function before() { parent::before(); $config = Kohana::$config->load('payments.robokassa'); $this->robokassa = Robokassa::factory($config['login'], $config['password1'], $config['password2']); }
private function viewUserBalance($target, $viewer) { if ($target != $viewer || !extension::getInstance()->getConfig('balance_view', 'user', extension::TYPE_COMPONENT, 'bol')) { return null; } $params = array(); $params['config']['balance_use_webmoney'] = extension::getInstance()->getConfig('balance_use_webmoney', 'user', extension::TYPE_COMPONENT, 'int'); $params['config']['balance_wm_purse'] = extension::getInstance()->getConfig('balance_wm_purse', 'user', extension::TYPE_COMPONENT, 'str'); $params['config']['balance_wm_mul'] = extension::getInstance()->getConfig('balance_wm_mul', 'user', extension::TYPE_COMPONENT, 'float'); $params['config']['balance_wm_test'] = extension::getInstance()->getConfig('balance_wm_test', 'user', extension::TYPE_COMPONENT, 'int'); $params['config']['balance_valut_name'] = extension::getInstance()->getConfig('balance_valut_name', 'user', extension::TYPE_COMPONENT, 'str'); $params['config']['balance_wm_type'] = "WM" . system::getInstance()->altsubstr($params['config']['balance_wm_purse'], 0, 1); $params['config']['balance_use_ik'] = extension::getInstance()->getConfig('balance_use_ik', 'user', extension::TYPE_COMPONENT, 'int'); $params['config']['balance_ik_id'] = extension::getInstance()->getConfig('balance_ik_id', 'user', extension::TYPE_COMPONENT, 'str'); $params['config']['balance_ik_mul'] = extension::getInstance()->getConfig('balance_ik_mul', 'user', extension::TYPE_COMPONENT, 'float'); $params['config']['balance_ik_valute'] = extension::getInstance()->getConfig('balance_ik_valute', 'user', extension::TYPE_COMPONENT, 'str'); $params['config']['balance_use_rk'] = extension::getInstance()->getConfig('balance_use_rk', 'user', extension::TYPE_COMPONENT, 'int'); $params['config']['balance_rk_id'] = extension::getInstance()->getConfig('balance_rk_id', 'user', extension::TYPE_COMPONENT, 'str'); $params['config']['balance_rk_mul'] = extension::getInstance()->getConfig('balance_rk_mul', 'user', extension::TYPE_COMPONENT, 'float'); $params['config']['balance_rk_valute'] = extension::getInstance()->getConfig('balance_rk_valute', 'user', extension::TYPE_COMPONENT, 'str'); if (system::getInstance()->post('rk_submit')) { $topay = (double) system::getInstance()->post('topay'); require_once root . '/resource/payments/robokassa/robokassa.class.php'; $init_rk = new Robokassa($params['config']['balance_rk_id'], extension::getInstance()->getConfig('balance_rk_key_1', 'user', extension::TYPE_COMPONENT, 'str'), extension::getInstance()->getConfig('balance_rk_key_2', 'user', extension::TYPE_COMPONENT, 'str'), extension::getInstance()->getConfig('balance_rk_test', 'user', extension::TYPE_COMPONENT, 'boolean')); $init_rk->OutSum = $topay; $init_rk->Desc = 'Recharge balance on ' . property::getInstance()->get('url') . '. Userid: ' . $target; $init_rk->Culture = language::getInstance()->getUseLanguage(); $init_rk->addCustomValues(array('shp_userid' => $target)); header('Location: ' . $init_rk->getRedirectURL()); exit("Browser not support header accept. Payment: <a href='" . $init_rk->getRedirectURL() . "'>Start pay</a>"); } $stmt = database::getInstance()->con()->prepare("SELECT * FROM " . property::getInstance()->get('db_prefix') . "_user_log WHERE `owner` = ? and `type` like 'balance.%' ORDER BY `time` DESC LIMIT 0,50"); $stmt->bindParam(1, $target, \PDO::PARAM_INT); $stmt->execute(); $resultAll = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt = null; foreach ($resultAll as $row) { $data_array = unserialize($row['params']); $params['balancelogs'][] = array('id' => $row['id'], 'type' => $row['type'], 'message' => $row['message'], 'date' => system::getInstance()->toDate($row['time'], 'h'), 'amount' => $data_array['amount']); } return $this->viewUserProfileHeader($target, $viewer, $params); }