让CURL在PHP中工作(用变量替换)



以下代码有效,电子邮件是使用我的sendinblue API发送的:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.sendinblue.com/v3/smtp/email');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{  n   "sender":{  n      "name":"My name",n      "email":"admin@mydomain.sg"n   },n   "to":[  n      {  n         "email":"hisname@hisdomain.com",n         "name":"His name"n      }n   ],n   "subject":"Testing email on request",n   "htmlContent":"<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"n}");
$headers = array();
$headers[] = 'Accept: application/json';
$headers[] = 'Api-Key: I removed API Key before posting this question';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
?>

但是我想用变量替换发件人姓名和电子邮件但是当我替换

时它不起作用
curl_setopt($ch, CURLOPT_POSTFIELDS, "{  n   "sender":{  n      "name":"My name",n      "email":"admin@mydomain.sg"n   },n   "to":[  n      {  n         "email":"hisname@hisdomain.com",n         "name":"His name"n      }n   ],n   "subject":"Testing email on request",n   "htmlContent":"<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"n}");

:

$myname = "My Name";
$myemail = "admin@mydomain.sg";
curl_setopt($ch, CURLOPT_POSTFIELDS, "{  n   "sender":{  n      "name":$myname,n      "email":$myemailn   },n   "to":[  n      {  n         "email":"hisname@hisdomain.com",n         "name":"His name"n      }n   ],n   "subject":"Testing email on request",n   "htmlContent":"<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"n}");

谁能告诉我问题出在哪里?对不起,我是一个初学者在编码…提前谢谢你!

您可能会面临一个错误,因为您试图在JSON字符串中插入一个变量,但错过了用双引号包装变量。JSON中的字符串必须总是用双引号括起来。

像这样直接处理JSON字符串通常不是一个好主意,除非它是一个非常短或简单的字符串。

更好的方法是使用数组,然后使用json_encode将数组转换为字符串,以防您需要JSON字符串。

与其从头开始创建数组,不如偷懒一点:您可以使用json_decodecurl_setopt中使用的相同字符串转换为关联数组。

$curlPostfields = json_decode("{  n   "sender":{  n      "name":"My name",n      "email":"admin@mydomain.sg"n   },n   "to":[  n      {  n         "email":"hisname@hisdomain.com",n         "name":"His name"n      }n   ],n   "subject":"Testing email on request",n   "htmlContent":"<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"n}", 
$association = true);

查看json_decode的文档,您可以看到选项$association = true创建了一个关联数组而不是一个对象。

数组内容被转储到下面。

>>> var_dump($curlPostfields);
array(4) {
["sender"]=>
array(2) {
["name"]=>
string(7) "My name"
["email"]=>
string(17) "admin@mydomain.sg"
}
["to"]=>
array(1) {
[0]=>
array(2) {
["email"]=>
string(21) "hisname@hisdomain.com"
["name"]=>
string(8) "His name"
}
}
["subject"]=>
string(24) "Testing email on request"
["htmlContent"]=>
string(114) "<html><head></head><body><p>Hello,</p>This is my first transactional email sent from Sendinblue.</p></body></html>"
}

现在很容易改变,因为你需要发送方nameemail字段,你只需要直接编辑数组。

$myCustomName = 'Mr. Custom Name';
$myCustomMail = 'admin@customdomain.me"';
$curlPostfields['sender']['name'] = $myCustomName;
$curlPostfields['sender']['name'] = $myCustomMail;

现在你可以把数组转换回JSON字符串,json_encode将处理所有的双引号和东西。

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($curlPostfields));

最新更新