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

Laravel 5.5出现strpos参数错误,排查MailChimp列表查询问题

解决Laravel 5.5中strpos()参数错误的问题

你遇到的strpos() expects parameter 1 to be string, object given错误,核心问题出在获取API密钥的代码上,我给你拆解下问题和修复方案:

错误根源

当你执行DB::table('apikey')->where('api_key', '=', $user)时,返回的并不是你想要的API密钥字符串,而是Laravel的查询构建器对象。你把这个对象直接传给MailChimp的构造函数,而MailChimp内部需要用字符串来处理(比如调用strpos解析密钥),自然就会抛出类型错误。

另外这里还有个逻辑小问题:你的where条件是把用户ID和api_key字段做对比,这显然不对——应该是根据用户ID去匹配apikey表中的user_id字段,才能拿到对应用户的API密钥对吧?

修复步骤

  1. 修正查询,获取实际的API密钥字符串
    用value()方法可以直接执行查询并返回指定字段的值(没有匹配记录时返回null),同时修正where条件的字段:

    $apikey = DB::table('apikey')->where('user_id', '=', $userId)->value('api_key');
    
  2. 完善判断逻辑
    原来的if($apikey)判断是没问题的,因为当value()返回null时,条件会不成立,进入错误分支。

完整修正后的代码

public function getLists(Request $request) {
    $userId = $request->user()->id;
    // 根据用户ID查询对应的API密钥
    $apikey = DB::table('apikey')->where('user_id', '=', $userId)->value('api_key');

    if($apikey){
        $mc = new MailChimp($apikey);
        $mailchimp_ping = $mc->get('lists',['fields' => 'lists.id,lists.name']);
        return response()->json($mailchimp_ping, 200);
    } else {
        $errorResponse = [
            'message' => 'Lists not found!',
            'error' => '401'
        ];
        return response()->json($errorResponse);
    }
}

额外提示

  • 推荐用Laravel自带的response()->json()替代Response::json(),这是框架更推荐的写法
  • 确保你的apikey表中存在user_id字段,且已经正确关联了用户和对应的API密钥记录
  • 如果担心有多个匹配记录(正常应该是一对一),也可以用first()后取字段,但要注意处理null的情况:$apikeyRecord = DB::table('apikey')->where('user_id', '=', $userId)->first(); if($apikeyRecord) { $apikey = $apikeyRecord->api_key; },不过value()方法更简洁安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:11