MMGP logo
Присоединяйтесь к нашему инвестиционному форуму, на котором уже 642,333 пользователей. Чтобы получить доступ ко многим закрытым разделам и начать общение - зарегистрируйтесь прямо сейчас.
Все, что относится к Web-Программированию (PHP, Perl, JavaScript, MySQL, XML и т.д.)
Первый пост Опции темы
Старый 10.10.2016, 20:37
#1
Интересующийся
 
Регистрация: 06.10.2016
Сообщений: 9
Благодарностей: 0
Здравствуйте. Возникла проблема при прикреплении платежной системы payeer к сайту. А именно: пользователь моего сайта пополняет свой счет (на моем сайте), деньги приходят мне в магазин payeer, однако на сайте не добавляются и не появляются вообще. Платежная система реализована как плагин. Не могу понять вообще с чем это может быть связано. Вот код обработчика платежа (полностью файл functions.php):
<?php

// Создание чека
function payeer_add_check($check_info)
{
global $wpdb;
$table_check = $wpdb->prefix.check_payeer;

$wpdb->insert
(
$table_check,
array(
'product_id' => $check_info['product_id'],
'user_id' => $check_info['user_id'],
'amount' => $check_info['amount'],
'currency' => $check_info['currency'],
'status' => $check_info['status'], // success - успех, error - ошибка, processed - обрабатывается
'type' => $check_info['type'], // depositing - пополнение счета, withdrawals - вывод денег, payment - оплата
'date' => $check_info['date'],
'description' => $check_info['description']
),
array('%s', '%s', '%d', '%s', '%s', '%s', '%s', '%s')
);

return mysql_insert_id();
}

// Подпись
function payeer_signature_store($m_orderid, $m_amount, $m_curr, $m_desc)
{
$arHash = array(
get_option_payeer('payeer_shop_id'),
$m_orderid,
$m_amount,
$m_curr,
base64_encode($m_desc),
get_option_payeer('payeer_secret_key')
);

return strtoupper(hash('sha256', implode(":", $arHash)));
}

// Работа с датой
function payeer_handler_date($date, $type = false)
{
if($type)
{
$dateTime = new DateTime($date);
$dateTime->modify(-get_option('gmt_offset').' hour');
return $dateTime->format('Y-m-d H:i:s');
}
else
{
$dateTime = new DateTime($date);
$dateTime->modify(get_option('gmt_offset').' hour');
return $dateTime->format('H:i, d.m.Y');
}
}

// Генерация навигации
function payeer_generator_navigation($number, $current, $table, $page = '?page_n=', $separator1 = ',', $separator2 = ' ', $name = 'Навигация: ', $class_div = '', $class_span = '')
{
global $wpdb;

$page_num = $wpdb->get_var("SELECT count(*) FROM $table") / $number;

$navigation = '<div class="'.$class_div.'">'.$name;

for ($i = 0; $i < $page_num; $i++)
{
$navigation .= '<span class="'.$class_span.'">';

if($i == $current && $current != -1)
$navigation .= ($i+1);
else
$navigation .= '<a href="'.$page.($i+1).'">'.($i+1).'</a>';

$navigation .= '</span>';
if($i+1 < $page_num) $navigation .= $separator1;
$navigation .= $separator2;
}

$navigation .= '</div>';

return $navigation;
}

// Обработка платежа
function payeer_process()
{
global $wpdb;
$table_products = $wpdb->prefix.check_payeer;

if (isset($_GET['m_operation_id']) && isset($_GET['m_sign']))
{
$table_check = $wpdb->prefix.check_payeer;
$check = $wpdb->get_row
(
$wpdb->prepare
(
"SELECT * FROM $table_check WHERE check_id = %d",
$_GET['m_orderid']
)
);

$arHash = array($_GET['m_operation_id'],
$_GET['m_operation_ps'],
$_GET['m_operation_date'],
$_GET['m_operation_pay_date'],
$_GET['m_shop'],
$_GET['m_orderid'],
number_format($check->amount, 2, '.', ''),
$check->currency,
$_GET['m_desc'],
$_GET['m_status'],
get_option_payeer('payeer_secret_key'));
$sign_hash = strtoupper(hash('sha256', implode(':', $arHash)));

if ($_GET['m_sign'] == $sign_hash && $_GET['m_status'] == 'success' && $check->status == 'processed')
{
//include_once WP_PLUGIN_DIR.'/'.get_option_payeer('payeer_name_plugin').'/api.php';
//api_payment_nt('success', $product->product_id, $product->user_id, $product->amount, $product->description);

$wpdb->update
(
$table_check,
array('status' => 'success'),
array('check_id' => $_GET['m_orderid']),
array('%s'),
array('%d')
);

include_once (PAYEER_PLUGIN_DIR.'/api.php');
api_account_management_nt($check->amount, $product->user_id);

echo $_GET['m_orderid'].'|success';
exit;
}

if($table_check == 'processed')
{
$wpdb->update
(
$table_check,
array('status' => 'error'),
array('check_id' => $_GET['m_orderid']),
array('%s'),
array('%d')
);
}

echo $_GET['m_orderid'].'|error';
exit;
}
}

