8000 Detect API error responses as XML, see #1 · codezninja/codebird-php@7e6ca03 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7e6ca03

Browse files
committed
Detect API error responses as XML, see jublo#1
1 parent 7878267 commit 7e6ca03

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

CHANGELOG

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
codebird-php - changelog
22
========================
33

4+
2.3.3 (not yet released)
5+
+ Detect API error responses as XML, see #1
6+
47
2.3.2 (2013-04-09)
58
+ Use protected keyword for methods that may be overriden in extended classes
69

src/codebird.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -864,13 +864,24 @@ protected function _parseApiReply($method, $reply)
864864
}
865865
} elseif (!$parsed = json_decode($reply, $need_array)) {
866866
if ($reply) {
867-
$reply = explo DC1B de('&', $reply);
868-
foreach ($reply as $element) {
869-
if (stristr($element, '=')) {
870-
list($key, $value) = explode('=', $element);
871-
$parsed[$key] = $value;
872-
} else {
873-
$parsed['message'] = $element;
867+
if (stripos($reply, '<' . '?xml version="1.0" encoding="UTF-8"?' . '>') === 0) {
868+
// we received XML...
869+
// since this only happens for errors,
870+
// don't perform a full decoding
871+
preg_match('/<request>(.*)<\/request>/', $reply, $request);
872+
preg_match('/<error>(.*)<\/error>/', $reply, $error);
873+
$parsed['request'] = htmlspecialchars_decode($request[1]);
874+
$parsed['error'] = htmlspecialchars_decode($error[1]);
875+
} else {
876+
// assume query format
877+
$reply = explode('&', $reply);
878+
foreach ($reply as $element) {
879+
if (stristr($element, '=')) {
880+
list($key, $value) = explode('=', $element);
881+
$parsed[$key] = $value;
882+
} else {
883+
$parsed['message'] = $element;
884+
}
874885
}
875886
}
876887
}

0 commit comments

Comments
 (0)
0