将JSON发布到php然后卷曲到不同的域

时间:2014-03-26 10:25:41

标签: javascript php jquery json curl

我想要实现的目标:使用HTML / JQUERY并将XMLHttpRequest(JSON)发布到php文件,然后我们可以使用CURL将json提交到外部网站。

以下是我提交该数据的方式:

var myDate = "30/01/2014";
var n=myDate.split("/");
var fdate = (n[2]+"-"+n[1]+"-"+n[0] );

var xhr = new XMLHttpRequest();
xhr.open("POST", "index.php");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
  if (this.readyState == 4) {
    alert('Status: '+this.status+'\nHeaders: '+JSON.stringify(this.getAllResponseHeaders())+'\nBody: '+this.responseText);
  }
};
xhr.send("{\n    \"utoken\":  \"\",,\n    \"email\": \"blah@blah.co.uk\",\n    \"customer_name\": \"blah blah\",\n    \"order_id\": \"112897\",\n    \"platform\": \"general\",\n    \"order_date\": \"" + fdate + "\",\n    \"currency_iso\": \"GBP\"\n}");

现在我如何在php中获取这些数据并进行操作。因为像utoken这样的东西我可以从php文件中获取但是无法获取其他信息。

PHP

$chs = curl_init();
curl_setopt($chs, CURLOPT_URL, "EXTERNAL API URL");
curl_setopt($chs, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($chs, CURLOPT_HEADER, FALSE);
curl_setopt($chs, CURLOPT_POST, TRUE);
curl_setopt($chs, CURLOPT_POSTFIELDS, print_r($HTTP_RAW_POST_DATA););
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
$response = curl_exec($chs);
curl_close($chs);

2 个答案:

答案 0 :(得分:0)

您应格式化要发送的数据,如下所示:

xhr.send("utoken=&email=blah@blah.co.uk&customer_name=blah blah&order_id=112897&platform=general&order_date=" + fdate + "&currency_iso=GBP");

以下行无法正常工作,因为print_r打印出一个数组。您还有语法错误(;在函数参数内)。

curl_setopt($chs, CURLOPT_POSTFIELDS, print_r($HTTP_RAW_POST_DATA););

而是尝试:

curl_setopt($chs, CURLOPT_POSTFIELDS, $HTTP_RAW_POST_DATA);

希望有所帮助

答案 1 :(得分:0)

由于您要发布JSON,因此您的帖子请求应如下所示:

curl_setopt($chs, CURLOPT_POSTFIELDS, '{"utoken":"", "email":"some@xya.xom"}');

或者,如果你有一个如下所示的数组,那么你可以使用json_encode轻松地将数组转换为json

$post_data = array(
    "utoken" => "",
    "email" => "some@xya.com"
);
curl_setopt($chs, CURLOPT_POSTFIELDS, json_encode($post_data));

仅供参考:函数json_encode将数组值转换为{"utoken":"","email":"some@xya.com"}