Jaymin
Jaymin

Reputation: 1661

Push Notifications in IOS - Handshake Failure

Whenever I am trying to give Push notifications it throws me multiple error, I have researched very well yet no solution.

1.stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

-

2.Severity: Warning

Message: stream_socket_client(): Failed to enable crypto

-

3.Severity: Warning

Message: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error)

-

4.Failed to connect: 0

Below is my code:

// Sends Push notification for iOS users
    public function iOS($data, $devicetoken) 
    {
        $deviceToken = $devicetoken;
        $passphrase= "";
        $ctx = stream_context_create();
        // ck.pem is your certificate file
        stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.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);
        // Create the payload body
        $body['aps'] = array(
        'alert' => array(
        'title' => $data['mtitle'],
        'body' => $data['mdesc'],
        ),
        '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));
        // Close the connection to the server
        fclose($fp);
        if (!$result)
            return 'Message not delivered' . PHP_EOL;
        else
            return 'Message successfully delivered' . PHP_EOL;
    }

Can anyone help me to sort it out?

Upvotes: 1

Views: 2303

Answers (1)

Vision Coderz
Vision Coderz

Reputation: 8078

add following line

stream_context_set_option( $ctx , 'ssl', 'verify_peer', false); 

if you have set password while generating pem file then you have to mention it in following line

  $passphrase= "";

if you have not set then this error due to pem file.Its not generated properly.

Upvotes: 1

Related Questions