Type error: Argument 3 passed to GuzzleHttp\\Client::request () must be of the type array, string?

file
按照教程来的,找了很久不知道哪里出问题了

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 8
liyu001989

发布帖子的时候,会翻译标题,app/Jobs/TranslateSlug.php,

app/Handlers/SlugTranslateHandler.php

        $query = http_build_query([
            "q"     =>  $text,
            "from"  => "zh",
            "to"    => "en",
            "appid" => $appid,
            "salt"  => $salt,
            "sign"  => $sign,
        ]);

        // 发送 HTTP Get 请求
        $response = $http->get($api.$query);

教程里面没有传第三个参数,你检查一下代码吧

5年前 评论

@liyu001989 第三个参数?是什么?这个翻译标题的,title参数在postman传了呀

5年前 评论
liyu001989

你看一下报错,guzzlehttp client 第三个参数必须是数组,现在传的是字符串。

把你 app/Handlers/SlugTranslateHandler.php 的代码贴出来

5年前 评论

@liyu001989

<?php
/**
 * Created by PhpStorm.
 * User: pengpn
 * Date: 2018/4/26
 * Time: 下午9:23
 */

namespace App\Handlers;

use GuzzleHttp\Client;
use Overtrue\Pinyin\Pinyin;

class SlugTranslateHandler
{
    public function translate($text)
    {
        //实例化http客户端
        $http = new Client();

        // 初始化配置信息
        $api = 'http://api.fanyi.baidu.com/api/trans/vip/translate?';
        $appid = config('services.baidu_translate.appid');
        $key = config('services.baidu_translate.key');
        $salt = time();

        // 如果没有配置百度翻译,自动使用兼容的拼音方案
        if (empty($appid) || empty($key)) {
            return $this->pinyin($text);
        }

        // 根据文档,生成 sign
        // http://api.fanyi.baidu.com/api/trans/product/apidoc
        // appid+q+salt+密钥 的MD5值
        $sign = md5($appid. $text . $salt . $key);

        //构建请求参数
        $query = http_build_query([
            "q"     =>  $text,
            "from"  => "zh",
            "to"    => "en",
            "appid" => $appid,
            "salt"  => $salt,
            "sign"  => $sign,
        ]);

        // 发送 HTTP Get 请求
        $response = $http->get($api,$query);

        $result = json_decode($response->getBody(), true);

        /**
        获取结果,如果请求成功,dd($result) 结果如下:

        array:3 [▼
        "from" => "zh"
        "to" => "en"
        "trans_result" => array:1 [▼
        0 => array:2 [▼
        "src" => "XSS 安全漏洞"
        "dst" => "XSS security vulnerability"
        ]
        ]
        ]

         **/

        // 尝试获取获取翻译结果
        if (isset($result['trans_result'][0]['dst'])) {
            return str_slug($result['trans_result'][0]['dst']);
        } else {
            // 如果百度翻译没有结果,使用拼音作为后备计划。
            return $this->pinyin($text);
        }

    }

    public function pinyin($text)
    {
        return str_slug(app(Pinyin::class)->permalink($text));
    }
}
5年前 评论
liyu001989

居然没发现问题,下面文件 89 行你自己调试一下吧。那网页端发帖子也应该不行吧
vendor/guzzlehttp/guzzle/src/Client.php

    public function __call($method, $args)
    {
        if (count($args) < 1) {
            throw new \InvalidArgumentException('Magic request methods require a URI and optional options array');
        }

        $uri = $args[0];
        $opts = isset($args[1]) ? $args[1] : [];

        return substr($method, -5) === 'Async'
            ? $this->requestAsync(substr($method, 0, -5), $uri, $opts)
            : $this->request($method, $uri, $opts);
    }
5年前 评论

@liyu001989
会不会是因为我没配置BAIDU_TRANSLATE_APPIDBAIDU_TRANSLATE_KEY的原因

5年前 评论
sushengbuhuo

@PENGPN try

$query =[ 'query'=>[
            "q"     =>  $text,
            "from"  => "zh",
            "to"    => "en",
            "appid" => $appid,
            "salt"  => $salt,
            "sign"  => $sign,
        ]];

        // 发送 HTTP Get 请求
        $response = $http->get($api,$query);
5年前 评论
Jourdon

@PENGPN 找不同

// 发送 HTTP Get 请求
        $response = $http->get($api,$query);
// 发送 HTTP Get 请求
        $response = $http->get($api.$query);
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!