json публикация в API с использованием curl в php - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть этот вопрос, я пытаюсь отправить запрос одному API, этот APPI ожидает приложения / json, поэтому я сначала проверил почтальон, чтобы увидеть результаты и работает, как я ожидал, но в моем коде нет, затем мой код, publi c function myfunctiion ()

{$ req = '{"myparams": myvalues, "myparams": myvalues, "myparams": myvalues, "myparams": {"myparams": myvalues, "myparams": "myvalues", "myparams": "myvalues", "myparams": myvalues} '; $ jsonRequest = json_decode ($ req, TRUE); ;

    try{
        self::setWsdl('API url');

        $context =[

            'Content-Type: application/json', 
            'Accept: application/json',

        ];

        self::setContext($context);
        self::setRequest($jsonRequest);

        return  InstanceCurlClient::curlClientInit();



    } catch(\Exception $error){
        return $error->getMessage();
    }
}

и у меня моя конфигурация curl

public static function curlClientInit(){
        try{
            $ch = curl_init(); 
            curl_setopt($ch, CURLOPT_HEADER,         false);
            curl_setopt($ch, CURLOPT_URL,            self::getWsdl());
            curl_setopt($ch, CURLOPT_FAILONERROR,    true); 
            curl_setopt($ch, CURLOPT_HTTPHEADER,     self::getContext());
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
            curl_setopt($ch, CURLOPT_TIMEOUT,        30);
            curl_setopt($ch, CURLOPT_POSTFIELDS,     self::getRequest());
            $response = curl_exec($ch);

            return $response;

         }catch(\Exception $error) {
            if (empty($response)) { 
                throw new SoapFault('CURL error: '.curl_error($ch), curl_errno($ch)); 
            } 
        }
        curl_close($ch);        
    }

, поэтому мой результат, если я проверю это, вернет мне 0 и я ожидаю эту ошибку {"error": "Credenciales no válidas "} и если после экземпляра асоциативного массива a json и я использую json_enconde, верните false, и я не знаю, почему, если сделать то же самое в почтальоне, я выдаю ошибку, которую я ожидал

1 Ответ

1 голос
/ 08 апреля 2020

Правильно использовать json_encode вместо ввода массива для CURL_POSTFIELDS, если вы обращаетесь к JSON api.

Встроенная функция json_encode часто не может кодировать данные, если вы это сделали не установлен правильный флаг $ options для данных. На самом деле это довольно раздражает.

Когда он возвращает false, вы можете позвонить json_last_error_msg(), чтобы узнать причину, по которой он не может кодировать ваши данные. Мы надеемся, что это позволит нам больше разобраться в проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...