如何在 php 中通过 Curl 正确使用 Mailgun Api

how to properly use Mailgun Api via Curl in php

我有来自 mailgun 的 curl 请求,我想用它来为我网站上的时事通讯创建电子邮件列表。

 curl -s --user 'api:YOUR_API_KEY' \
       https://api.mailgun.net/v3/lists \
       -F address='LIST@YOUR_DOMAIN_NAME' \
       -F description='Mailgun developers list'

我的问题是当我运行下面的代码时,它显示无效私钥401 似乎我没有在 curl 请求中正确设置 api 键。下面是我目前的编码

<?php

$email = 'tmack@gmail.com';
$api_key = 'my key here';
$api = 'api:';
$api_k = $api.$api_key;
$url = 'https://api.mailgun.net/v3/lists';

$json = json_encode([
    'address' => $email,
    'description'        => 'Tmack group Mailing List'
]);


$ch = curl_init($url);
//curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key);

curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_k);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$result = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $result;
curl_close($ch);
echo $status_code;

下面的代码对我有用。我刚刚在下面添加了代码行

curl_setopt($ch, CURLOPT_USERPWD, 'api:' . $api_k); 

下面是最终代码

$email = 'tmack@gmail.com';
$api_key = 'my key here';
$api = 'api:';
$api_k = $api.$api_key;
$url = 'https://api.mailgun.net/v3/lists';

$json = json_encode([
    'address' => $email,
    'description'        => 'Tmack group Mailing List'
]);


$ch = curl_init($url);

curl_setopt($ch, CURLOPT_USERPWD, 'api:' . $api_k);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$result = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $result;
curl_close($ch);
echo $status_code;