我如何将正确类型的对象或数组发送给curl函数

时间:2018-11-28 02:11:05

标签: php arrays curl

我知道关于cURL的零,这对我来说全是希腊文,我的PHP技能很有限。我要依靠别人的技巧来使我的生活更轻松,并且当事情无法按预期方式工作时,我的生活会令人沮丧。

让我们从我的输入开始:

 $j_source = '{"accountIndex":' . $wallet_idx . ',"walletId": "'. $wallet_id . '"}'; 
    $j_destination = '{"address":"' . $banker . '","amount":' . $lovelace . '}';

    $source         = json_decode($j_source, true); 
    $destination    = json_decode($j_destination, true); 

我有2个JSON数组的变量。该函数希望将输入作为数组,所以这就是我试图提供的内容。

有问题的功能(from here originally):

// Generates a new transaction from the source to one or multiple target addresses.
    public function createNewTransaction(array $source, array $destination, string $spendingPassword): array
    {
        $groupPolicy = 'OptimizeForHighThroughput';
        return self::jsonDecode($this->post('/api/v1/transactions?source='.$source.'?destination='.$destination.'?groupingPolicy='.$groupPolicy.'?spendingPassword='.$spendingPassword), true);
    } 

当我运行此函数时,结果是错误:

  

Array([status] =>错误[diagnostic] => Array([validationError] =>   $中的错误:解析构造函数的付款类型时   Cardano.Wallet.API.V1.Types.Payment预期的对象,但得到了数组。 )   [message] => JSONValidationFailed)

因此,很明显,我尝试将其作为对象发送给数组,但出现错误,告诉我它想要对象而不是数组。所以现在我正在转圈,我不知道下一步该怎么做。

这是我使用的cURL POST函数:

// CURL Post
    private function post(string $endPoint, $postFields = []): string
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->host.$endPoint);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_PORT, $this->port);
        curl_setopt($ch, CURLOPT_ENCODING, "");
        curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSLCERT, Cardano::CERT_PATH);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

        $headers = [
            "Cache-Control: no-cache",
            "Content-Type: application/json;charset=utf-8",
            "Postman-Token: b71b609e-e028-d78b-ce51-3d0ec0b5c9fb",
            "accept: application/json;charset=utf-8"        
        ];
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        if($this->disableSSLVerification)
        {
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        }
        $data = curl_exec ($ch);
        $this->httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if(curl_exec($ch) === false)
        {
            throw new Exception('Curl error: ' . curl_error($ch));
        }
        curl_close ($ch);
        return $data;
    }

据我所知,此CURL代码是使用称为“邮递员”的东西自动生成的(我下载了它,但是我不知道如何使用它,因此根本没有帮助)。

问题是这样,我不知道怎么了。我不知道CURL的构造方式是否有问题,也不知道在包含createNewTransaction函数的类中是否有问题。

我所知道的是库中的GET函数正常工作。我可以运行GET查询并获得没有问题的有效JSON。

如果您可以给我一些提示或线索,让我自己找出答案,我什至不知道从哪里开始。

0 个答案:

没有答案