PHP 注意:尝试访问类型为 null 的值的数组偏移量

问题描述

你好,我有输出 PHP 错误,如标题所说,所以我尝试了一些来自其他类似问题的 stackoverflow 答案的解决方案,但没有任何帮助,所以我决定与大家分享我的代码,也许有人有解决方案。 所以我在我的网站上集成了 Stripe 并且我使用了测试条带密钥并在条带将我重定向回我的页面后成功付款我的页面自动编程为接收成功的 session_id 以将购买的积分添加用户余额并给出成功的消息所以问题是当我完成支付任何未发生的事情,日志文件中的输出错误PHP 注意:尝试访问 /home/user123/domain.com/html/account/page.balance.inc 中 null 类型值的数组偏移量.PHP 第 81 行

这是我的“page.balance.inc.PHP文件代码

<?PHP

if (!defined("APP_SIGNATURE")) {

    header("Location: /");
    exit;
}

if (!auth::isSession()) {

    header("Location: /");
    exit;
}

if (auth::getCurrentUserId() == 0) {

    header("Location: /");
    exit;
}

require('html/stripe/init.PHP');

\Stripe\Stripe::setVerifySslCerts(false);
\Stripe\Stripe::setApiKey(STRIPE_SECRET_KEY);

if (!empty($_POST)) {

    $packageId = isset($_POST['packageId']) ? $_POST['packageId'] : 0;

    $result = array(
        "error" => true,"error_code" => ERROR_UNKNowN
    );

    if ($packageId < count($payments_packages)) {

        $session = \Stripe\Checkout\Session::create([
            'payment_method_types' => ['card'],'line_items' => [[
                'name' => $payments_packages[$packageId]['name'],'amount' => $payments_packages[$packageId]['amount'],'currency' => 'usd','quantity' => 1,]],'payment_intent_data' => [
                'capture_method' => 'automatic',],'success_url' => APP_URL.'/account/balance?session_id={CHECKOUT_SESSION_ID}','cancel_url' => APP_URL.'/account/balance',]);

        $stripeSession = array($session);
        $sessId = ($stripeSession[0]['id']);

        $_SESSION['sessId'] = $sessId;
        $_SESSION['packageId'] = $packageId;

        $result = array(
            "error" => false,"error_code" => ERROR_SUCCESS,"sessId" => $sessId
        );
    }

    echo json_encode($result);
    exit;
}

$payment = false;

if (isset($_GET['session_id'])) {

    try {

        $response = \Stripe\Checkout\Session::retrieve($_GET['session_id']);

        if (isset($_SESSION['sessId'])) {

            $paymentIntent = \Stripe\PaymentIntent::retrieve($response['payment_intent']);

            if ($paymentIntent['amount_received'] == $response['display_items'][0]['amount'] && $_GET['session_id'] == $_SESSION['sessId']) {

                $account = new account($dbo,auth::getCurrentUserId());
                $account->setBalance($account->getBalance() + $payments_packages[$_SESSION['packageId']]['credits']);

                $payments = new payments($dbo);
                $payments->setRequestFrom(auth::getCurrentUserId());
                $payments->create(PA_BUY_CREDITS,PT_CARD,$payments_packages[$_SESSION['packageId']]['credits'],$payments_packages[$_SESSION['packageId']]['amount']);
                unset($payments);

                unset($_SESSION['sessId']);
                unset($_SESSION['packageId']);

                $fcm = new fcm($dbo);
                $fcm->setRequestFrom(auth::getCurrentUserId());
                $fcm->setRequestTo(auth::getCurrentUserId());
                $fcm->setType(GCM_NOTIFY_CHANGE_ACCOUNT_SETTINGS);
                $fcm->setTitle("You settings is changed.");
                $fcm->prepare();
                $fcm->send();
                unset($fcm);

                $payment = true;
            }
        }

    } catch (\Stripe\Exception\ApiErrorException $e) {

        $payment = false;
    }
}

$account = new account($dbo,auth::getCurrentUserId());

$page_id = "balance";

$css_files = array("main.css","my.css");
$page_title = $LANG['page-balance']." | ".APP_TITLE;

include_once("html/common/site_header.inc.PHP");

?>

<div class="main-column row">

    <?PHP

        include_once("html/common/site_sidenav.inc.PHP");
    ?>

    <div class="col-lg-9 col-md-12" id="content">

        <div class="main-content">

            <div class="standard-page">

                <h1><?PHP echo $LANG['page-balance']; ?></h1>

                <div class="tab-container">
                    <nav class="tabs">
                        <a href="/account/settings"><span class="tab"><?PHP echo $LANG['page-profile-settings']; ?></span></a>
                        <a href="/account/settings/privacy"><span class="tab"><?PHP echo $LANG['page-privacy-settings']; ?></span></a>
                        <a href="/account/balance"><span class="tab active"><?PHP echo $LANG['page-balance']; ?></span></a>
                        <a href="/account/settings/services"><span class="tab"><?PHP echo $LANG['label-services']; ?></span></a>
                        <a href="/account/settings/password"><span class="tab"><?PHP echo $LANG['label-password']; ?></span></a>
                        <a href="/account/settings/referrals"><span class="tab"><?PHP echo $LANG['page-referrals']; ?></span></a>
                        <a href="/account/settings/blacklist"><span class="tab"><?PHP echo $LANG['page-blacklist']; ?></span></a>
                        <a href="/account/settings/deactivation"><span class="tab"><?PHP echo $LANG['page-deactivate-account']; ?></span></a>
                    </nav>
                </div>

                <?PHP

                if ($payment) {

                    ?>

                    <div class="success-container" style="margin-top: 15px;">
                        <ul class="m-0">
                            <b><?PHP echo $LANG['label-thanks']; ?></b>
                            <br>
                            <?PHP echo $LANG['label-payments-success_added']; ?>
                        </ul>
                    </div>

                    <?PHP
                }
                ?>

                <header class="top-banner px-0">

                    <div class="info">
                        <h1><?PHP echo $LANG['page-balance']; ?></h1>
                        <p><?PHP echo $LANG['page-balance-desc'] ?></p>
                        <p><?PHP echo $LANG['label-balance']; ?> <b><?PHP echo $account->getBalance(); ?> <?PHP echo $LANG['label-credits']; ?></b></p>
                    </div>

                </header>

                <?PHP

                    if (APP_DEMO) {

                        ?>

                        <div class="warning-container d-block col-12">
                            <p class="m-0">
                                <span><b>For testing:</b></span>
                                <span class="d-block">Use card number for test: 4242424242424242</span>
                                <span class="d-block">CVC and other data: any</span>
                            </p>
                        </div>

                        <?PHP
                    }
                ?>

                <header class="top-banner p-0">
                    <div class="info">
                        <h1><?PHP echo $LANG['action-buy-credits']; ?></h1>
                    </div>
                </header>

                <div class="row col-12 px-0">

                <?PHP

                    foreach ($payments_packages as $package) {

                        ?>
                        <div class="col-12 col-sm-12 col-md-4 col-lg-4 mt-2 p-0">

                            <a class="stripe-buy-button button blue d-block mx-2" onclick="Payments.new(<?PHP echo $package['id']; ?>); return false;" href="javascript: void(0)"><i class="icofont icofont-stripe-alt"></i> <?PHP echo $package['name']." ".$LANG['label-payments-for']." $".$package['amount'] / 100; ?></a>
                        </div>

                        <?PHP
                    }
                ?>
                </div>

                <header class="top-banner px-0 pb-0">
                    <div class="info">
                        <h1><?PHP echo $LANG['label-payments-history']; ?></h1>
                    </div>
                </header>

                <div class="listview">
                    <table class="bordered data-tables responsive-table">
                        <tbody>
                        <tr class="listview-header">
                            <th class="text-center"><?PHP echo $LANG['label-payments-credits']; ?></th>
                            <th class="text-center"><?PHP echo $LANG['label-payments-amount']; ?></th>
                            <th class="text-right"><?PHP echo $LANG['label-payments-description']; ?></th>
                            <th class="text-right"><?PHP echo $LANG['label-payments-date']; ?></th>
                        </tr>

                        <?PHP

                        $payments = new payments($dbo);
                        $payments->setRequestFrom(auth::getCurrentUserId());

                        $result = $payments->get(0,30);

                        if (count($result['items']) == 0) {

                            ?>

                            <tr>
                                <td colspan="5" class="text-center">
                                    <div class="card information-banner border-0 shadow-none m-0">
                                        <div class="card-header border-0">
                                            <div class="card-body">
                                                <h5 class="m-0"><?PHP echo $LANG['label-empty-list']; ?></h5>
                                            </div>
                                        </div>
                                    </div>
                                </td>
                            </tr>

                            <?PHP

                        } else {

                            foreach ($result['items'] as $key => $value) {

                                ?>

                                <tr>
                                    <td class="text-center">
                                        <?PHP
                                        switch ($value['paymentAction']) {

                                            case PA_BUY_CREDITS: {

                                                echo "<span class=\"green\">+".$value['credits']."</span>";
                                                break;
                                            }

                                            case PA_BUY_REGISTRATION_BONUS: {

                                                echo "<span class=\"green\">+".$value['credits']."</span>";
                                                break;
                                            }

                                            case PA_BUY_REFERRAL_BONUS: {

                                                echo "<span class=\"green\">+".$value['credits']."</span>";
                                                break;
                                            }

                                            default: {

                                                echo "<span class=\"red\">-".$value['credits']."</span>";
                                                break;
                                            }
                                        }
                                        ?>
                                    </td>
                                    <td class="text-center">
                                        <?PHP
                                        switch ($value['paymentAction']) {

                                            case PA_BUY_CREDITS: {

                                                if ($value['amount'] > 0) {

                                                    echo "$".$value['amount'] / 100;
                                                    break;
                                                }
                                            }

                                            default: {

                                                echo "";
                                                break;
                                            }
                                        }
                                        ?>
                                    </td>
                                    <td class="text-right" style="word-break: break-word">
                                        <?PHP
                                        switch ($value['paymentAction']) {

                                            case PA_BUY_CREDITS: {

                                                switch ($value['paymentType']) {

                                                    case PT_CARD: {

                                                        echo $LANG['label-payments-credits-stripe'];
                                                        break;
                                                    }

                                                    case PT_GOOGLE_PURCHASE: {

                                                        echo $LANG['label-payments-credits-android'];
                                                        break;
                                                    }

                                                    case PT_APPLE_PURCHASE: {

                                                        echo $LANG['label-payments-credits-ios'];
                                                        break;
                                                    }

                                                    case PT_ADMOB_REWARDED_ADS: {

                                                        echo $LANG['label-payments-credits-admob'];
                                                        break;
                                                    }
                                                }

                                                break;
                                            }

                                            case PA_BUY_GIFT: {

                                                echo $LANG['label-payments-send-gift'];
                                                break;
                                            }

                                            case PA_BUY_VERIFIED_BADGE: {

                                                echo $LANG['label-payments-verified-badge'];
                                                break;
                                            }

                                            case PA_BUY_GHOST_MODE: {

                                                echo $LANG['label-payments-ghost-mode'];
                                                break;
                                            }

                                            case PA_BUY_PRO_MODE: {

                                                echo $LANG['label-payments-pro-mode'];
                                                break;
                                            }

                                            case PA_BUY_MESSAGE_PACKAGE: {

                                                echo $LANG['label-payments-message-package'];
                                                break;
                                            }

                                            case PA_BUY_SPOTLIGHT: {

                                                echo $LANG['label-payments-spotlight-feature'];
                                                break;
                                            }

                                            case PA_BUY_disABLE_ADS: {

                                                echo $LANG['label-payments-off-admob'];
                                                break;
                                            }

                                            case PA_BUY_REGISTRATION_BONUS: {

                                                echo $LANG['label-payments-registration-bonus'];
                                                break;
                                            }

                                            case PA_BUY_REFERRAL_BONUS: {

                                                echo $LANG['label-payments-referral-bonus'];
                                                break;
                                            }
                                        }
                                        ?>
                                    </td>
                                    <td class="text-right"><?PHP echo $value['date']; ?></td>
                                </tr>

                                <?PHP
                            }
                        }

                        ?>

                        </tbody>
                    </table>
                </div>

            </div>

        </div>
    </div>
</div>
<script src="https://js.stripe.com/v3/"></script>
//设置您的可发布密钥 var stripe = Stripe(''); window.Payments || ( window.Payments = {} ); Payments.new = 函数(package_id){ $.ajax({ 类型:'POST', url: '/账户/余额',数据:“packageId=”+ package_id, 数据类型:'json', 超时:30000, 成功:功能(响应){ if (response.hasOwnProperty('error')) { 如果(响应。错误 === 假){ 如果 (response.hasOwnProperty('sessId')) { stripe.redirecttocheckout({ // 从 Checkout Session 创建 API 响应中创建 id 字段 // 可用于此文件,因此您可以在此处将其作为参数提供 // 而不是 {{CHECKOUT_SESSION_ID}} 占位符。 sessionId: response.sessId }).then(函数(结果){ // 如果 `redirecttocheckout` 由于浏览器或网络而失败 // 错误,向您的客户显示本地化的错误消息 // 使用`result.error.message`。 }); } } } },错误函数(xhr,类型){ } }); }; $('.btn-stripe').click(function() { Payments.new(1); });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)