// Работа с полями
function working_with_fields_payeer($date, $conf = 0, $conf2 = 0) // conf: 0 - в массив, 1 - в строку
{ // conf2: 0 - $mas[$j][$key] == 'content', 1 - $mas[$key] == 'content', 2 - $mas[$j] == $key
if(!$conf)
{
for($i = 0, $j = 0, $type = 0, $key; $i < strlen($date); $i++) { // type = 0 - обход, 1 - чтение названия, 3 - чтение информации
if($type == 0 && $date[$i] == '[')
{
$type = 1;
continue;
}

if($type == 1 && $date[$i] == '=' && $date[$i+1] == '\'')
{
$type = 2;
$i++;
continue;
}

if($type == 1 && $conf2 == 2 && $date[$i] == ']')
{
$type = 0;
$j++;
continue;
}

if(($type == 2 && $date[$i-1] != '\\' && $date[$i] == '\'' && $date[$i+1] == ']') || ($type == 1 && $date[$i] == ']'))
{
if($conf2 == 0)
$result[$j]['content'] = stripslashes($result[$j]['content']);
elseif($conf2 == 1)
$result[$key] = stripslashes($result[$key]);

$key = '';
$type = 0;
$i++;
$j++;
continue;
}

if($conf2 == 0)
{
if($type == 1) $result[$j]['name'] .= $date[$i];
if($type == 2) $result[$j]['content'] .= $date[$i];
}
elseif($conf2 == 1)
{
if($type == 1) $key .= $date[$i];
if($type == 2) $result[$key] .= $date[$i];
}
elseif($conf2 == 2)
{
if($type == 1) $result[$j] .= $date[$i];
}
}
}
else
{
if($conf2 == 0)
{
for ($i = 0; $i < count($date); $i++) {
$result .= '['.$date[$i]['name'].'=\''.addslashes($date[$i]['content']).'\']';
}
}
if($conf2 == 1)
{
while ($date_name = current($date)) {
$result .= '['.key($date).'=\''.addslashes($date_name).'\']';
next($date);
}
}
if($conf2 == 2)
{
for ($i = 0; $i < count($date); $i++) {
$result .= '['.$date[$i].']';
}
}
}

return $result;
}

// Работа с настройками
function get_option_payeer($name)
{
global $settings_rnt;

if(!$settings_rnt)
{
$settings_rnt = working_with_fields_payeer(get_option('settings_rn t'), 0, 1);
}

return $settings_rnt[$name];
}

function update_option_payeer($name, $date)
{
global $settings_rnt;
if(!$settings_rnt) get_option_rnt('');

$settings_rnt[$name] = $date;
update_option('settings_rnt', working_with_fields_payeer($settings_rnt, 1, 1));
}

?>
Kitori вне форума
Старый 15.10.2016, 22:24
#2
Интересующийся
 
Имя: Владислав
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 20.01.2013
Сообщений: 75
Благодарностей: 2
Сбросьте домен сайта

!!!Начинающий веб-мастер!!!
Vladij вне форума
Старый 16.10.2016, 15:55
#3
Любитель
 
Регистрация: 15.05.2016
Сообщений: 120
Благодарностей: 30
Цитата:
get_option_payeer('payeer_secret_key')
В настройках верно указан секретный ключ магазина?
HyipZanoza вне форума
Старый 16.10.2016, 19:09
#4
Интересующийся
 
Регистрация: 06.10.2016
Сообщений: 9
Благодарностей: 0
Да, указан секретный ключ верно. Проблему я решил вроде с пополнением, но возникли другие. Счет на сайте пополнить теперь могу только я, пользователь не может так как после оплаты, со статусом success его кидает на страницу error. У меня привязка платежной системы сделана плагином, в котором я указываю страницу сайта, куда будет приходить результат при оплате (успешно или нет), однако пополнить могу только я, всех остальных кидает на страницу error
Kitori вне форума
Старый 17.10.2016, 08:53
#5
Любитель
 
Регистрация: 15.05.2016
Сообщений: 120
Благодарностей: 30
Ваш магазин должен пройти модерацию, Вам нужно подать заявку на модерирование.
Или у Вас включен тестовый режим, где только разработчик может проводить оплату.
HyipZanoza вне форума
Старый 17.10.2016, 16:58
#6
Интересующийся
 
