• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

Скрипт Paypal для L2

Publikator

Путник
Пользователь
Сообщения
36
Розыгрыши
0
Репутация
109
Реакции
1 069
Баллы
3
Publikator добавил(а) новый ресурс:

Скрипт Paypal для L2 - Прием платежей / Покупка внутриигровой валюты

Форма оплаты и вебхук платежной системы paypal для проектов L2

Узнать больше об этом ресурсе...
 
Последнее редактирование модератором:

Можно ли в этом скрипте запретить приём платежей как продавцу? Только личный перевод (как другу) , чтобы не было возможности вернуть средства после оплаты.
 
@romash, я пока не могу ответить на ваш вопрос, поскольку не до конца еще разобрался с API Paypal
 
Помогите переделать скрипт , что бы за месть отправки предмета в игру он изменял баланс в базе

PHP:
if ( !( $char = $db->fetch( "SELECT obj_Id FROM characters WHERE char_name = ?", [ $invoice[1] ] ) ) )
            die( json_encode( [ 'error' => 'Character name ' . $invoice[1] . ' not found!' ] ) );
        
        $count = $response['amount']['value'] / ITEM_PRICE;
        
        $sql = "INSERT INTO `usersettings` ( `payment_id`, `owner_id`, `item_id`, `count`, `payment_status`, `description` ) VALUES ( ?, ?, ?, ?, '0', 'Paypal payments' )";
        
        $db->prepareAndExecute( $sql, [ $invoice[2], $char['obj_Id'], ITEM_ID, $count ] );


у меня в одной таблице имя аккаунта и ид аккаунта.

в другой таблице ид аккаунта и кол баланса .

помогите переделать запрос
 

Вложения

  • balance.webp
    balance.webp
    9,7 КБ · Просмотры: 33
@lxtopxm, примерно так
PHP:
if ( $user = $db->fetch( "SELECT userid FROM users WHERE useraccount = ?", [ $invoice[1] ] ) )
{
    $db->prepareAndExecute( "UPDATE usersettings SET balance = balance + ? WHERE userid = ?", [ $response['amount']['value'], $user['userid'] ] );
}
 
@lxtopxm, примерно так
PHP:
if ( $user = $db->fetch( "SELECT userid FROM users WHERE useraccount = ?", [ $invoice[1] ] ) )
{
    $db->prepareAndExecute( "UPDATE usersettings SET balance = balance + ? WHERE userid = ?", [ $response['amount']['value'], $user['userid'] ] );
}
Есть таблица там username и id

Теперь надо что бы в второй таблицы

по id изменило баланс
 
PHP:
    if ( $isPaymentCaptureCompleted && isset( $response['status'] ) && $response['status'] == 'COMPLETED' )
    {
        require 'db.class.php';

        $invoice = explode( '|', $response['invoice_id'] );
       
        $db = new DB( $config[ $invoice[0] ] );
       
        if ( $user = $db->fetch( "SELECT id FROM account WHERE username = ?", [ $invoice[1] ] ) )
             die( json_encode( [ 'error' => 'Character name ' . $invoice[1] . ' not found!' ] ) );
       
        $count = $response['amount']['value'] / ITEM_PRICE;
       
          $db->prepareAndExecute( "UPDATE usersettings SET balance = balance + ? WHERE userid = ?", [ $response['amount']['value'], $user['id'] ] );
       
        $db->prepareAndExecute( $sql, [ $invoice[2], $char['obj_Id'], ITEM_ID, $count ] );
    }

После оплаты не изменят баланса

И есть такой код но вроде правильно сделал.
PHP:
if ( !$db->fetch( "SELECT id FROM account WHERE username = ?", [ $char_name ] ) )
    die( json_encode( [ 'error' => [ 'code' => 403, 'message' => 'Нет аккаунта  с ником: ' . $char_name ] ] ) );

$amount = $count * ITEM_PRICE;

