Enviar dados para um serviço web usando postagem

Foi fornecido um exemplo de como se conectar a um determinado servidor web.

É uma forma simples com duas inputs:

Formulário do Webservice

Ele retorna verdadeiro depois de enviar o formulário com o token e o json.

Este é o código:

    Webservice JSON   



Para torná-lo dynamic, estou tentando replicá-lo usando o PHP.

 $url = "http://foowebservice.com/post.wd"; $data = array( 'token' => 'fooToken', 'json' => '{"foo":"test"}', ); $content = json_encode($data); $curl = curl_init($url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $content); $json_response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $response = json_decode($json_response, true); 

Mas devo fazer algo errado, porque $ resposta é dado um valor falso.

Não me importo de fazer isso de outra maneira em vez de usar Curl.

Alguma sugestão?

ATUALIZAR

Conforme sugerido na primeira resposta, tentei configurar a matriz de dados $ dessa maneira:

 $data = array( 'token' => 'fooToken', 'json' => array('foo'=>'test'), ); 

No entanto, a resposta também foi falsa.

Eu tentei o Postman REST – Plugin de cliente para o Chrome e usando Ferramentas de desenvolvimento / Rede, o URL nos headers é:

 Request URL:http://foowebservice.com/post.wd?token=fooToken&json={%22foo%22:%22test%22} 

O que eu suponho é a mesma url que deve ser enviada usando CURL.

Você está passando os dados POST no formato JSON, tente passá-lo no formulário k1 = v1 & k2 = v2. Por exemplo, adicione o seguinte após a definição da matriz de $data :

 foreach($data as $key=>$value) { $content .= $key.'='.$value.'&'; } 

em seguida, remova as seguintes linhas:

 $content = json_encode($data); 

e

 curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); 

Código completo (testado):

test.php

  'fooToken', 'json' => '{"foo":"test"}', ); foreach($data as $key=>$value) { $content .= $key.'='.$value.'&'; } $curl = curl_init($url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $content); $json_response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $response = json_decode($json_response, true); var_dump($response); ?> 

testação.php

  

saída:

 array(2) { 'token' => string(8) "fooToken" 'json' => string(14) "{"foo":"test"}" } 

Parte de $data já está codificada por json. Tente fazer $data puro php. ie $data['json']=array('foo'=>'test');