You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel控制器能否用AJAX GET请求获取的数据直接更新数据库无需额外请求

问题根因及修复方案

你遇到的核心问题是变量名拼写不一致,其次还有多处不规范写法、缺少必要校验的问题,修复步骤如下:

1. 直接修复错误代码

你控制器中定义的待更新数组是$u_input,但给donation_sum赋值时误用了$up_input,导致最终传入update方法的数组始终为空,这就是你说的两行赋值代码"未生效"的原因。修正后的控制器代码如下:

public function verify_pay($reference)
{
    // 密钥建议后续放到.env文件中,不要硬编码在业务代码里
    $sec = env('PAYSTACK_SECRET_KEY', 'sk_test_1ee78b7e4524cf19d3450e198812d1b8f0ee6562');
    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://api.paystack.co/transaction/verify/$reference",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_SSL_VERIFYHOST => 0,
        CURLOPT_SSL_VERIFYPEER => 0,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => array(
            "Authorization: Bearer $sec",
            "Cache-Control: no-cache",
        ),
    ));
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);

    // 先判断curl请求是否出错
    if ($err) {
        return "something went wrong: " . $err;
    }

    $newData = json_decode($response);
    $u_input = [];

    // 去掉冗余的[$newData][0]写法,同时校验交易实际状态为success
    if ($newData->status == true && $newData->data->status == 'success') {
        $amount = $newData->data->amount;
        // 统一用同一个变量名
        $u_input["donation_sum"] = $amount / 100;
        // 先判断用户是否登录,避免调用update时报错
        if (Auth::check()) {
            Auth::user()->update($u_input);
            return "paid";
        }
        return "user not login";
    }else {
        return "something went wrong";
    }
}

2. 补充必要配置

确保你项目中app/Models/User.php里的$fillable属性已经添加了donation_sum字段,否则Laravel的批量赋值机制会自动忽略这个字段的更新:

protected $fillable = [
    // 其他原有允许批量赋值的字段,比如name、email等
    'donation_sum',
];

3. 可选优化

建议给verify-payment路由添加auth中间件,避免未登录用户可以随意访问该接口:

Route::get('verify-payment/{reference}', 'UsersController@verify_pay')
    ->name('verify-payment')
    ->middleware('auth');

内容的提问来源于stack exchange,提问作者WonderPlug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:00:00