Можно ли добавить нового получателя через REST API Newsletter2Go?
Я попробовал это так (фрагмент):
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 возвращает всех ваших получателей.
Других решений пока нет …