Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
taskonsite-архив-перенесен
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dmitry Korolev
taskonsite-архив-перенесен
Commits
687bcbda
Commit
687bcbda
authored
Feb 04, 2016
by
Shakarim Sapa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- Добавлен класс для работы с UniSender
parent
8832f584
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
193 additions
and
0 deletions
+193
-0
common/components/UnisenderAPI.php
common/components/UnisenderAPI.php
+193
-0
No files found.
common/components/UnisenderAPI.php
0 → 100644
View file @
687bcbda
<?php
/**
* API UniSender
*
* @see http://www.unisender.com/ru/help/api/
* @version 1.3
*/
class
UniSenderApi
{
/**
* @var string
*/
protected
$ApiKey
;
/**
* @var string
*/
protected
$Encoding
=
'UTF8'
;
/**
* @var int
*/
protected
$RetryCount
=
0
;
/**
* @var float
*/
protected
$Timeout
;
/**
* @var bool
*/
protected
$Compression
=
false
;
/**
* @param string $ApiKey
* @param string $Encoding
* @param int $RetryCount
*/
function
__construct
(
$ApiKey
,
$Encoding
=
'UTF8'
,
$RetryCount
=
4
,
$Timeout
=
null
,
$Compression
=
false
)
{
$this
->
ApiKey
=
$ApiKey
;
if
(
!
empty
(
$Encoding
))
{
$this
->
Encoding
=
$Encoding
;
}
if
(
!
empty
(
$RetryCount
))
{
$this
->
RetryCount
=
$RetryCount
;
}
if
(
!
empty
(
$Timeout
))
{
$this
->
Timeout
=
$Timeout
;
}
if
(
$Compression
)
{
$this
->
Compression
=
$Compression
;
}
}
/**
* @param string $Name
* @param array $Arguments
* @return string
*/
function
__call
(
$Name
,
$Arguments
)
{
if
(
!
is_array
(
$Arguments
)
||
empty
(
$Arguments
))
{
$Params
=
array
();
}
else
{
$Params
=
$Arguments
[
0
];
}
return
$this
->
callMethod
(
$Name
,
$Params
);
}
/**
* @param array $Params
* @return string
*/
function
subscribe
(
$Params
)
{
$Params
=
(
array
)
$Params
;
if
(
empty
(
$Params
[
'request_ip'
]))
{
$Params
[
'request_ip'
]
=
$this
->
getClientIp
();
}
return
$this
->
callMethod
(
'subscribe'
,
$Params
);
}
/**
* @param string $JSON
* @return mixed
*/
protected
function
decodeJSON
(
$JSON
)
{
return
json_decode
(
$JSON
);
}
/**
* @return string
*/
protected
function
getClientIp
()
{
$Result
=
''
;
if
(
!
empty
(
$_SERVER
[
"REMOTE_ADDR"
]))
{
$Result
=
$_SERVER
[
"REMOTE_ADDR"
];
}
else
if
(
!
empty
(
$_SERVER
[
"HTTP_X_FORWARDED_FOR"
]))
{
$Result
=
$_SERVER
[
"HTTP_X_FORWARDED_FOR"
];
}
else
if
(
!
empty
(
$_SERVER
[
"HTTP_CLIENT_IP"
]))
{
$Result
=
$_SERVER
[
"HTTP_CLIENT_IP"
];
}
if
(
preg_match
(
'/([0-9]|[0-9][0-9]|[01][0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[0-9][0-9]|[01][0-9][0-9]|2[0-4][0-9]|25[0-5])){3}/'
,
$Result
,
$Match
))
{
return
$Match
[
0
];
}
return
$Result
;
}
/**
* @param string $Value
* @param string $Key
*/
protected
function
iconv
(
&
$Value
,
$Key
)
{
$Value
=
iconv
(
$this
->
Encoding
,
'UTF8//IGNORE'
,
$Value
);
}
/**
* @param string $Value
* @param string $Key
*/
protected
function
mb_convert_encoding
(
&
$Value
,
$Key
)
{
$Value
=
mb_convert_encoding
(
$Value
,
'UTF8'
,
$this
->
Encoding
);
}
/**
* @param string $MethodName
* @param array $Params
* @return array
*/
protected
function
callMethod
(
$MethodName
,
$Params
=
array
())
{
if
(
$this
->
Encoding
!=
'UTF8'
)
{
if
(
function_exists
(
'iconv'
))
{
array_walk_recursive
(
$Params
,
array
(
$this
,
'iconv'
));
}
else
if
(
function_exists
(
'mb_convert_encoding'
))
{
array_walk_recursive
(
$Params
,
array
(
$this
,
'mb_convert_encoding'
));
}
}
$Url
=
$MethodName
.
'?format=json'
;
if
(
$this
->
Compression
)
{
$Url
.=
'&api_key='
.
$this
->
ApiKey
.
'&request_compression=bzip2'
;
$Content
=
bzcompress
(
http_build_query
(
$Params
));
}
else
{
$Params
=
array_merge
((
array
)
$Params
,
array
(
'api_key'
=>
$this
->
ApiKey
));
$Content
=
http_build_query
(
$Params
);
}
$ContextOptions
=
array
(
'http'
=>
array
(
'method'
=>
'POST'
,
'header'
=>
'Content-type: application/x-www-form-urlencoded'
,
'content'
=>
$Content
,
)
);
if
(
$this
->
Timeout
)
{
$ContextOptions
[
'http'
][
'timeout'
]
=
$this
->
Timeout
;
}
$RetryCount
=
0
;
$Context
=
stream_context_create
(
$ContextOptions
);
do
{
$Host
=
$this
->
getApiHost
(
$RetryCount
);
$Result
=
file_get_contents
(
$Host
.
$Url
,
false
,
$Context
);
$RetryCount
++
;
}
while
(
$Result
===
false
&&
$RetryCount
<
$this
->
RetryCount
);
return
$Result
;
}
/**
* @param int $RetryCount
* @return string
*/
protected
function
getApiHost
(
$RetryCount
=
0
)
{
if
(
$RetryCount
%
2
==
0
)
{
return
'http://api.unisender.com/ru/api/'
;
}
else
{
return
'http://www.api.unisender.com/ru/api/'
;
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment