簡體   English   中英

在 Json Curl 上使用生成的 PHP 字符串獲取“無效的關鍵字符”

[英]Getting "Invalid Key Character" With generated PHP string on 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 是有效的...

有關如何解決此問題的任何提示?

您只是不要在 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()為您處理一切(轉義等) 它也有一些選項——參見手冊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM