【问题标题】:PHP cURL won't POST JSON to APIPHP cURL 不会将 JSON 发布到 API
【发布时间】:2019-06-03 11:49:31
【问题描述】:

我有一个带有链接的仪表板,该链接触发数据库将应用程序状态更新为“已批准”并发布到 API。正在更新数据库,但未向收件人发送电子邮件。

数据库步骤正在运行,但未发布到 API。 API 是触发向个人发送电子邮件的原因。

免责声明:我是编码新手,如果我没有提供正确/足够的信息,我深表歉意。

<?php

require_once 'login.php';
$conn = new mysqli($hn, $un, $pw, $db); //Connect DB
$id = $_GET['id'];
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error()); 
  }

//Create query based on the ID passed from table
// sql to update a record
$sql = "UPDATE all_contacts SET status='Approved' WHERE id = '$id'"; 

$url = 'https://mail.com/messages/email';
$data = array(
  "subject" => "Hello!",
  "body" => "hi",
  "recipients" => array (
    "email" => "example@email.com")
  );
$data_string = json_encode($data);
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type: application/json",
    "X-AUTH-TOKEN: mytoken",
    "Content-Length: ". strlen($data_string)));

$result = curl_exec($ch);
echo $result;
curl_close($ch);

if (mysqli_query($conn, $sql)) {
    mysqli_close($conn);
    header("Location: dashboard.php"); 
    exit;
} else {
    echo "Error changing status";
}

?>

预期结果:使用新的应用程序状态更新数据库并触发电子邮件到 $data 中列出的电子邮件。

实际结果:它更新了数据库,但没有发布到 API。

【问题讨论】:

  • 请阅读SQL injection。不要使用字符串连接构建查询,而是使用prepared statementsbound parameters。请参阅 this pagethis post 了解一些很好的示例。
  • 如果你在curl_close($ch);行之前运行print_r(curl_getinfo($ch));,那么它会吐出一堆调试信息,包括来自远程API服务器的响应代码。
  • 您是否向 API 发送了所有正确的字段?许多 API 需要某种 KEY 才能使用它们的服务。

标签: php json rest api curl


【解决方案1】:

测试了您的代码,它工作正常。

我对 Beeceptor 进行了测试。

你得到了什么错误?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2010-10-23
    • 1970-01-01
    • 2015-10-28
    • 2015-07-29
    相关资源
    最近更新 更多