2013-10-20 138 views
0

您好,我尝试通过FTP通过FTP-Hoster square7.ch发送推送通知,但我总是会遇到一些错误。证书在服务器上。 任何人都可以帮助我吗?iOS推送通知PHP错误

这里是PHP代码:

<?php 
$streamContext= stream_context_create(); 
stream_context_set_option($streamContext , 'ssl','local_cert' , 'TestPushApp.pem'); 
//stream_context_set_option($streamContext , 'ssl' , 'passphrase','password'); 
$socketClient = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',$error,$errorString,60,STREAM_CLIENT_CONNECT,$streamContext); 
$payload['aps']= array('alert' => 'Erste Push Nachricht ueber PHP','sound' => 'default','badge' => '20'); 
$payload= json_encode($payload); 
echo $payload; 
$deviceToken = str_replace(' ','','XXXXXXXXXXXXXXXXXX'); 
$message= pack('CnH*',0,32,$devicetoken); 
$message= $message . pack ('n',strlen($payload)); 
$message= $messgae . $payload; 
fwrite($socketClient,$message); 
fclose($socketClient); 

?> 

这里的错误消息:

Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in /users/michaellll/www/push.php on line 5 

Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /users/michaellll/www/push.php on line 5 

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /users/michaellll/www/push.php on line 5 
{"aps":{"alert":"Erste Push Nachricht ueber PHP","sound":"default","badge":"20"}} 
Warning: fwrite() expects parameter 1 to be resource, boolean given in /users/michaellll/www/push.php on line 13 

Warning: fclose() expects parameter 1 to be resource, boolean given in /users/michaellll/www/push.php on line 14 
+0

请联系您的托管服务提供商,请确认2195或2196端口是否打开。 – Abhijit

+0

如何检查端口是否打开? –

+0

请联系您的托管服务提供商 – Abhijit

回答

3
// Push Notification code for IPHONE in PHP 
    $deviceToken = $users_rows['gcm_regid']; 
    $passphrase = 'pass1234'; 
    $ctx = stream_context_create(); 
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'DrinksterDevelopment.pem'); 
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

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

    if (!$fp) 
     exit("Failed to connect: $err $errstr" . PHP_EOL); 

    echo 'Connected to APNS' . PHP_EOL; 

    $body['aps'] = array(
     // 'alert' => $_GET["message"].'#'.$_GET["type"].'#'.$_GET["deal_id"], 
     'alert' => $_GET["message"], 
     'sound' => 'default' 
     ); 
    $body['other'] = $_GET["type"].'#'.$_GET["deal_id"]; 

    $payload = json_encode($body); 
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 
    $result_iphone = fwrite($fp, $msg, strlen($msg)); 

    if (!$result_iphone) 
     $msg_iphone = 'Message not delivered' . PHP_EOL; 

    else 
     $msg_iphone = 'Message successfully delivered' . PHP_EOL; 

    mail('[email protected]', 'IOSPushMsgStatus', $msg_iphone); 
    fclose($fp); 
    } 
+0

我尝试了代码,并得到相同的错误。它似乎是代码是不是问题 –

+0

我现在在其他两台服务器上试过它,它每次都会失败,你的代码说:(无法连接:)它是否在你的服务器上工作 –

0

我认为它的SSL问题,请启用SSL那么它可能会奏效。还有一两件事是有stream_context_set_option($streamContext , 'ssl','local_cert', 'TestPushApp.pem'); 它必须是这样的

$options = array('ssl' => array('local_cert' => 'include/TestPushApp.pem','passphrase' => '//Provided passpharase to you')); 
stream_context_set_option($streamContext , $options); 

,如果您有生产许可证我。 e pem file then then use of ssl://gateway.push.apple.com:2195

这里文件写入功能只包含两个参数fwrite($fp, $msg);不是那个打包消息的长度。