1
您好我正在發送推送通知,這在命令行中很好用,但不能在運行時作爲php網頁。針對iOS的PHP推送通知在命令行工作,但不適用於Apache
路徑是正確的apn和和密碼(完全相同的代碼)。
我運行該頁面,但在被apache調用時失敗。
我得到這些錯誤/警告:
Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in ..pushnotifications.php on line 31
Warning: stream_socket_client(): Failed to enable crypto in ..pushnotifications.php on line 31
Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in ..pushnotifications.php on line 31
Failed to connect: 0
代碼:
public function iOS($data, $devicetoken, $sandbox) {
$deviceToken = $devicetoken;
$ctx = stream_context_create();
if($sandbox) {
stream_context_set_option($ctx, 'ssl', 'local_cert', __DIR__.'/apn/apns-dev-cert.pem');
} else {
stream_context_set_option($ctx, 'ssl', 'local_cert', __DIR__.'/apn/apns-prod-cert.pem');
}
stream_context_set_option($ctx, 'ssl', 'passphrase', self::$passphrase);
// Open a connection to the APNS server
// 'gateway.push.apple.com:2195'; //Production
// 'gateway.sandbox.push.apple.com:2195'; // Sandbox
if($sandbox) {
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
} else {
$fp = stream_socket_client(
'ssl://gateway.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['title'],
'body' => $data['body'],
),
'sound' => $data['sound'],
'badge' => $data['badge']
);
// 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;
}
您能否在第31行顯示代碼,因爲它提到了第31行 –
您可以確認.pem文件的路徑, –
$ sandbox = true; \t msg_payload $ =陣列( \t \t '標題'=> '測試', \t \t '身體'=> '您已收到新訂單', \t \t '聲音'=> '默認', \t \t'badge'=> 3 \t); \t \t \t $ deviceToken = '994A7663BCA0D0EC75BC6923D27741CC1D2C1E089995EF0BF632185CAAFDCA35'; \t echo PushNotifications :: iOS($ msg_payload,$ deviceToken,$ sandbox); –