-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathUniSenderWrapper.php
More file actions
101 lines (84 loc) · 3.31 KB
/
Copy pathUniSenderWrapper.php
File metadata and controls
101 lines (84 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
namespace omgdef\unisender;
class UniSenderWrapper extends BaseUniSenderWrapper
{
/**
* @param string $name
* @param array $arguments
* @return string
*/
public function __call($name, $arguments)
{
if (!is_array($arguments) || empty($arguments)) {
$params = [];
} else {
$params = $arguments[0];
}
return $this->sendQuery($name, $params);
}
/**
* @param array $params
* @return mixed
*/
public function sendSms($params)
{
$params['sender'] = $this->senderName ?: $this->senderPhone;
return $this->sendQuery('sendSms', $params);
}
/**
* Подписывает email на рассылку
*
* @param string $list_ids Перечисленные через запятую коды списков, в которые надо добавить подписчика. Коды можно узнать с помощью методаgetLists. Они совпадают с кодами, используемыми в форме подписки.
* @param array $fields Ассоциативный массив дополнительных полей. Обязательно должно присутствовать хотя бы поле «email» или «phone», иначе метод возвратит ошибку.
* В случае наличия и e-mail, и телефона, подписчик будет включён и в e-mail, и в SMS списки рассылки.
* @param array $params Остальные необязательные параметры. Больше информации http://www.unisender.com/ru/help/api/subscribe/
* @throws \Exception
* @return array
*/
public function subscribe($list_ids, array $fields, $params = [])
{
$params['list_ids'] = $list_ids;
if (empty($fields["email"]) && empty($fields["phone"])) {
throw new \Exception('email or phone keys are required in array $fields');
}
$params['fields'] = $fields;
return $this->sendQuery('subscribe', $params);
}
/**
* @param string $methodName
* @param array $params
* @return array
*/
public function sendQuery($methodName, array $params = [])
{
$this->convertParamsEncoding($params);
$params['api_key'] = $this->apiKey;
$body = http_build_query($params);
$getParams = http_build_query(
[
'format' => 'json',
'test_mode' => (int)$this->testMode
]
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout ?: 10);
$retryCount = 0;
do {
curl_setopt($ch, CURLOPT_URL, $this->getApiHost() . $methodName . '?' . $getParams);
$result = curl_exec($ch);
$retryCount++;
} while ($result === false && $retryCount < $this->retryCount);
curl_close($ch);
return $result !== false ? json_decode($result, true) : null;
}
/**
* @inheritdoc
*/
protected function getApiHost()
{
return parent::getApiHost() . "api/";
}
}