本帖最后由 keita603 于 2014-03-09 17:10:40 编辑

解决方案 »

  1.   

    证书文件跟php是放在同一个地方的。
      

  2.   

    // Put your device token here (without spaces):
    $deviceToken = 'f62380813f4bf0b7e724c5ce120f58d8275df0c7aa9eb5c0c19537d7102a1e30';// Put your private key's passphrase here:
    $passphrase = '1234';// Put your alert message here:
    $message = 'My first push test!';////////////////////////////////////////////////////////////////////////////////$ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushCert.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);// Open a connection to the APNS server
    $fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);echo 'Connected to APNS' . PHP_EOL;// Create the payload body
    $body['aps'] = array(
    'alert' => $message,
    'sound' => 'default'
    );// Encode the payload as JSON
    $payload = json_encode($body);// Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;// Send it to the server
    $result = fwrite($fp, $msg, strlen($msg));if (!$result)
    echo 'Message not delivered' . PHP_EOL;
    else
    echo 'Message successfully delivered' . PHP_EOL;// Close the connection to the server
    fclose($fp);代码是直接按照网上说的来做的,但是就是报错,用phpinfo()查看也是发现openssl是开启的。
      

  3.   

    是证书问题,我换了pem测试,显示成功。