Регистрация: 06.10.2016
Сообщений: 9
Благодарностей: 0
Все я разобрался с проблемой пополнения. Теперь проблема с выводом. Деньги со счета пользователя на моем сайте списываются, но не приходят на его счет.
Kitori вне форума
Старый 17.10.2016, 17:18
#7
Любитель
 
Регистрация: 15.05.2016
Сообщений: 120
Благодарностей: 30
Цитата:
Сообщение от Kitori Посмотреть сообщение
Все я разобрался с проблемой пополнения. Теперь проблема с выводом. Деньги со счета пользователя на моем сайте списываются, но не приходят на его счет.
Так что же у Вас было?
А функция вывода прописана?
API создан?
HyipZanoza вне форума
Старый 17.10.2016, 17:36
#8
Интересующийся
 
Регистрация: 06.10.2016
Сообщений: 9
Благодарностей: 0
Файл апи имеет следующую структуру
<?php

//**********************************************//
// API //
//**********************************************//

define( 'PAYEER_INCLUDES_DIR', PAYEER_PLUGIN_DIR.'/includes' );

function api_free_money_nt($money)
{
update_option('payeer_free_money', get_option('payeer_free_money') + $money);
}

function api_addition_product_nt($product_info)
{
global $wpdb;
$table_product = $wpdb->prefix.product_payeer;

$wpdb->insert
(
$table_product,
array(
'product_name' => $product_info['name'],
'date' => $product_info['date']
),
array('%s', '%s')
);

return mysql_insert_id();
}

function api_delete_product_nt($product_id)
{
global $wpdb;
$table_products = $wpdb->prefix.product_payeer;
$wpdb->query("DELETE FROM $table_products WHERE product_id = $product_id");
}

// Управление счетом
function api_account_management_nt($num, $user_id = '', $descr = '', $product_id = '')
{
global $current_user;

if(!$user_id)
{
get_currentuserinfo();
$user_id = $current_user->ID;
}

$money = get_user_meta($user_id, 'amount', true);

if($money + $num < 0) return false;

if($descr)
{
global $wpdb;
$table_check = $wpdb->prefix.check_payeer;
include_once (PAYEER_INCLUDES_DIR.'/functions.php');

$check_info = '';
$check_info['user_id'] = $user_id;
$check_info['product_id'] = $product_id;
$check_info['amount'] = number_format(abs($num), 2, '.', '');
$check_info['currency'] = get_option('payeer_currency');
$check_info['type'] = 'payment';
$check_info['status'] = 'success';
$check_info['date'] = date("Y-m-d H:i:s");
$check_info['description'] = $descr;
payeer_add_check($check_info);

update_user_meta($user_id, 'amount', $money + $num);
return true;
}
else
{
update_user_meta($user_id, 'amount', $money + $num);
return true;
}
}

?>
Kitori вне форума
Старый 17.10.2016, 17:46
#9
Любитель
 
Регистрация: 15.05.2016
Сообщений: 120
Благодарностей: 30
В коде выше нет выплаты и нет подключения класса Payeer API
HyipZanoza вне форума
Старый 17.10.2016, 17:53
#10
Интересующийся
 
Регистрация: 06.10.2016
Сообщений: 9
Благодарностей: 0
Вот еще файл
<?php

