将URL传递给JSON数组

1 javascript php json curl callfire

我正在尝试在PHP中执行使用JSON数组的curl语句.我将在下面发布我的代码,并对我试图做的事情进行一些解释

function doPost($url, $user, $password, $params) {
  $authentication = 'Authorization: Basic '.base64_encode("$user:$password");
  $http = curl_init($url);
  curl_setopt($http, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($http, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($http, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($http, CURLOPT_URL, $url);
  curl_setopt($http, CURLOPT_POST, true);
  curl_setopt($http, CURLOPT_POSTFIELDS, $params);
  curl_setopt($http, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json', $authentication));
  return curl_exec($http);
}

$link = "http://link.it/i.htm?id=55&key=23987gf2389fg";
$phone = '5551231234';
$phone = '1' . $phone;

//Write message
$msg = "Click here " . $link;
$params = '[{"phoneNumber":"'.$phone.'","message":"'.$msg.'"}]';

//Send message
$return = doPost('https://api.link.com','username','password',$params);
echo $return;
Run Code Online (Sandbox Code Playgroud)

参数结束了

$params = '[{"phoneNumber":"15551231234","message":"Click here http://link.it/i.htm?id=55&key=23987gf2389fg"}]';
Run Code Online (Sandbox Code Playgroud)

一切看起来都不错 如果$ msg变量中没有链接,那么由params创建的JSON数组实际上可以正常工作.我能够执行成功的CURL调用.它失败的唯一时间是我添加一个链接到我的$ msg变量.

我已经联系API的支持团队,他们告诉我一切都应该在他们的最后工作.

此时我猜测链接需要以某种方式进行转义才能写入JSON数组.我已经尝试用反斜杠转义冒号和正斜杠,但它不能解决问题.是否有人可以透露如何通过网址?

先感谢您!!

Ray*_*Ray 5

不要手动构建JSON.构造和数组或对象然后在其上调用json_encode().

$params = array();
$object = array("phone"=>$phone, "message"=>$linkMsg);
$params[] = (object) $object;

$param_json_string = json_encode($params);
Run Code Online (Sandbox Code Playgroud)

然后,当使用curl通过POST提交JSON时,您需要在标题中指定字符串的长度.

curl_setopt($http, CURLOPT_HTTPHEADER, 
            array( 'Content-Type: application/json', 
                   'Content-Length: '. strlen($param_json_string)));           
Run Code Online (Sandbox Code Playgroud)

当然,这是除了您正在设置的身份验证之外的其他标头(正如我在您的doPost()方法中所做的那样).