Неверный ответ json кодирование и нарушение массива Woocomerce 3 - PullRequest
0 голосов

Я получаю ответ в неправильной кодировке. Возможно из-за этого конструкция массива не работает. Как это исправить?

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://app.example.com/api/index.php?get_status");
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);

$decoded = (array) json_decode($result);

// Update order status
if( isset($decoded['result']) && $decoded['result'] == 'success' && isset($decoded['status']) && ! empty($decoded['status']) ){
    if( $decoded['status'] == "Order Completed" )
        $order->update_status( 'completed' );
    elseif( $decoded['status'] == "Order Cancelled" )
        $order->update_status( 'cancelled' );
}

Я искал решения и пробовал его, но он тоже не работает:

$decoded = (array) json_decode($result, JSON_UNESCAPED_UNICODE);

print_r( $decoded ); Показать:

Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )

print_r ( $result ); показать:

HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Thu, 05 Jul 2018 18:59:07 GMT Content-Type: text/html; charset=windows-1251 Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.4.45-0+deb7u2 Vary: Accept-Encoding Strict-Transport-Security: max-age=31536000; {"result":"success","status":"\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d"}

1 Ответ

0 голосов
/ 06 июля 2018

Вы запрашиваете информацию заголовка в ответе сервера. Вы не можете расшифровать это с помощью json_decode().

Чтобы получить чистый JSON-ответ от сервера, вам нужно установить:

curl_setopt($ch, CURLOPT_HEADER, false);

Как только вы получите действительный JSON в своем ответе, вы можете превратить его в массив PHP следующим образом (установите для второго аргумента значение true): $decoded = json_decode($result, true);

Теперь $decoded - это ассоциативный массив PHP, который вы можете перемещать.

...