webman-push插件兩處BUG
環(huán)境Windows10 PHP7.4 擴展都已經(jīng)安裝正常
1、api->trigger提交數(shù)據(jù)不成功,測試onApiClientMessage, var_dump無回顯,沒執(zhí)行到這里
2、$request->rawBody() , 默認(rèn)獲取body數(shù)據(jù)存在獲取無效的問題。詭異的是,有時候可以有時候不可以,
那么肯定就是BUG了,可以或者不可以的時候,數(shù)據(jù) 配置 KEY等完全一樣;就連測試BUG的人都一樣~_~!
// 執(zhí)行絕對是有問題的,沒有正常發(fā)送結(jié)果
$ch = $this->createCurl($this->_settings['api_address'], $s_url, 'POST', $query_params);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_value);
$response = $this->execCurl($ch);
/**
* Get http raw body.
*
* @return string
*/
public function rawBody()
{
// 獲取body數(shù)據(jù)不成功,數(shù)字簽名校驗是正常的,就這里獲取不到
return \substr($this->_buffer, \strpos($this->_buffer, "\r\n\r\n") + 4);
}
這個BUG其實昨天做測試的時候就發(fā)現(xiàn)了,但是,當(dāng)我從PHP7.3改為PHP7.4之后,就正常了,
我起初還以為是某個包或者函數(shù)不兼容7.3,今天臨下班看了下,居然又無法接收到了,按照平時的編碼習(xí)慣,
一個CURL函數(shù)寫完了,基本上不會出岔子,所以就沒往這里想,主要是,,這個插件吧,無異常,無日志,啥都沒有就是接收不到,搞的我很尷尬。通過一點點的追蹤發(fā)現(xiàn)了上述的兩個問題;
1、發(fā)送的這個API接口,因為消息包含name-channels等,可以完全使用POST寫死或者直接使用一個HTTP庫更好一些,或者可以把自身的request擴展下,包裝guzzlehttp一層可以自己寫GET POST數(shù)據(jù)更穩(wěn)定一些。增加一個加密也可以,這樣數(shù)據(jù)通訊也安全了,如果可行,也可以參考C++ TCP鏈接里面常用的struct消息結(jié)構(gòu)體來進(jìn)行數(shù)據(jù)的捕捉!
2、rawBody函數(shù),校驗過了,但是。。。Server.php第666行,能不能錯誤信息不叫Invalid signature???這個錯誤提示搞的我懷疑人生了,我把發(fā)送簽名,接收簽名都打印出來,結(jié)果導(dǎo)致我以為
// 一開始我以為是這里斷言的,說實話,我對著電腦發(fā)呆了很久很久~
if ($auth_signature !== $real_auth_signature) {
return $connection->send(new Response(401, [], 'Invalid signature'));
}
按照webman-push文檔搭建簡易工程,接收不到,new Api()->xxxx執(zhí)行這個控制器的時候,等待加載完畢的時間有點過長。。
同上。
補充一下:使用postman直接post /app/1024/event 修改rawBody后是可以正常輸出信息的,
也就是端口監(jiān)聽是沒問題的,只有curl和rewBody需要處理
webman/push插件用的人挺多了,沒有反饋過有這個問題。
windows下cmd可能會被不小心暫停,例如鼠標(biāo)點擊cmd窗口時就會暫停程序,這會導(dǎo)致進(jìn)程無任何響應(yīng),這個和你說的現(xiàn)象類似。如果再次出現(xiàn)你說的問題,切換到cmd窗口,按esc鍵可以取消暫停,試下是不是這個問題。
如果還沒解決,建議重新創(chuàng)建一個空的webman項目,安裝webman/push試下,排除其它干擾。
感謝亮哥,我現(xiàn)在這個工程代碼寫的太多了,只能一點點排查,我新建項目也不可以。但是我用postman直接發(fā)送計算好的HTTP+data確正常,然后我用一個純新的環(huán)境測試了PHP7.3 PHP7.4發(fā)現(xiàn)是正常的,所以可能是我電腦更新某些補丁的問題。