// Заявки на вывод денег
function payeer_request()
{
global $wpdb;
$table_request = $wpdb->prefix.request_payeer;
$table_check = $wpdb->prefix.check_payeer;

// Обработка заявки
if (isset($_POST['payeer_request_adopt_btn']) )
{
if (function_exists('current_user_can') && !current_user_can('manage_options'))
die ( _e('Hacker?', 'rates_nt') );

if (function_exists ('check_admin_referer'))
{
check_admin_referer('payeer_request_setup_form');
}

$wpdb->update
(
$table_check,
array('status' => 'success'),
array('check_id' => $_POST['payeer_check_id']),
array('%s'),
array('%d')
);

include_once (PAYEER_PLUGIN_DIR.'/api.php');
api_free_money_nt($_POST['payeer_amount'] * get_option_payeer('payeer_percentage_output') / 100);
$wpdb->query("DELETE FROM $table_request WHERE request_id = ".$_POST['payeer_request_id']);
}

// Отклонение заявки
if (isset($_POST['payeer_request_reject_btn']))
{
if (function_exists('current_user_can') && !current_user_can('manage_options'))
die ( _e('Hacker?', 'rates_nt') );

if(function_exists ('check_admin_referer'))
{
check_admin_referer('payeer_request_setup_form');
}

$wpdb->update
(
$table_check,
array('status' => 'error'),
array('check_id' => $_POST['payeer_check_id']),
array('%s'),
array('%d')
);

include_once (PAYEER_PLUGIN_DIR.'/api.php');
api_account_management_nt($_POST['payeer_amount'], $_POST['payeer_user_id'], 'Ваша заявка отклонена по причине: '.$_POST['payeer_failure_cause']);

$wpdb->query("DELETE FROM $table_request WHERE request_id = ".$_POST['payeer_request_id']);
}

//Вывод формы информации по заявкам
$page_n = 10;
$current_page = ($_GET['page_n'] - 1 < 0 ? 0 : $_GET['page_n'] - 1);

$requests = $wpdb->get_results
(
$wpdb->prepare
(
"SELECT * FROM $table_request ORDER BY request_id DESC LIMIT %d, $page_n",
$current_page * $page_n
)
);

foreach ($requests as $item)
{
echo
"
<form name='rates_nt_tournaments_setup' method='post' action='".$_SERVER['PHP_SELF']."?page=payeer&updated=true'>
";

if (function_exists ('wp_nonce_field') )
{
wp_nonce_field('payeer_request_setup_form');
}

echo
"
<p style='padding-top:30px;'><b>ID заявки: ".$item->request_id."</b></p>
<table>
<tr>
<td style='text-align:right;'>Пользователь:</td>
<td><a href='".admin_url()."user-edit.php?user_id=".$item->user_id."'>ID".$item->user_id."</a></td>
<input type='hidden' name='payeer_check_id' value='".$item->check_id."'/>
<input type='hidden' name='payeer_request_id' value='".$item->request_id."'/>
<input type='hidden' name='payeer_user_id' value='".$item->user_id."'/>
<input type='hidden' name='payeer_amount' value='".$item->amount."'/>
<input type='hidden' name='payeer_currency' value='".$item->currency."'/>
<td>&nbsp;</td>
</tr>
<tr>
<td style='text-align:right;'>Дата:</td>
<td>".payeer_handler_date($item->date)."</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style='text-align:right;'>Сумма:</td>
<td>".$item->amount." ".$item->currency." - ".get_option_payeer('payeer_percentage_output' )."% = ".($item->amount * (100 - get_option_payeer('payeer_percentage_output')) / 100)." ".$item->currency."</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style='text-align:right;'>Платёжная система:</td>
<td>".$item->payment_system."</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style='text-align:right;'>Номер счета:</td>
<td>".$item->account_number."</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style='text-align:right;'>Комментарий:</td>
<td>".$item->description."</td>
<td>&nbsp;</td>
</tr>
<tr>
<td style='text-align:right;'>Причина отказа:</td>
<td><input type='text' name='payeer_failure_cause' value='' style='width:300px;'/></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type='submit' class='button' name='payeer_request_adopt_btn' value='Принять'/>
<input type='submit' class='button' name='payeer_request_reject_btn' value='Отклонить'/>
</td>
</tr>
</table>
</form>
";
}

echo payeer_generator_navigation($page_n, $current_page, $table_request, $_SERVER['PHP_SELF']."?page=payeer&page_n=");;
}

?>

добавлено через 3 минуты
Вообщем привязка магазина выполнена в виде плагина на вордпресс. Может я вышлю вам весь плагин сразу?Вы посмотрите, для целостности картины функционирования. На почту например
Kitori вне форума
Старый 17.10.2016, 20:43
#11
Любитель
 
Регистрация: 15.05.2016
Сообщений: 120
Благодарностей: 30
Вы нажимаете "Принять", с базы удаляет запрос, а пользователю не приходит?
HyipZanoza вне форума
Старый 17.10.2016, 20:52
#12
Интересующийся
 
Регистрация: 06.10.2016
Сообщений: 9
Благодарностей: 0
Да. Тоесть при выводе, пользователь подает заявку на вывод (на определенную сумму), эта заявка приходит ко мне в админку, я ее принимаю, и деньги должны с его счета на моем сайте перевестись на выбранный им счет. Однако деньги с его счета на моем сайте списываются, но со счета магазина они не списываются и соответственно не переводятся пользователю на выбранный им счет.
Kitori вне форума
Старый 18.10.2016, 01:23
#13
Любитель
 
Регистрация: 15.05.2016
Сообщений: 120
Благодарностей: 30
Глянув куски кода я не обнаружил ничего похожего на Payeer API.
Вы создавали в кабинете Payeer, API ?Там должен быть секретный ключ и API ID7.
Есть ли у Вас в настройках админки такие поля?

Возможно у Вас ручные выплаты в модуле.
HyipZanoza вне форума
Старый 18.10.2016, 02:01
#14
Интересующийся
 
Регистрация: 06.10.2016
Сообщений: 9
Благодарностей: 0
В админке нет таких полей, и да, скорее всего ручные выплаты у меня. КО мне приходит заявка с номеров счета куда переслать деньги, я пересылаю из магазина payeer и после жму в админке принять, и у пользователя в таблице данных высвечивается заявка успешно принята.

добавлено через 1 минуту
Благодарю за помощь =)
Kitori вне форума
Войдите, чтобы оставить комментарий.
Быстрый переход