PHP CURL中JSON类型POST字段如何正确使用变量?
在PHP的JSON类型POST字段中正确使用变量的方法
问题根源
你的代码存在两个核心问题:
- 单引号不解析变量:
CURLOPT_POSTFIELDS的内容用单引号包裹,PHP不会解析单引号内的$deger变量,导致实际发送的是字符串"$deger"而非变量值123。 - 语法错误:直接书写JSON对象的写法不符合PHP语法,无法被正确识别。
正确实现方式
方法一:用json_encode构建JSON字符串(推荐)
先创建包含变量的PHP数组,再通过json_encode()转换为标准JSON字符串,这种方式无需手动处理引号转义,能避免格式错误,尤其适合复杂数据结构。
<?php $deger = 123; $curl = curl_init(); // 构建包含变量的PHP数组 $postData = [ "iprocessnumber" => $deger, "activationStatus" => "SUCCESS", "code" => "100", "message" => "Test mesajı" ]; curl_setopt_array($curl, array( CURLOPT_URL => 'https://serviceurl', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', // 将数组转为合法的JSON字符串 CURLOPT_POSTFIELDS => json_encode($postData), CURLOPT_HTTPHEADER => array( 'Content-Type: application/json' ), )); $response = curl_exec($curl); curl_close($curl); echo $response; ?>
方法二:手动拼接JSON字符串(需注意转义)
如果要手动编写JSON字符串,需要用双引号包裹整个内容(PHP会解析双引号内的变量),同时内部的双引号必须转义:
<?php $deger = 123; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://serviceurl', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', // 双引号包裹字符串,内部双引号转义,变量会被解析 CURLOPT_POSTFIELDS => "{ \"iprocessnumber\": \"$deger\", \"activationStatus\": \"SUCCESS\", \"code\": \"100\", \"message\": \"Test mesajı\" }", CURLOPT_HTTPHEADER => array( 'Content-Type: application/json' ), )); $response = curl_exec($curl); curl_close($curl); echo $response; ?>
注意事项
优先使用方法一,因为json_encode()会自动处理所有特殊字符的转义,保证JSON格式的合法性,避免手动拼接时容易出现的语法错误。
内容的提问来源于stack exchange,提问作者RoyRoyFx
相关产品推荐
相关产品推荐