$baseUrl = API_MODE == 'LIVE'
    ? 'https://api-m.paypal.com'
    : 'https://api-m.sandbox.paypal.com';

$fields = [
    'intent' => 'CAPTURE',
    'purchase_units' => [
        [
            'invoice_id' => $server_id . '|' . $char_name . '|' . time(),
            'amount' => [
                'value' => $amount,
                'currency_code' => CURRENCY,
                /*'breakdown' => [
                    'item_total' => [
                        'currency_code' => CURRENCY,
                        'value' => $amount
                    ]
                ]*/
            ],
            'payment_instruction' => [
                'disbursement_mode' => 'INSTANT'
            ]
        ]
    ],
 
if ( $user = $db->fetch( "SELECT id FROM account WHERE username = ?", [ $invoice[1] ] ) ) die( json_encode( [ 'error' => 'Character name ' . $invoice[1] . ' not found!' ] ) );
на условие внимание обратить) если запись в таблице найдена то die (остановка выполнения скрипта)
 
на условие внимание обратить) если запись в таблице найдена то die (остановка выполнения скрипта)
После оплаты , не изменяет баланс который я купил. (ща в бд 0 монет, куплю 1000 шт но в бд не изменило(
 
После оплаты , не изменяет баланс который я купил. (ща в бд 0 монет, куплю 1000 шт но в бд не изменило(
ну ебатькапать, как еще объяснить то :pandaredlol:

PHP:
        if ( $user = $db->fetch( "SELECT id FROM account WHERE username = ?", [ $invoice[1] ] ) )
             die( json_encode( [ 'error' => 'Character name ' . $invoice[1] . ' not found!' ] ) );
этот код не позволит выдать, если в таблице account будет найдена запись с username оплатившего

либо так
PHP:
if ( $user = $db->fetch( "SELECT id FROM account WHERE username = ?", [ $invoice[1] ] ) )
{
    $db->prepareAndExecute( "UPDATE usersettings SET balance = balance + ? WHERE userid = ?", [ $response['amount']['value'], $user['id'] ] );
}
else
{
   die( json_encode( [ 'error' => 'Character name ' . $invoice[1] . ' not found!' ] ) );
}
либо так
PHP:
if ( !( $user = $db->fetch( "SELECT id FROM account WHERE username = ?", [ $invoice[1] ] ) ) ) 
{
    die( json_encode( [ 'error' => 'Character name ' . $invoice[1] . ' not found!' ] ) );
}

$db->prepareAndExecute( "UPDATE usersettings SET balance = balance + ? WHERE userid = ?", [ $response['amount']['value'], $user['id'] ] );
 
не так и не так баланс не изменило
 
а вообще тест через локалхост можна ?

статус транзакции какой? посмотреть можно тут
StatusEvent typeEvent IDDateSummary
Payment capture completedWH-3XU21542U1346204U-04S704975H726032N05 Sep 2022 12:22:23Payment completed for $ 1.0 USD
 
а вообще тест через локалхост можна ?
сомневаюсь, по скольку в настройках дашборда палки нужно указать урл вебхука. По завершению платежа апи палки должно отправить данные платежа на этот самый вебхук.

Если все настроено согласно этой инструкции, то я не знаю чем еще помочь.

Вообще, если в вебхуке раскомментированы эти строки
PHP:
logging( "request:\n" . print_r( $request, true ) );
logging( "response:\n" . print_r( $response, true ) );
и на файл debug.log стоят права 0666, то после платежа в этом файле можно посмотреть какие данные приходят на вебхук с серверов палки, если вообще приходят.
 
Последнее редактирование:
настроено правильно

таблица account по username делаем покупку но в usersetting таблицы уже идет не username а UserId(account таблицы id)
 
таблица account по username делаем покупку но в usersetting таблицы уже идет не username а UserId(account таблицы id)
а где в моих примерах SQL-запрос обновления записи таблицы usersetting по username? :Hahaha:
 
Назад
Сверху Снизу