不能推送通知到APNS更新我在Apple Wallet中的pass


Can't push notification to APNS to update my pass in Apple Wallet

我正在尝试向APNS推送通知以更新我在Apple Wallet应用中的通行证。根据本文档,我们只需要向APNS发送通行证类型标识符和推送令牌。然后他们会处理好剩下的。

$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;