ホームページ  >  記事  >  バックエンド開発  >  PHP プッシュ メッセージを iOS に送信すると、このエラーが表示されます

PHP プッシュ メッセージを iOS に送信すると、このエラーが表示されます

WBOY
WBOYオリジナル
2016-06-23 13:44:401634ブラウズ

http://blog.csdn.net/motian06/article/details/8199247 このブログを参照してください。自分のデバイス番号とパスフレーズを置き換えた後、このエラーをローカルでテストし、ローカルの Apache で openssl を開きました。
警告: stream_socket_client() [function.stream-socket-client]: ローカル証明書チェーン ファイル `E:AppServwwwceshi/apns-dev.pem' を設定できません。cafile/capath 設定に証明書とその発行者の詳細が含まれていることを確認してください。 E :AppServwwwceshi2.php の 25 行目

警告: stream_socket_client() [function.stream-socket-client]: E:AppServwwwceshi2.php の 25 行目で SSL ハンドルの作成に失敗しました

警告: stream_socket_client() [function .stream -socket-client]: E:AppServwwwceshi2.php の 25 行目で暗号化を有効にできませんでした

警告: stream_socket_client() [function.stream-socket-client]: ssl://gateway.sandbox に接続できません。 Push.apple.com:2195 (Unknown error) in E:AppServwwwceshi2.php on line 25
接続に失敗しました


ディスカッションへの返信 (解決策)

apns-dev.pem のパスである可能性がありますは間違っています。提案とプッシュ ファイルは同じレベルにあり、先月、Apple のリンク方法が TLS に変更されました。これは、SSL リンクをサポートしません

stream_socket_client('tls://gateway.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT |STREAM_CLIENT_PERSISTENT, $ctx);

????その可能性が高いです。

apns-dev.pem のパスが間違っている可能性があります。プッシュ ファイルと同じレベルにあることが推奨されます。さらに、先月、Apple はリンク方法を tls に変更し、SSL リンクをサポートしませんでした。

stream_socket_client('tls://gateway.push .apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
.pem 証明書ファイルと php プッシュ ファイルは同じ内にありますディレクトリを tls に変更する必要がありますか?

stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');    stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);  

これは必要ありません、リンク方法を変更しただけです

//手机注册应用返回唯一的deviceToken$deviceToken = 'xxxxxxxxx';//ck.pem通关密码$pass = 'xxx';   //消息内容$message = 'A test message!';//badge我也不知是什么$badge = 4;//sound我也不知是什么(或许是推送消息到手机时的提示音)$sound = 'default';//建设的通知有效载荷(即通知包含的一些信息)$body = array();$body['aps'] = array('alert' => $message);//把数组数据转换为json数据$payload = json_encode($body);echo strlen($payload),"\r\n";//下边的写法就是死写法了,一般不需要修改,//唯一要修改的就是:ssl://gateway.sandbox.push.apple.com:2195这个是沙盒测试地址,ssl://gateway.push.apple.com:2195正式发布地址$ctx = stream_context_create();$pem = dirname(__FILE__) .'/'.'apns-dev.pem';stream_context_set_option($ctx, 'tls', 'local_cert', $pem);  stream_context_set_option($ctx, 'tls', 'passphrase', $pass);$fp = stream_socket_client('tls://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);if (!$fp) {    print "Failed to connect $err $errstr\n";    return;}else {   print "Connection OK\n<br/>";}// send message$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;print "Sending message :" . $payload . "\n";  fwrite($fp, $msg);fclose($fp);
tls に変更した後もエラーが発生します


これは必要ありません、リンク方法を変更しただけです

お世話になります。変更した後も、同じディレクトリ内の php ファイルと .pem ファイルに対してエラーが発生します

私のコード
//手机注册应用返回唯一的deviceToken$deviceToken = 'xxxxx';//ck.pem通关密码$pass = 'xxx';   //消息内容$message = 'A test message!';//badge我也不知是什么$badge = 4;//sound我也不知是什么(或许是推送消息到手机时的提示音)$sound = 'default';//建设的通知有效载荷(即通知包含的一些信息)$body = array();$body['aps'] = array('alert' => $message);//把数组数据转换为json数据$payload = json_encode($body);echo strlen($payload),"\r\n";//下边的写法就是死写法了,一般不需要修改,//唯一要修改的就是:ssl://gateway.sandbox.push.apple.com:2195这个是沙盒测试地址,ssl://gateway.push.apple.com:2195正式发布地址$ctx = stream_context_create();$pem = dirname(__FILE__) .'/'.'apns-dev.pem';stream_context_set_option($ctx, 'ssl', 'local_cert', $pem);  stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);$fp = stream_socket_client('tls://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);if (!$fp) {    print "Failed to connect $err $errstr\n";    return;}else {   print "Connection OK\n<br/>";}// send message$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;print "Sending message :" . $payload . "\n";  fwrite($fp, $msg);fclose($fp);

エラーが報告されました
警告: stream_socket_client() [function.stream-socket-client]: 設定できません。 D:clientwebdemoy .php の秘密鍵ファイル `D:clientwebdemoapns-dev.pem' の 25 行目

