我需要使用 json_encode 将 PHP 数组发送到端点。
但我首先需要创建 PHP 数组。
我最初创建一个 JSON 对象以发送到端点,如下所示:
$content = '{
"event": "'. $event . '",
"payload": {
"email": "' . $email . '",
"fields": {
"mrc_c3": "' . $mrc_c3 . '",
"country": "' . $country . '",
"last_name": "'.$lastName.'",
"first_name": "' . $firstName . '",
"mrc_date_c3": "' . $mrc_date_c3_format . '"
},
"overwrite": true
}
}';
根据上一个问题,发送 JSON 对象不好,最好发送 PHP 数组并附加 json_encode 到它。
这是我创建 PHP 数组的尝试:
$arr = array('event' => $event, 'payload', 'email' => $email, 'fields', 'mrc_c3' => $mrc_c3, 'country' => $country, 'last_name' => $lastName, 'first_name' => $firstName, 'mrc_date_c3' => $mrc_date_c3_format);
我可以这样打印:
echo json_encode($arr);
我得到了这样的回应:
{"event":"donation_completed","0":"payload","email":"[email protected]","1":"fields","mrc_c3":"21.50","country":"US","last_name":"Beasley","first_name":"John","mrc_date_c3":"10\/18\/2024"}
但是我在“donation_completed”后面看到“0”,在“[email protected]”后面看到“1”,但我没有看到任何其他数字。
我做错了什么? 我正确地制作了 PHP 数组吗?
如果您使用缩进来格式化数组,每行一项,您将看到问题出在哪里:
$arr = [
'event' => $event,
'payload',
'email' => $email,
'fields',
'mrc_c3' => $mrc_c3,
'country' => $country,
'last_name' => $lastName,
'first_name' => $firstName,
'mrc_date_c3' => $mrc_date_c3_format,
];
注意
payload
和 fields
项只是独立值,它们应该是子数组:
$arr = [
'event' => $event,
'payload' => [
'email' => $email,
'fields' => [
'mrc_c3' => $mrc_c3,
'country' => $country,
'last_name' => $lastName,
'first_name' => $firstName,
'mrc_date_c3' => $mrc_date_c3_format,
],
],
];
另请注意,您不需要解码输入,然后将每个字段分配给临时变量,没有必要这样做:
$email = $payload["email"];
$firstName = $payload['fields']['first_name'];
$lastName = $payload['fields']['last_name'];
$country = $payload['fields']['country'];
$mrc_c3 = $payload['fields']['mrc_c3'];
$mrc_date_c3 = $payload['fields']['mrc_date_c3'];
$arr = [
'event' => $event,
'payload' => [
'email' => $email,
'fields' => [
'mrc_c3' => $mrc_c3,
'country' => $country,
'last_name' => $lastName,
'first_name' => $firstName,
'mrc_date_c3' => $mrc_date_c3_format,
],
],
];
直接使用数组引用即可:
$arr = [
'event' => $event,
'payload' => [
'email' => $payload["email"],
'fields' => [
'mrc_c3' => $payload['fields']['mrc_c3'],
'country' => $payload['fields']['country'],
'last_name' => $payload['fields']['last_name'],
'first_name' => $payload['fields']['first_name'],
'mrc_date_c3' => $payload['fields']['mrc_c3'],
],
],
];
如果入站有效负载与出站有效负载相同,那么您甚至不需要执行任何操作,只需直接使用您获得的入站有效负载即可:
$arr = [
'event' => $event,
'payload' => json_decode(file_get_contents('php://input'), true),
];
您想要按字段分解并重建它的唯一原因是验证内容,但您似乎没有这样做。