4

私はphpを初めて使用し、codeigniterでプッシュ通知のコードを作成しましたが、これらのエラーが発生しました。

これが私のモデルです..

function sendmessage($appid, $deviceid, $status, $message)
{

    $deviceToken = '0f744707bebcf74f9b7c25d48e3358945f6aa01da5ddb387462c7eaf61bbad78';

    $message = 'My first push notification!';

    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
    //stream_context_set_option($ctx, 'ssl', 'passphrase', 'essar@123');

    $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);

    if (!$fp){
        exit("Failed to connect: $err $errstr" . PHP_EOL);
              }
          else {
          print "Connection OK/n";
               }
    echo 'Connected to APNS' . PHP_EOL;

    $body['aps'] = array(
        'alert' => $message,
        'sound' => 'default'
        );
    $payload = json_encode($body);
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
    $result = fwrite($fp, $msg, strlen($msg));

    if (!$result)
        echo 'Message not delivered' . PHP_EOL;
    else
        echo 'Message successfully delivered' . PHP_EOL;
    fclose($fp);

    $data = array(
    'message' => $this->message . 'add',
    'appid' => $this->appid,
    'deviceid' => $this->deviceid,
    'status' => $status
            );
    $this->sendmessage($data);

エラーメッセージ:

メッセージ: stream_socket_client(): SSL 操作がコード 1 で失敗しました。 OpenSSL エラー メッセージ: エラー:14094410:SSL ルーチン:SSL3_READ_BYTES:sslv3 アラート ハンドシェイク エラーssl://gateway.sandbox.push.apple.com:2195 (不明なエラー)

4

3 に答える 3

1

私はあなたがここで述べたのと同じ問題を抱えています。これを見つけるのに時間がかかり、頭を悩ませました...

ハンドシェイク エラーを修正した解決策は、委託証明書をダウンロードし、以下のコードを使用してこれをストリーム コンテキストに含めることでした。

$entrustCert =  '<full path to cert>/entrust_2048_ca.cer';
stream_context_set_option($ctx, 'ssl', 'cafile', entrustCert);


サンドボックス APN サービスで断続的な接続の問題が発生しているようです。次のようなエラーが返されることがあります。

Warning: stream_socket_client(): SSL: Connection reset by peer 
Warning: stream_socket_client(): Failed to enable crypto


これが誰かの時間の節約になることを願っています!

于 2015-02-21T00:23:48.037 に答える