无法将通知推送至APNS以更新Apple Wallet中的通行证

我正在尝试将通知推送到APNS以更新我在Apple Wallet应用程序中的通行证。 根据这个文档 ,我们只需要将通行证types标识符和推送令牌发送到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;