como enviar json post no cakephp
Pergunta
Eu preciso enviar exatamente isso:
POST http://api.outbound.io/api/v1/identify
Content-Type: application/json
{
"api_key": "MY_API_KEY",
"user_id": "MY_UNIQUE_USER_ID",
"traits" : {
"email" : "dhruv@outbound.io",
"name" : "Dhruv Mehta",
"phone" : "650xxxyyyyy"
}
}
eu nunca fiz algo assim e eu fiz um monte de pesquisa, mas eu não conseguia descobrir como enviar os parâmetros para essa URL
espero que vocês possam me ajudar com um exemplo, por favor, abraço!
Solução
Depois de muita pesquisa, eu descobrir como fazê-lo...
1.- Utilização
App::uses('HttpSocket', 'Network/Http'); // you should put this on your controller
2.- este, em sua função
$HttpSocket = new HttpSocket();
3.- Aqui vem os dados que você deseja enviar via correio (neste exemplo vou utilizar as variáveis que usei..você pode substituí-los, adicionar ou excluir algum.ele depende das informações que você deseja enviar)
$data = array(
"api_key" => "API KEY",
"user_id" => $idUser,
"event" => "other",
"extra" => array(
"course" => $course,
"price"=> $price )
);
3.- Definir os Cabeçalhos
$request = array(
'header' => array('Content-Type' => 'application/json',
),
);
4.-json_encode ele
$data = json_encode($data);
5.- Onde você está enviando o Post?, que dados?, tipo de pedido?, fazê-lo desta maneira
$response = $HttpSocket->post('http://api.yourweburl.com/api/', $data, $request);
*.- Você pode ver a resposta uncommenting este trecho
//pr($response->body());
*.- Finalmente, se você deseja redirecionar a algum lugar depois de tudo o que é feito..fazê-lo desta forma...
$this->redirect(array('action' => 'index'));
Você deve ter algo parecido com isso.
public function actiontooutbound($idUser, $course, $price){
$HttpSocket = new HttpSocket();
$data = array(
"api_key" => "API KEY",
"user_id" => $idUser,
"event" => "other",
"extra" => array(
"course" => $course,
"price"=> $price )
);
$request = array(
'header' => array(
'Content-Type' => 'application/json',
),
);
$data = json_encode($data);
$response = $HttpSocket->post('http://api.outbound.io/api/v1/track', $data, $request);
// pr($data);
//pr($response->body());
$this->redirect(array('action' => 'index'));
}
Esta é a forma de chamar esta função a partir de outra função (apenas no caso)
$this->actiontooutbound($idUser, $course, $price);
se você tiver alguma dúvida, deixe-me agora, eu vou ser feliz para ajudar você ;)
Outras dicas
Se você quiser fazer isso em PHP, eu gostaria de usar o curl.O seguinte é o teste, então não há garantias de que ele está correto:
$json = array(
'api_key' => 'My_API_KEY',
'user_id' => 'MY_UNIQUE_USER_ID',
'traits' => array(
'email' =< 'dhruv@outbound.io',
'name' => 'Dhrub Mehta',
'phone' => '650xxxyyyyy'
)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADERS, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_URL, 'http://api.outbound.io/api/v1/identify');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($json));
curl_setopt($ch, CURLOPT_POST, 1);
$results = curl_exec($ch);
if (curl_errno($ch)) {
debug(curl_error($ch));
} else {
curl_close($ch);
}
return $results;