Сервер APNS отвечает статусом 8-invalid-token, но устройства регистрируются правильно

Я реализую функциональность Passbook для моего приложения для iOS. Я использую php в качестве языка на стороне сервера для генерации передачи и распространения на устройства. Проходы успешно устанавливаются на устройстве, и я также могу обновить проход вручную, используя pull для повторного обновления. Когда я пытаюсь автоматически обновить пароль со стороны сервера, я получаю ответ 8-invalid-token с сообщением "Идентификатор - это идентификатор строки (index) в базе данных, которая вызвала проблему. Apple отключит вас.....". Я не понимаю, почему это происходит. Устройства регистрируются правильно, и другие конечные точки также работают нормально. Если проход был неправильным, он не должен быть установлен на устройстве. Я подписал пароль, используя тот же сертификат типа удостоверения личности, который я использую для отправки push-уведомлений. Я также проверил свои сертификаты с помощью этой команды, перечисленной здесь.

    $ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert YourSSLCertAndPrivateKey.pem -debug -showcerts -CAfile server-ca-cert.pem  

Я проверяю это как для песочницы, так и для производства, и это не показывает никакой ошибки. Я использую производственный URL для отправки push-уведомления, чтобы обновить проход; Вот мой код для отправки push;

        $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-сервисы на устройстве, чтобы установить пароль на паспорт.

============ ОБНОВЛЕНИЕ ============= Вот шаги для создания моих сертификатов.

  1. Сначала я загрузил свой сертификат Pass Type Id (.cer), используя CSR-запрос с моим ключом.
  2. Затем экспортировал этот сертификат с использованием доступа к брелку на Mac, чтобы .p12 продление требуется для подписания купона на время создания. Этот купон успешно устанавливается на устройстве.
  3. Затем я преобразовал это .p12 в .pem используется в коде выше для подключения push-сервера. Используя команду;

    openssl pkcs12 -в пути.p12 -на новом файле.pem

Если что-то не так с моим сертификатом, пожалуйста, укажите.

0 ответов

Другие вопросы по тегам