【问题标题】:Communicate with APNS from PHP通过 PHP 与 APNS 通信
【发布时间】:2013-01-29 00:01:57
【问题描述】:

我想通过 PHP 脚本与 Apple 推送通知服务通信。 但我不断收到以下错误:

警告:stream_socket_client():无法设置私钥文件

我有一个如下所示的 .pem 文件:

-----BEGIN CERTIFICATE-----
     Encrypted String
-----END CERTIFICATE-----
     Bag Attributes
     friendlyName: ...
     localKeyID: ...
     Key Attributes: ...
-----BEGIN RSA PRIVATE KEY-----
     Proc-Type: ...
     DEK-Info: ...

     Encrypted String
-----END RSA PRIVATE KEY-----

我正在从 sudo 运行 PHP 脚本。它可以找到我的.pem file,因为如果我删除它,我会收到"handshake failure" 错误。

这里有什么问题?

【问题讨论】:

    标签: php ssl apple-push-notifications private-key


    【解决方案1】:

    我最近编写了一个脚本来发送远程推送通知。 我就是这样做的:

      $message = "A cool message!";
      $deviceid = "";
    
      $count = 0;
    
      $ctx = stream_context_create();
      stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns-dev.pem'); 
    
      $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
    
      if (!$fp) {
         echo 'Failed to connect ' . $err . $errstr;
      } else {
    
         $payloads['aps'] = array('alert' => $message, 'badge' => 1, 'sound' => 'default');
         $payload = json_encode($payloads);
    
         $msg = chr(0) . pack('n',32) . pack('H*', $deviceid) . pack('n',strlen($payload)) . $payload;
         fwrite($fp, $msg);
         $count += 1;
         fclose($fp);
    
      }   
    
      echo 'Sended: ' . $count;
    

    【讨论】:

      【解决方案2】:

      我让它工作了。结果我导出了我为推送通知生成的私钥,而不是相应的证书。

      【讨论】:

        猜你喜欢
        • 2015-11-23
        • 2012-07-11
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-12
        • 1970-01-01
        相关资源
        最近更新 更多