获得"无效的关键字符"在Json Curl上生成PHP字符串

时间:2017-12-27 19:22:20

标签: php json curl

所以,我尝试使用php与项目的curl进行通信,并使用POST方法从我的数据库发送数据。

但是我得到了"无效的关键字符"错误,我真的不知道还有什么办法来解决这个问题......

代码:

<?php
require_once('autoload.php');
require_once('vendor/autoload.php');

$conexao = new Conexao();

$produtos = $conexao->select('produto', '*', 'LIMIT 1');

foreach ($produtos as $produto) {
    try {
        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, "url");
        $headers = array();
        $headers[] = "Content-Type: application/json";
        $headers[] = "X-Api-Key: key";
        $headers[] = "X-App-Key: key";
        curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($curl, CURLOPT_HEADER, $headers);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($curl, CURLOPT_POST, TRUE);

        $status = 1;

        if ($produto['status'] == 1){ 
            $status = 0;
        }

        $valores = '
        {
            "product":{
                "name":"'. trim($produto['descricao']) .'",
                "sku":"'. trim($produto['cod_est']) .'",
                "description":"'. trim($produto['obs']) .'",
                "price":'. $produto['valor_vend'] .',
                "saleprice":'. $produto['vl_promo'] .',
                "categories": [
                    "'. trim($produto['ender3']) .'"
                ],
                "properties": [],
                "related_products": [],
                "special_options": [],
                "slug":"'. str_replace(' ', '-', trim($produto['descricao'])) .'",
                "excerpt":"'. trim($produto['descricao']) .'",
                "factory_price":'. $produto['ult_custo'] .',
                "installments": 1,
                "shippable":0,
                "fixed_quantity": 999,
                "gtin_code":"'. trim($produto['cod_fabr']) .'",
                "ncm_code":"'. trim($produto['cod_ncm']). '",
                "track_stock": 0,
                "enabled":' . $status . ',
                "video": "",
                "weight":"' . $produto['peso_brut']. '",
                "height": "' . $produto['espessura'] . '",
                "width": "' . $produto['largura'] . '",
                "depth": "' . $produto['compriment'] . '",
                "meta": "",
                "seo_title": "",
                "seo_description":"'. trim($produto['descricao']) . '",
                "seo_keywords":"'. str_replace(' ',',',strtolower(trim($produto['descricao']))) .'"
            }
        }';

        curl_setopt($curl, CURLOPT_POSTFIELDS, $valores);

        $response = curl_exec($curl);
        curl_close($curl);

        print_r($response);
    }

    catch (Exception $e){
        echo 'Ocorreu um Erro: ' . $e;
    }

}

错误:

HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 263 Connection: keep-alive Cache-Control: max-age=1, public Date: Wed, 27 Dec 2017 19:09:30 GMT Expires: Wed, 27 Dec 2017 19:09:31 GMT Server: Apache Vary: Accept-Encoding X-Cache: Miss from cloudfront Via: 1.1 f2e2a7eca4778c8776461616fad77017.cloudfront.net (CloudFront) X-Amz-Cf-Id: urR4k92zkT2PCfimpCNAf5-uBmUi46nvHM6J-aWVZ8OxDYZUPteEWg== Disallowed Key Characters. "\r\n\t\t{\r\n\t\t\t\"product\":{\r\n\t\t\t\t\"name\":\"PH_CAMISA_GOLA_V_BR_12\",\r\n\t\t\t\t\"sku\":\"2129246\",\r\n\t\t\t\t\"description\":\"\",\r\n\t\t\t\t\"price\":49_000,\r\n\t\t\t\t\"saleprice\":0_000,\r\n\t\t\t\t\"categories\":_"

如果我复制生成的json并粘贴到JSONLint,它会显示json是有效的......

有关如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:1)

您只是 不在PHP中手动构建JSON

您首先构建数据结构并然后json_encode()整个事情...

$valores = [
    "product" => [
        "name" => trim($produto['descricao']),
        "sku" => trim($produto['cod_est']),
        "description" => trim($produto['obs']),
        "price" => $produto['valor_vend'],
        "saleprice" => $produto['vl_promo'],
        "categories" => [
            trim($produto['ender3']) // I'm not so sure here...
        ],
        "properties" => [],
        ...
        ...
        ...
    ]
];
// $valores is an array containing your data.

$encoded = json_encode($valores);
// $encoded is a string containing encoded JSON.

json_encode()为您处理一切(逃避等)。它也有一些选项 - 为see the manual