php - Newsletter2Go REST API - 如何将新收件人添加到列表中?

标签 php rest api newsletter2go

是否可以通过 Newsletter2Go 的 REST API 添加新的收件人?

我这样试过(片段):

public function subscribeAction()
{
    $this->init();

    $email = $this->getRequest()->getParam('email');
    $gender = $this->getRequest()->getParam('gender');
    $first_name = $this->getRequest()->getParam('first_name');
    $last_name = $this->getRequest()->getParam('last_name');

    $endpoint = "/recipients";
    $data = array(
        "list_id" => $this->listId,
        "email" => $email,
        "gender" => $gender,
        "first_name" => $first_name,
        "last_name" => $last_name,
    );

    $response = $this->curl($endpoint, $data);

    var_dump($response);
}

/**
 * @param $endpoint string the endpoint to call (see docs.newsletter2go.com)
 * @param $data array tha data to submit. In case of POST and PATCH its submitted as the body of the request. In case of GET and PATCH it is used as GET-Params. See docs.newsletter2go.com for supported parameters.
 * @param string $type GET,PATCH,POST,DELETE
 * @return \stdClass
 * @throws \Exception
 */
public function curl($endpoint, $data, $type = "GET")
{
    if (!isset($this->access_token) || strlen($this->access_token) == 0) {
        $this->getToken();
    }
    if (!isset($this->access_token) || strlen($this->access_token) == 0) {
        throw new \Exception("Authentication failed");
    }
    return $this->_curl('Bearer ' . $this->access_token, $endpoint, $data, $type);
}

private function _curl($authorization, $endpoint, $data, $type = "GET")
{
    $ch = curl_init();
    $data_string = json_encode($data);
    $get_params = "";
    if ($type == static::METHOD_POST || $type == static::METHOD_PATCH) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    if ($type == static::METHOD_POST) {
        curl_setopt($ch, CURLOPT_POST, true);
    }
    } else {
        if ($type == static::METHOD_GET || $type == static::METHOD_DELETE) {
            $get_params = "?" . http_build_query($data);
        } else {
            throw new \Exception("Invalid HTTP method: " . $type);
        }
    }
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $type);
    curl_setopt($ch, CURLOPT_URL, static::BASE_URL . $endpoint . $get_params);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Authorization: ' . $authorization,
        'Content-Length: ' . ($type == static::METHOD_GET || $type == static::METHOD_DELETE) ? 0 : strlen($data_string)
    ));
    if (!$this->sslVerification) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    }
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response);
}

https://docs.newsletter2go.com/#!/Recipient/createRecipient

但是我得到了一个很大的响应对象,即使我只尝试添加一个收件人,并且新的收件人没有添加到列表中。

object(stdClass)#188 (3) {
  ["status"]=>
  int(200)
  ["info"]=>
  object(stdClass)#169 (3) {
    ["links"]=>
    object(stdClass)#43 (3) {
      ["_href"]=>
      string(60) "https://api.newsletter2go.com/recipients?_limit=50&_offset=0"
      ["_next"]=>
      string(61) "https://api.newsletter2go.com/recipients?_limit=50&_offset=50"
      ["_last"]=>
      string(63) "https://api.newsletter2go.com/recipients?_limit=50&_offset=3433"
    }
    ["count"]=>
    int(3483)
    ["additional"]=>
    object(stdClass)#167 (1) {
      ["active"]=>
      int(0)
    }
  }
  ["value"]=>
  array(50) {
    [0]=>
    object(stdClass)#85 (2) {
      ["_href"]=>
      string(49) "https://api.newsletter2go.com/recipients/n9yldrar"
      ["id"]=>
      string(8) "n9yldrar"
    }
    [1]=>
    object(stdClass)#185 (2) {
      ["_href"]=>
      string(49) "https://api.newsletter2go.com/recipients/pgwvgwmr"
      ["id"]=>
      string(8) "pgwvgwmr"
    }
              ...
    [49]=>
    object(stdClass)#87 (2) {
      ["_href"]=>
      string(49) "https://api.newsletter2go.com/recipients/usa0dx4n"
      ["id"]=>
      string(8) "usa0dx4n"
    }

最佳答案

您必须使用 POST 请求来添加收件人,现在您正在发出 GET 请求。变化

$response = $this->curl($endpoint, $data);

$response = $this->curl($endpoint, $data, 'POST');

那么它应该可以工作了!

GET请求多用于获取数据,而POST请求则用于设置数据。您发布的 GET 请求返回所有收件人。

关于php - Newsletter2Go REST API - 如何将新收件人添加到列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51635560/

相关文章:

javascript - 使用ajax数据刷新div的更有效方法

java - 带有 Java 客户端的服务堆栈

java - OkHttpClient - 忽略系统属性中的代理

Mysql 返回不正确的 bigint 结果 1,非常奇怪的错误

android - 在 API 8 中使用加载器

php - Twig - 在 twig 中模拟 PHP for 循环功能,迭代次数为 +5(或 +1 以外的任何值)

php - 页面加载时不显示事件

php - 客户端提交时生成的 POST 随机数字段

javascript - 数组推送结果为空数组javascript

javascript - 如何在 React Native 中的 API url 中传递变量?