Php APNS服务器响应状态为8-invalid-token,但设备正在正确注册

Php APNS服务器响应状态为8-invalid-token,但设备正在正确注册,php,apple-push-notifications,passbook,coupon,wallet,Php,Apple Push Notifications,Passbook,Coupon,Wallet,我正在为我的iOS应用程序实现存折功能。我使用php作为服务器端语言来生成pass并分发到设备。pass正在设备上成功安装,我还能够使用pull to referesh手动更新pass。 当我尝试从服务器端自动更新pass时,我得到响应状态8-invalid-token,并显示消息“Identifier是导致问题的数据库中的rowID(index)。Apple将断开您的连接…”。 我不明白为什么会这样。设备正在正确注册,其他端点也正常工作。如果pass最初不正确,则不应将其安装在设备上。我使用与

我正在为我的iOS应用程序实现存折功能。我使用php作为服务器端语言来生成pass并分发到设备。pass正在设备上成功安装,我还能够使用pull to referesh手动更新pass。 当我尝试从服务器端自动更新pass时,我得到响应状态8-invalid-token,并显示消息“Identifier是导致问题的数据库中的rowID(index)。Apple将断开您的连接…”。 我不明白为什么会这样。设备正在正确注册,其他端点也正常工作。如果pass最初不正确,则不应将其安装在设备上。我使用与发送推送通知相同的通行证类型id证书签署了通行证。我还使用下面列出的命令检查了我的证书

我在沙盒和生产环境中对其进行了treid,并且没有显示任何错误。 我使用生产url发送推送通知以更新通行证;这是我发送推送的代码

        $apnsHost = 'gateway.push.apple.com';  
        $apnsPort = 2195;  
        $apnsCert = base_path().'/path/to/ptypeidcert.pem';//converted using ssl from passtypeid.p12 certificated  
        $push_token = $token;  
        $passIdentify = 'pass.myidentifier.coupon';  
        $payload = '{}';  
        $msg = chr(0) . pack('n', 32) . pack('H*', $push_token) . pack('n', strlen($payload)) . $payload . pack('n', strlen($passIdentify)) . $passIdentify;  

        $streamContext = stream_context_create();  

        stream_context_set_option($streamContext, 'ssl', 'cafile', base_path().'/path/to/entrust_2048_ca.cer');  
        stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);  
        stream_context_set_option($streamContext, 'ssl', 'passphrase', 'export_password');  

        $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);  

        fwrite($apns, $msg);  
        PushNotifications::checkAppleErrorResponse($apns);// Just created a class to read response from apn server  
        @socket_close($apns);  
        fclose($apns);  
对进一步调试的任何帮助都将非常感谢。要调试我的证书吗? 注意:我的API端点在http协议上提供只是为了测试目的,将更新为https协议。我已在设备上启用HTTP服务以安装pass-on passbook

=============更新============= 以下是生成我的证书的步骤

  • 首先,我使用CSR请求和我的密钥下载了我的通行证类型Id证书(.cer)
  • 然后在Mac上使用密钥链访问将证书导出到创建时签署优惠券所需的
    .p12
    扩展。该优惠券正在设备上成功安装
  • 然后我将上面代码中用于连接推送服务器的
    .p12
    转换为
    .pem
    。使用命令

    openssl pkcs12-in path.p12-out newfile.pem


  • 如果我的证书生成有任何问题,请指出。

    Wallet仅使用生产APNS端点。沙盒将给您一个“8”错误。是否确实从生产终结点收到“8”个错误?如果是这样,请检查您是否正确编写和发送了有效负载。@PassKit,您可以看到我使用的是
    $apnsHost='gateway.push.apple.com'要推送通知的生产端点。我的PassTypeId证书与我用来签署通行证的证书相同,只是在命令行中使用openssl将其转换为.pem。请尝试此
    $payload=json_encode(['aps'=>[])$msg=chr(0)。chr(0)。chr(32)。包装('H*',str_替换('',$push_标记))。chr(0)。chr(mb_strlen($payload))$有效载荷@PassKit我尝试了您的建议,但无法使其工作。设备上似乎没有显示任何内容。但无效优惠券错误已消失。Wallet仅使用生产APNS终结点。沙盒将给您一个“8”错误。是否确实从生产终结点收到“8”个错误?如果是这样,请检查您是否正确编写和发送了有效负载。@PassKit,您可以看到我使用的是
    $apnsHost='gateway.push.apple.com'要推送通知的生产端点。我的PassTypeId证书与我用来签署通行证的证书相同,只是在命令行中使用openssl将其转换为.pem。请尝试此
    $payload=json_encode(['aps'=>[])$msg=chr(0)。chr(0)。chr(32)。包装('H*',str_替换('',$push_标记))。chr(0)。chr(mb_strlen($payload))$有效载荷@PassKit我尝试了您的建议,但无法使其工作。设备上似乎没有显示任何内容。但无效优惠券错误已经消失。
    
            $apnsHost = 'gateway.push.apple.com';  
            $apnsPort = 2195;  
            $apnsCert = base_path().'/path/to/ptypeidcert.pem';//converted using ssl from passtypeid.p12 certificated  
            $push_token = $token;  
            $passIdentify = 'pass.myidentifier.coupon';  
            $payload = '{}';  
            $msg = chr(0) . pack('n', 32) . pack('H*', $push_token) . pack('n', strlen($payload)) . $payload . pack('n', strlen($passIdentify)) . $passIdentify;  
    
            $streamContext = stream_context_create();  
    
            stream_context_set_option($streamContext, 'ssl', 'cafile', base_path().'/path/to/entrust_2048_ca.cer');  
            stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);  
            stream_context_set_option($streamContext, 'ssl', 'passphrase', 'export_password');  
    
            $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);  
    
            fwrite($apns, $msg);  
            PushNotifications::checkAppleErrorResponse($apns);// Just created a class to read response from apn server  
            @socket_close($apns);  
            fclose($apns);