警告: stream_socket_client() [function.stream-socket-client]: D:clientwebdemoy.php で SSL ハンドルの作成に失敗しました25 行目

警告: stream_socket_client() [function.stream-socket -client]: D:clientwebdemoy.php の 25 行目で暗号化を有効にできませんでした

警告: stream_socket_client() [function.stream-socket-client]: tls://gateway.push.apple.com に接続できません: D:clientwebdemoy.php の 25 行目で 2195 (不明なエラー)
0 に接続できませんでした

もう一度見てもらえますか?
phpinfo() と openssl を表示すると、それが有効になっていることがわかります

$pem = dirname(__FILE__) .'/'.'apns-dev.pem';

D:/wamp/ などの絶対パスに変更しますwww/push/ck .pem 試してください

$pem = dirname(__FILE__) .'/'.'apns-dev.pem';

D:/wamp/www/push/ck などの絶対パスに変更します。 .pem 試してみる
 改成绝对路径以后 还是会报错 
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 D:\clientweb\demo\y.php on line 25

Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in D:\clientweb\demo\y.php on line 25

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to tls://gateway.push.apple.com:2195 (Unknown error) in D:\clientweb\demo\y.php on line 25
Failed to connect 0

http://zhidao.baidu.com/link?url=OVktep-jhluby3rXTZURF-QcCl4bMY5DWXgdQXhUaTMV08zbvNyRqswL4J0JO46e3iYYMQdUGPw160YQ4ALdUK

自己懒得查 我就帮你查

http://zhidao.baidu.com/link?url=OVktep-jhluby3rXTZURF-QcCl4bMY5DWXgdQXhUaTMV08zbvNyRqswL4J0JO46e3iYYMQdUGPw160YQ4ALdUK

自己懒得查 我就帮你查

 我查了资料了,木有查着 ,应该不是连不上苹果服务器的原因

用你的代码,改后测试了一下,能发送,改动:ck.pem与文件同级,链接沙盒,自己的token和pass,其它未改

//手机注册应用返回唯一的deviceToken$deviceToken = 'xxx';//隐藏了自己的token//ck.pem通关密码$pass = '123456';   //消息内容$message = 'A test message!';//badge我也不知是什么$badge = 4;//sound我也不知是什么(或许是推送消息到手机时的提示音)$sound = 'default';//建设的通知有效载荷(即通知包含的一些信息)$body = array();$body['aps'] = array('alert' => $message);//把数组数据转换为json数据$payload = json_encode($body);echo strlen($payload),"\r\n";//下边的写法就是死写法了,一般不需要修改,//唯一要修改的就是:ssl://gateway.sandbox.push.apple.com:2195这个是沙盒测试地址,ssl://gateway.push.apple.com:2195正式发布地址$ctx = stream_context_create();$pem = dirname(__FILE__) .'/'.'ck.pem';stream_context_set_option($ctx, 'ssl', 'local_cert', $pem);  stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);$fp = stream_socket_client('tls://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);if (!$fp) {    print "Failed to connect $err $errstr\n";    return;}else {   print "Connection OK\n<br/>";}// send message$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;print "Sending message :" . $payload . "\n";  fwrite($fp, $msg);fclose($fp);/*35 Connection OK Sending message :{"aps":{"alert":"A test message!"}} */

提示你握手失败,可能是你的apns-dev.pem不对

jam00  谢谢你的热心帮忙  我再去试试

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。