Q:

API REST/JSON da B2W -failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized

Estou iniciando uma integração com a B2W, eles utilizam uma API REST/JSON,
não estou achando onde está errado no meu código, é algo relativo ao header, pois testo com o complemento do chrome dhc e registra a alteração corretamente:

meu código:
$url = 'https://api-sandbox.bonmarketplace.com.br/sku/10205_SKU1/price';

$data = json_encode(array(
            "sellPrice"=> "400.00",
            "listPrice"=> "400.00"
            )
    );  
//echo "<br>".$usuario = base64_encode("$username:");
//Content-Type:application/json;charset=utf-8;

$options = array(
    "http" => array(
        "method" => "PUT",
        "header" => "Content-Type: [application/json; charset=UTF-8; Authorization: Basic NjU5NjdGQkZBMDEzNjUwMTkyNzc1OTQ5MDI2NjUzNEU6",
        "content" => $data
));
print_r($options);
$context = stream_context_create($options);
print_r($context);
// make the request
$response = file_get_contents($url, false, $context);

erro 401 Unauthorized

A:

Nao sou experiente em PHP, mas como chamadas a URL's só sei fazer com cURL, aqui fica um exemplo que não retorna qualquer erro
<?php
    $url = 'http://api-sandbox.bonmarketplace.com.br/sku/10205_SKU1/price';
    $data = json_encode(
               array(
                  "sellPrice"=> "400.00",
                  "listPrice"=> "550.00"
               ));  
?>
<?php
    // usando cURL
    $curl = curl_init();

    curl_setopt_array($curl, array(
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "PUT",
      CURLOPT_POSTFIELDS => $data,
      CURLOPT_HTTPHEADER => array(
        "authorization: Basic NjU5NjdGQkZBMDEzNjUwMTkyNzc1OTQ5MDI2NjUzNEU6",
        "content-type: application/json;charset=UTF-8"
      ),
    ));

    $chleadresult = curl_exec($curl);
    $chleadapierr = curl_errno($curl);
    $chleaderrmsg = curl_error($curl);
    curl_close($chlead);
?>
<hr>
<h2>$chleadresult</h2>
<pre><?php echo $chleadresult ?></pre>
<h2>$chleadapierr</h2>
<pre><?php echo $chleadapierr ?></pre>
<h2>$chleaderrmsg</h2>
<pre><?php echo $chleaderrmsg ?></pre>

mas creio que o problema é mesmo a validacão do header, pois no código que mostra deveria de estar escrito como:
$options = array(
    "http" => array(
        "method" => "PUT",
        "header" => array(
            "Content-Type: application/json; charset=UTF-8",
            "Authorization: Basic NjU5NjdGQkZBMDEzNjUwMTkyNzc1OTQ5MDI2NjUzNEU6"
        ),
        "content" => $data
));

Já agora, se utilizar a ferramente Postman (gratuita), assim que fizer um request, tem disponivel esse request numa variadade de linguagem, includindo 3 versões de PHP:

