Pusher PHP Server无法正常工作

Qas*_*sim -1 javascript php websocket pusher

我一直试图使用Pusher PHP Server触发事件,但无法这样做.我已经尝试了几种解决方案,例如在我的服务器环境中启用cURL扩展但仍然没有结果.我已经成功地使用Pusher Debug Console提供的事件创建器触发事件​​.我错过了什么吗?

客户端代码片段(订阅频道和收听活动)

<head>
  <title>Pusher Test</title>
  <script src="//js.pusher.com/2.2/pusher.min.js" type="text/javascript"></script>
  <script type="text/javascript">
    Pusher.log = function(message) {
      if (window.console && window.console.log) {
        window.console.log(message);
      }
    };

    var pusher = new Pusher('key');
    var channel = pusher.subscribe('test_channel');
    channel.bind('my_event', function(data) {
      alert(data.message);
    });
  </script>
</head>
Run Code Online (Sandbox Code Playgroud)

服务器端代码片段(不工作)

require('Pusher.php'); 
$app_id = 'xxx'; 
$app_key = 'xxx';
$app_secret = 'xxx';
$pusher = new Pusher($app_key, $app_secret, $app_id);
$data['message'] = 'hello world';
$pusher->trigger('test_channel', 'my_event', $data);
Run Code Online (Sandbox Code Playgroud)

leg*_*ter 7

既然你说事件创建者工作,我假设客户端功能正常,问题是:

  • PHP代码
  • 通过Pusher PHP库与Web API的交互.

检查PHP代码

确保打开错误报告并执行代码:

<?php
error_reporting(E_ALL);

require('Pusher.php'); 
$app_id = 'xxx'; 
$app_key = 'xxx';
$app_secret = 'xxx';
$pusher = new Pusher($app_key, $app_secret, $app_id);
$data['message'] = 'hello world';
$pusher->trigger('test_channel', 'my_event', $data);
Run Code Online (Sandbox Code Playgroud)

运行上面代码的输出是什么?

调试和记录Pusher PHP库

如果所有代码都很好,那么我建议你看一下库提供的调试和日志信息:https: //github.com/pusher/pusher-php-server#debugging

<?php
error_reporting(E_ALL);

require('Pusher.php'); 
$app_id = 'xxx'; 
$app_key = 'xxx';
$app_secret = 'xxx';

class MyLogger {
  public function log( $msg ) {
    print_r( $msg . "<br />" );
  }
}

$pusher = new Pusher($app_key, $app_secret, $app_id);
$logger = new MyLogger();
$pusher->set_logger( $logger );

$data['message'] = 'hello world';
$result = $pusher->trigger('test_channel', 'my_event', $data);
$logger->log( "---- My Result ---" );
$logger->log( $result );
Run Code Online (Sandbox Code Playgroud)

运行此代码的输出是什么?它应该是这样的:

Pusher: - >触发接收到的字符串通道"test_channel".转换为数组.Pusher:curl_init( http://api.pusherapp.com:80/apps/97748/events?auth_key=XXX&auth_signature=XXX&auth_timestamp=1419197439&auth_version=1.0&body_md5=XXX )Pusher:触发POST:{"name":"my_event"," data":"{\"message \":\"hello world \"}","channels":["test_channel"]} Pusher:exec_curl response:Array([body] => {} [status] => 200 )----我的结果--- 1

上述步骤应该为您提供所需的一切,以便找出事情不起作用的原因.

  • 非常感谢.在PHP Pusher Library中调试和登录后,我发现我的时区正在创建问题.我暂时设法通过将我的服务器环境的时间戳与Pusher的API时间戳匹配来解决问题.有没有解决这个时区问题的通用解决方案?以下是日志堆栈跟踪`Pusher:exec_curl response:Array([body] => {Timestamp expired.给定时间戳(2014-12-22T07:27:17Z)不在服务器时间的600s内(2014-12-22T06:27) :20Z)} [status] => 401)`再次感谢. (2认同)