jpush / jpush-api-php-client

JPush's officially supported PHP client library for accessing JPush APIs. 极光推送官方支持的 PHP 版本服务器端 SDK。
https://docs.jiguang.cn
MIT License
522 stars 174 forks source link

当接口挂的时候sdk crash #46

Closed wyzhcn closed 7 years ago

wyzhcn commented 7 years ago

key_exists() expects parameter 2 to be array, null given

trace 如下图

2017-02-14 2 53 30
ghost commented 7 years ago

看这信息,你的意思是在这种情况下 $body 的值是 null 吗?一般来讲处理不成功的时候都会有返回值的吧,请问你用的是那个 API 和什么情况下发生的这种错误

wyzhcn commented 7 years ago

看我贴图中的body内容,应该是你们极光的api出现502的时候会这样

ghost commented 7 years ago

服务器挂了,直接由前端 nginx 返回了错误,这个还无法格式化,让我想想啊

wyzhcn commented 7 years ago
_2017-02-14_ 3_58_13
ghost commented 7 years ago

@wyzhcn 当格式化 $body 之后,如果 $body 为 null 的话,就说明极光的服务器本身除了问题,那么在这种情况下

if(is_string($response['body'])) {
    $this->code = ' ';
    $this->message = $response['body'];
} else {
    $body = json_decode($response['body'], true);
    if (key_exists('error', $body)) {
        $this->code = $body['error']['code'];
        $this->message = $body['error']['message'];
    } else {
        $this->code = $body['code'];
        $this->message = $body['message'];
    }
}

这么处理你觉得如何呢

wyzhcn commented 7 years ago

我觉得可以抛出一个 ServiceNotAvaliable 的异常,这样外部可以针对性的处理

ghost commented 7 years ago

你说的有点道理,但是这么做的话,每次请求 API 的时候就要多 try 一个异常了,还没有照顾到其他已写好的代码,并且按照现在的逻辑在异常中载抛一个异常感觉有点奇怪(那现在这个异常怎么办,除非去改动 http.php 这个文件,修改整个异常的逻辑,但是为了这个感觉有点不太值得)

wyzhcn commented 7 years ago

现在就是已经在抛出异常了,只是抛得是ErrorException这个基础异常

ghost commented 7 years ago

现在是在异常对象构造函数里面,需要在这里之前变成 ServiceNotAvaliable,不过好像其实工作量也不大,我觉得你说的很有道理,就按照你说的办吧,发布版本之后我会在这里 @ 你

wyzhcn commented 7 years ago

好的,感谢

ghost commented 7 years ago

出现这种问题是我们这边的失误才对

ghost commented 7 years ago

@wyzhcn 如果有空的话,可以帮我 review 一下 https://github.com/jpush/jpush-api-php-client/commit/64e6a24f842199b5d36068623dbd3f5e47edaa97

Lris12J commented 7 years ago

@wyzhcn hi,感谢你提出的问题,有一份好礼相送,希望提供email 地址,官方人员会联系你,或可加官方qq 1206559424,感谢~

wyzhcn commented 7 years ago

@helperhaps 👍

@Lris12J 心领了

ghost commented 7 years ago

@wyzhcn 只求给出 review 意见,在线等:lol:

wyzhcn commented 7 years ago

@helperhaps 没啥问题 后期可以考虑封装出一个Response类来处理,结构会更清晰

ghost commented 7 years ago

有些东西已经定型之后很难去修改的,所以我都想着,要不要在下班时间重新写一个第三方版本了

ps: github 今天不是很稳定啊

wyzhcn commented 7 years ago

稳定更重要 😜

ghost commented 7 years ago

OK, 我去 release 一下,这个 issue 我就关了哈