прошу прощения за тупость, забыл bind-address указать для mysql, почему то был уверен что он был *у меня даже запрос на оплату не формируется, чисто пустая ссылка для оплаты без ключа и тд формируется
все просто - в файле sign.php не обрабатываются исключения работы скрипта db.class.php (PDO)прошу прощения за тупость, забыл bind-address указать для mysql, почему то был уверен что он был *
кстати если нет подключения к БД то скрипт обрабатывается с пустыми полями
1. Какие форма передает параметры? Проверка на передачу было?Как не старался к стреcс вебу подключить выдает ошибку "Не хватает параметров для создания счета", через тест форму ошибку 500, тобиш пустую форму отправляет, мб нужно права какие либо выдать? или запрос к бд не не правильный?
Я бы за такие бессмысленные сообщения бан давал.Obi крутой чел!Все норм работает, вопрос снят.
Может кто помочь? не бесплатно конечно. Скину пару сотки, напишите в лс.Доброго времени суток, первый раз попровал сделать ничего не получился как бы не настроил либо "персонаж не найден" либо "сервер не найден". Попробовал еще раз, читая ваши комментарии, получилось немножко, все заходит, нету никаких ошибок, но после оплаты не вкидывает на первоначальную страницу и персонажу не дает монеты. Php 5,6, внизу отправлю как я настроил, если ошибся, может подскажете:
<?php
// Ваш ключ идентификации полученный в p2p.qiwi.com
define( 'PUBLIC_KEY', 'xxxxxxxxxxxxxxxxxxx' ); Вводил публичный ключ который дают в киви
//
define( 'SECRET_KEY', 'xxxxxxxxxxxxxxxxxxxxx' ); Вводил секретный ключ который дают в киви
// URL для переадресации на ваш сайт в случае успешного перевода
define( 'SUCCESS_URL', 'Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация' ); Свой аддрес сайта
// ID выдаваемого предмета
define( 'ITEM_ID', 57 ); Итем
// Стоимость одного предмета
define( 'ITEM_PRICE', 1 ); Количество
// Конфиг подключения к игровой бд
$config = [
'server1' => [
'dbhost' => 'localhost',
'dbuser' => 'root',
'dbpass' => 'root', пас mysql
'dbname' => 'l2jdb', путь к бд сервера
'dbport' => 3306,
'charset' => 'utf8'
],
'server2' => [
'dbhost' => 'localhost',
'dbuser' => 'root',
'dbpass' => 'root',
'dbname' => 'l2jdb',
'dbport' => 3306,
'charset' => 'utf8'
],
'server3' => [
'dbhost' => 'localhost',
'dbuser' => 'root',
'dbpass' => 'root',
'dbname' => 'l2jdb',
'dbport' => 3306,
'charset' => 'utf8'
]
];
?>
<?php
тут вообще ничего не трогал т.к тут все берется из config.php или ошибаюсь?
class DB
{
private $dbh = null;
public function __construct( $config )
{
$dbhost = $config['dbhost'];
$dbport = $config['dbport'];
$dbuser = $config['dbuser'];
$dbpass = $config['dbpass'];
$dbname = $config['dbname'];
$charset = $config['charset'];
$dsn = "mysql:host=$dbhost;port=$dbport;dbname=$dbname;charset=$charset";
$options = [
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
];
try
{
$this->dbh = new \PDO( $dsn, $dbuser, $dbpass, $options );
}
catch ( \PDOException $e )
{
die( $e->getMessage() );
}
}
public function prepareAndExecute( $sql, array $parameters = null, $bind = true, $bindValue = true )
{
try
{
if ( $stmt = $this->dbh->prepare( $sql ) )
{
if ( $bind && is_array( $parameters ) )
{
foreach ( $parameters as $key => $value )
{
$parameter = is_numeric( $key ) ? $key + 1 : $key;
$bindValue
? $stmt->bindValue( $parameter, $value )
: $stmt->bindParam( $parameter, $value );
}
}
if ( $stmt->execute( $bind ? null : $parameters ) )
{
return $stmt;
}
}
}
catch ( \PDOException $e )
{
die( $e->getMessage() );
}
return false;
}
public function fetch( $sql, array $parameters = null, $bind = true, $bindValue = true )
{
if ( $stmt = $this->prepareAndExecute( $sql, $parameters, $bind, $bindValue ) )
{
try
{
if ( $result = $stmt->fetch() )
{
return $result;
}
}
catch ( \PDOException $e )
{
die( $e->getMessage() );
}
}
return false;
}
public function fetchAll( $sql, array $parameters = null, $bind = true, $bindValue = true )
{
if ( $stmt = $this->prepareAndExecute( $sql, $parameters, $bind, $bindValue ) )
{
try
{
if ( $results = $stmt->fetchAll() )
{
return $results;
}
}
catch ( \PDOException $e )
{
die( $e->getMessage() );
}
}
return false;
}
}
?>
<script src="Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация"></script>
<script>
document.addEventListener( "DOMContentLoaded", function( event )
{
$( "#qiwi-payment" ).submit( function( event )
{
var result = true;
var char_name = $( "#qiwi-payment input[name^='account']" ).val();
var count = $( "#qiwi-payment #count" ).val();
var server_id = $( "#qiwi-payment select[name^='customFields[server_id]']" ).val();
console.log( "server id: " + server_id );
$.ajax(
{
type: "POST",
url: "/qiwi/sign.php",
data: ( { "server_id": server_id, "char_name": char_name, "count": count } ),
async: false,
dataType: "json",
success: function( response )
{
if ( response["error"] !== undefined )
{
$( "#qiwi-payment .message" ).html( response["error"]["message"] );
result = false;
}
else
{
$( "#qiwi-payment .message" ).html( '' );
$( "#qiwi-payment input[name^='publicKey']" ).val( response["publicKey"] );
$( "#qiwi-payment input[name^='billId']" ).val( response["billId"] );
$( "#qiwi-payment input[name^='amount']" ).val( response["amount"] );
$( "#qiwi-payment input[name^='successUrl']" ).val( response["successUrl"] );
}
}
});
return result;
});
});
</script>
<form id="qiwi-payment" action="Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация" method="GET" accept-charset="UTF-8">
<input type="hidden" name="publicKey" value="" /> тут вставил публичный ключ
<input type="hidden" name="billId" value="" />
<input type="hidden" name="amount" value="" />
<input type="hidden" name="successUrl" value="" />
<div class="form-group">
<label for="char">Ник персонажа:</label>
<input class="form-control" name="account" required="" type="text" value="" placeholder="" />
</div>
<div class="form-group">
<label for="sum">Сумма:</label>
<input id="count" class="form-control" required="" type="number" value="1" min="1" max="5000" />
</div>
<div class="message" style="color:red;"></div>
<input type="submit" value="Пополнить" />
</form>
<?php
тут тоже ничего не трогал
ini_set( 'display_errors', '0' );
error_reporting( E_ALL );
header( "Content-type: application/json" );
$XMLHttpRequest = isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
if ( $XMLHttpRequest )
{
require 'config.php';
require 'db.class.php';
$char_name = isset( $_POST['char_name'] ) ? $_POST['char_name'] : '';
$count = isset( $_POST['count'] ) ? $_POST['count'] : 0;
$server_id = isset( $_POST['server_id'] ) ? $_POST['server_id'] : '';
if ( isset( $config[ $server_id ] ) )
{
$db = new DB( $config[ $server_id ] );
if ( $char = $db->fetch( "SELECT obj_Id FROM characters WHERE char_name = ?", [ $char_name ] ) )
{
// Сумма платежа ( кол-во предметов на его стоимость )
$amount = ( $count * ITEM_PRICE );
// ID платежа
$billId = time();
$data = [
'publicKey' => PUBLIC_KEY,
'amount' => $amount,
'billId' => $billId,
'successUrl' => SUCCESS_URL
];
}
else
{
$data = [
'error' => [
'message' => 'Персонаж с ником ' . $char_name . ' не найден!'
]
];
}
}
else
{
$data = [
'error' => [
'message' => 'Сервер ' . $server_id . ' не найден!'
]
];
}
}
else
{
$data = [
'error' => [
'code' => 403,
'message' => 'Forbidden'
]
];
}
echo json_encode( $data );
?>
<?php
ini_set( 'display_errors', '0' );
error_reporting( E_ALL );
$json = file_get_contents( 'php://input' );
$decoded = json_decode( $json, true );
$siteId = isset( $decoded['bill']['siteId'] ) ? $decoded['bill']['siteId'] : '';
$char_name = isset( $decoded['bill']['customer']['account'] ) ? $decoded['bill']['customer']['account'] : '';
$amount = isset( $decoded['bill']['amount']['value'] ) ? $decoded['bill']['amount']['value'] : 0;
$currency = isset( $decoded['bill']['amount']['currency'] ) ? $decoded['bill']['amount']['currency'] : '';
$billId = isset( $decoded['bill']['billId'] ) ? $decoded['bill']['billId'] : 0;
$status = isset( $decoded['bill']['status']['value'] ) ? $decoded['bill']['status']['value'] : '';
$server_id = isset( $decoded['bill']['customFields']['server_id'] ) ? $decoded['bill']['customFields']['server_id'] : '';
if ( $status != 'PAID' )
die( 'Not paid!' );
$sign = isset( $_SERVER['HTTP_X_API_SIGNATURE_SHA256'] ) ? $_SERVER['HTTP_X_API_SIGNATURE_SHA256'] : '';
$invoice_parameters = "$currency|$amount|$billId|$siteId|$status";
require 'config.php';
$hash = hash_hmac('sha256', $invoice_parameters, SECRET_KEY );
if ( $sign !== $hash )
die( 'Bad sign!' );
require 'db.class.php';
if ( !isset( $config[ $server_id ] ) )
die( 'Сервер ' . $server_id . ' не найден!' );
$db = new DB( $config[ $server_id ] );
if ( !( $char = $db->fetch( "SELECT obj_Id FROM characters WHERE char_name = ?", [ $char_name ] ) ) )
die( 'Персонаж с ником ' . $char_name . ' не найден!' );
$owner_id = $char['obj_Id'];
$count = ( int ) ( $amount / ITEM_PRICE ); // TODO: floor || ceil
$description = 'Qiwi payment id #' . $billId;
$sql = "INSERT INTO `items_delayed` ( `payment_id`, `owner_id`, `item_id`, `count`, `payment_status`, `description` ) VALUES ( ?, ?, ?, ?, ?, ? )"; тут подправил под себя
if ( $db->prepareAndExecute( $sql, [ $billId, $owner_id, ITEM_ID, $count, 0, $description ] )->rowCount() )
die( 'Платеж #' . $billId . ' принят!' );
echo 'Платеж #' . $billId . ' не принят!';
?>
Если есть другой, готовый, чтобы брать и переделать под себя, работал без ошибок, куплю. Напишите в лс.Может кто помочь? не бесплатно конечно. Скину пару сотки, напишите в лс.
$dbhost = $config['dbhost'];
$dbport = $config['dbport'];
$dbuser = $config['dbuser'];
$dbpass = $config['dbpass'];
$dbname = $config['dbname'];
$charset = $config['charset'];
$dsn = "mysql:host=$dbhost;port=$dbport;dbname=$dbname;charset=$charset";
$dbhost = $config['dbhost'];
$dbport = $config['dbport'];
$dbuser = $config['dbuser'];
$dbpass = $config['dbpass'];
$dbname = $config['dbname'];
$dsn = "mysql:host=$dbhost;port=$dbport;dbname=$dbname;charset=utf8";
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?