У меня есть сценарий PHP, который отправляет push-уведомления на сервер Apple APNS. Предполагается, что будет отображен код ответа 485
, который показывает, что сообщение было успешно отправлено. Однако, когда я запускаю код, он каждый раз показывает другой числовой код, и сообщение не отправляется.
Вот код:
$payload = array(
'aps' => array(
'alert' => $message,
'T_ID' => $data["trip_id"],
'S' => $state,
'Api' => 2,
'sound' => 'default'
));
$body = array();
$body['aps'] = array('alert' => "request trip");
$body['aps']['notifurl'] = $payload;
$body['aps']['badge'] = 2;
$payload = json_encode($body);
$ret = array(
"error" => 0
);
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', dirname(BASEPATH) . "/uploads/" . $this->_apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', $this->_passphrase);
@$apns = stream_socket_client('tls://' . $this->_apnsHost . ':' . $this->_apnsPort, $error, $errorString, 200, STREAM_CLIENT_CONNECT, $streamContext);
if (!$apns) {
//die('Error creating ssl socket ' . $error . ' ' . $errorString);
$ret["error"] = 1;
$ret["details"] = 'Error creating ssl socket ' . $error . ' ' . $errorString;
}
$apnsMessage = // Command "1"
chr(1)
// Identifier "88"
. pack('N', 88)
// Expiry "tomorrow"
. pack('N', time() + 86400)
// Token length
. chr(0) . chr(32)
// Device token
. pack('H*', str_replace(' ', '', $deviceToken))
// Payload length
. chr(0) . chr(strlen($payload))
// Actual payload
. $payload . $payload;
echo fwrite($apns, $apnsMessage);
fclose($apns);
Почему это не работает должным образом?