Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как заставить freekassa код php делать запросы в mysql (изменять, добавлять данные), я сколько не пытался бесполезно.

Denis Ученик (52), на голосовании 1 год назад
Покритикуйте что неправильно в этом коде
 case ID_FK: 
{
$payment = new payment_fk;
$params = $_REQUEST;
$sum = $params['fk_oa'];
$params['fk_o'] = date ('H:i:s');
$sign = md5($cfg['payments'][ID_FK - 1]['project_id'].':'.$params['fk_oa'].':'.$cfg['payments'][ID_FK - 1]['key1'].':'.$params['fk_currency'].':'.$params['fk_o']);


header("Location: https://pay.freekassa.ru/?m={$cfg['payments'][ID_FK - 1]['project_id']}&oa={$params['fk_oa']}&o={$params['fk_o']}&s={$sign}¤cy={$params['fk_currency']}&us_account={$params['fk_us_shpuserid']}");

$valid_ip = false;
if (isset($_SERVER['HTTP_X_REAL_IP'])) {
$cur_ip = $_SERVER['HTTP_X_REAL_IP'];
} else {
$cur_ip = $_SERVER['REMOTE_ADDR'];
}
if (in_array($cur_ip, ['168.119.157.136', '168.119.60.227', '138.201.88.124', '178.154.197.79'])) {
$valid_ip = true;
}
if (!$valid_ip) {
echo 'hacking attempt! | ip error | cur_ip='.$cur_ip;
return false;
}

/**
* Сравнение сигнатур
*/
function check(){
$Sign = $reply['SIGN'];
$ch_sign = md5($reply['MERCHANT_ID'].':'.$reply['AMOUNT'].':'.$cfg['payments'][ID_FK - 1]['key2'].':'.$reply['MERCHANT_ORDER_ID']);


if ((string)$ch_sign !== (string)$_REQUEST['SIGN']) {
echo 'Bad signature: '.$sign;
return false;
}
echo 'YES';
return true;
$db = new PDO('mysql:host='.$cfg['db']['host'].';dbname='.$cfg['db']['name'], $cfg['db']['user'], $cfg['db']['pass']);
$db->query("SET NAMES '".$cfg['db']['charset']."'");

if ( $db->query("SELECT COUNT(0) FROM `".$cfg['db']['trans']."` WHERE `status` = 'success' AND `payid` = ". $params['fk_o'])->fetchColumn() )
{
die('столбец не выбран!');
}

if ( !$db->query("INSERT INTO `".$cfg['db']['trans']."` VALUES (NULL, ". $params['fk_o'] .", ". $params['fk_us_shpuserid'] .", ". round($params['sum']) .", 'success', '". $params['fk_currency'] ."', ". time() .")") )
{
$db->query("UPDATE `{$cfg['db']['users']}` SET `{$cfg['db']['money']}` = {$cfg['db']['money']} + ".round($params['sum'])." WHERE `{$cfg['db']['userid']}` = {$params['fk_us_shpuserid']}");

/**
* Сравнение суммы оплаты и суммы заказа
*/
if ((float) $reply['AMOUNT'] !== (float) $params['fk_oa']) {
$params['fk_o']->update_status('failed', __('Платеж не оплачен'));

throw new \Exception('Суммы заказа не совпадают. ' . ' Amount FreeKassa -> ' . $reply['AMOUNT'] . ' Amount shop -> ' . (float) $params['fk_oa']);
}


if ($_REQUEST['freekassa'] === 'result') {


if ($_REQUEST['freekassa'] === 'success') {




}
if ($_REQUEST['freekassa'] === 'fail') {
die('оплата не прошла');
}
}

}

}
}
}
}
Голосование за лучший ответ
Άηϑρέΰ ҂ Искусственный Интеллект (179999) 1 год назад
 return true;  
$db = new PDO('mysql:host='.$cfg['db']['host'].';dbname='.$cfg['db']['name'], $cfg['db']['user'], $cfg['db']['pass']);
$db->query("SET NAMES '".$cfg['db']['charset']."'");

if ( $db->query("SELECT COUNT(0) FROM `".$cfg['db']['trans']."` WHERE `status` = 'success' AND `payid` = ". $params['fk_o'])->fetchColumn() )
{
die('столбец не выбран!');
}

if ( !$db->query("INSERT INTO `".$cfg['db']['trans']."` VALUES (NULL, ". $params['fk_o'] .", ". $params['fk_us_shpuserid'] .", ". round($params['sum']) .", 'success', '". $params['fk_currency'] ."', ". time() .")") )
{
$db->query("UPDATE `{$cfg['db']['users']}` SET `{$cfg['db']['money']}` = {$cfg['db']['money']} + ".round($params['sum'])." WHERE `{$cfg['db']['userid']}` = {$params['fk_us_shpuserid']}");
код по работе с бд не будет работать по причине завершения скрипта до начала работы с бд.
а так желательно работу с бд вынести в отдельный класс, написать нужный функционал, протестировать и потом уже интегрировать в данный код
Похожие вопросы