Я пытаюсь направить уведомление APNS, чтобы обновить свой пропуск в приложении Apple Wallet. Согласно этому документу нам нужно только отправить идентификатор типа пропуска и токен push в APN. Тогда они позаботятся обо всем остальном.
$apnsHost = 'gateway.push.apple.com'; $apnsPort = 2195; $apnsCert = base_path('app/config/passbook/certificates.pem'); $payload = ['aps' => []]; $payload = json_encode($payload); $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); stream_context_set_option($streamContext, 'ssl', 'passphrase', 'xxxxxx'); $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext); if(!$apns) { Logger::logError(1, "Passbook push notification error", ['serial_number' => $serialNumber, 'pass_type_id' => $passIdentify]); return "Failed to connect (stream_socket_client): $error $errorString"; } else { foreach($push_tokens as $idx => $push_token) { $msg = chr(0) . pack('n', 32) . pack('H*', $push_token) . pack('n', strlen($payload)) . $payload; fwrite($apns, $msg); } } @socket_close($apns); fclose($apns);
Ошибка не возвращается, но, похоже, она не работает. Что я делаю неправильно? Пожалуйста помоги.
Это код, работающий над моим проектом
$errors = []; $apnsHost = 'gateway.push.apple.com'; $apnsPort = 2195; $apnsCert = base_path('app/config/passbook/certificates.pem'); $payload = ['aps' => []]; $payload = json_encode($payload); $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); stream_context_set_option($streamContext, 'ssl', 'passphrase', 'xxxxxxxxx'); $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext); stream_set_blocking ($apns, 0); if( ! $apns) { return "Failed to connect (stream_socket_client): $error $errorString"; } else { foreach($push_tokens as $idx => $push_token) { $msg = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $push_token)) . chr(0) . chr(mb_strlen($payload)) . $payload; $success = fwrite($apns, $msg); if ($success === strlen($msg)) { // log success Logger::logPassbook('Push success', ['push_token' => $push_token]); } else { Logger::logPassbook('Push failed', ['push_token' => $push_token]); } } } @socket_close($apns); fclose($apns); return $errors;