проблема в интеграции Apple Passwallete с php

Я сгенерировал PASS с моим кодом, а также получил идентификатор устройства, pushtoken в ответ от устройства.

вот код, с помощью которого я храню все устройства и информацию о передаче в базе данных.

   $params = array(
                    "get"=>$_GET,
                    "request"=>$_REQUEST,
                    "post"=>$_POST,
                    "server"=>$_SERVER
                );
$url = $_SERVER['SCRIPT_URI'];
$myfile = file_put_contents('callback.txt', json_encode($params).PHP_EOL , FILE_APPEND | LOCK_EX);
$content = trim(file_get_contents("php://input"));
$myfile = file_put_contents('log.txt', $content.PHP_EOL , FILE_APPEND | LOCK_EX);
$header = json_encode(getallheaders());
$myfile = file_put_contents('header.txt', $header.PHP_EOL , FILE_APPEND | LOCK_EX);



/*
 * store registered device data
 * */

$str = $_SERVER['SCRIPT_URI'];
$str = stripslashes($str);


$url_slot = parse_url($str);
$urlArray = explode('/',$url_slot['path']);
$passid = $urlArray['11']; // serial no
$deviceId = $urlArray['8'];
$passtype = $urlArray['10'];
try {
    $dbh = new PDO('mysql:host=localhost;dbname=''', 'yyyy', 'zzzz');


    $stmt = $dbh->prepare("INSERT INTO devices_passes (device_id, pass_id, pass_type, created, modified) VALUES
(:device_id,:pass_id,:pass_type,:created,:modified)");
    $stmt->bindParam(':device_id', $device_id);
    $stmt->bindParam(':pass_id', $pass_id);
    $stmt->bindParam(':pass_type', $pass_type);
    $stmt->bindParam(':created', date('d-m-y'));
    $stmt->bindParam(':modified', date('d-m-y'));

    $device_id = $deviceId;
    $pass_id = $passid;
    $pass_type = $passtype;

    $stmt->execute();
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}



try {
    $dbh = new PDO('mysql:host=localhost;dbname=yyyy', 'uuuuu', 'yyyyyy');
    $stmt = $dbh->prepare("INSERT INTO devices (push_token) VALUES
(:push_token)");
    $stmt->bindParam(':push_token', $push_token);
    $push_token = $content['pushToken'];
    $stmt->execute();
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Но когда я отправляю push-уведомление на устройство, оно ничего не отражает на устройстве. вот код отправки push-уведомления на устройство.

<?php
$apnsHost = 'gateway.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'apple_push_notification_production.pem';
$push_token = 'my token';
$passIdentify = 'pass.yyyyy.xxxx';

$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', 'local_cert', $apnsCert);

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

fwrite($apns, $msg);

@socket_close($apns);
fclose($apns);

?>

Не могли бы вы помочь мне, когда я ошибаюсь ??


person Kruti Aparnathi    schedule 27.04.2017    source источник
comment
Проверьте мой ответ здесь для контрольного списка. Вы должны убедиться, что у вас установлено сообщение об изменении и что содержимое нового прохода отличается от содержимого старого прохода.   -  person PassKit    schedule 27.04.2017
comment
где я могу добавить параметр changeMessage? отправка уведомления ??   -  person Kruti Aparnathi    schedule 27.04.2017
comment
Я понял вашу точку зрения, но если я сгенерирую обновленный файл .pkpass, как устройство узнает об этом обновлении?   -  person Kruti Aparnathi    schedule 27.04.2017
comment
Вы добавляете его в новый проход' pass.json   -  person PassKit    schedule 27.04.2017
comment
да, но как устройство получает автоматическое обновление. прямо сейчас в первый раз, когда я отправляю ссылку на устройство по почте, и при переходе по ссылке будет сгенерирован проход с запросом добавить в кошелек или нет. так как я могу отправить обновленный пропуск?   -  person Kruti Aparnathi    schedule 27.04.2017
comment
Это все в документации — вам нужно реализовать другие части веб-сервиса, чтобы устройство могло получить последнюю версию с вашего сервера. Первым шагом будет обновление пропуска, когда вы потянете заднюю часть пропуска.   -  person PassKit    schedule 28.04.2017
comment
Давайте продолжим это обсуждение в чате.   -  person Kruti Aparnathi    schedule 28.04.2017
comment
устройство не отправляет мне этот запрос GET-запрос к webServiceURL/version/devices/deviceLibraryIdentifier/registrations/passTypeIdentifier?passesUpdatedSince=tag   -  person Kruti Aparnathi    schedule 28.04.2017
comment
Сначала он отправит запрос на получение серийных номеров.   -  person PassKit    schedule 28.04.2017
comment
да, я отправил серийные номера $curl_post_data = {lastUpdate: $lastupdate, serialNumbers: ['738489']}; по этому URL-адресу $service_url = 'webclueslab.com/qa/skywire/passAPI-ios/examples/callback.php/v1/';   -  person Kruti Aparnathi    schedule 28.04.2017
comment
Я не понимаю, где я не прав...   -  person Kruti Aparnathi    schedule 28.04.2017
comment
Реализовали ли вы все конечные точки для веб-службы, включая конечную точку ведения журнала. Также попробуйте просмотреть журналы iPhone в консоли во время отправки push.   -  person PassKit    schedule 28.04.2017
comment
Что такое конечная точка ведения журнала? Вы имеете в виду проверку токена аутентификации?   -  person Kruti Aparnathi    schedule 28.04.2017
comment
Конечная точка ведения журнала является частью веб-службы PassKit, которую вам необходимо предоставить самостоятельно, см. Справочник по веб-службе PassKit для получения дополнительной информации.   -  person mbaechtold    schedule 28.04.2017
comment
Я имел в виду этот документ developer.apple.com/library /content/documentation/ сначала генерирует PAS, а затем устройство отвечает мне регистрацией. Я сохранил идентификатор устройства и токен push в своей базе данных, а затем я пытался отправить код уведомления, используя приведенный выше код, поэтому теперь устройство должно вызывать веб-службу https:////devices/ /registrations/?passesUpdatedSince=, чтобы я мог предоставить обновленный пропуск идентификатор. но мой веб-сервис не получает passUpdatedSince. что тут не так помогите пожалуйста   -  person Kruti Aparnathi    schedule 28.04.2017
comment
Вы не увидите этот параметр в первом запросе. Только при последующих запросах после того, как вы доставили проход, включая последний обновленный заголовок.   -  person PassKit    schedule 29.04.2017
comment
разработчик. apple.com/library/content/documentation/PassKit/ вы должны использовать этот документ.   -  person PassKit    schedule 29.04.2017
comment
у вас есть окончательный код? это работает сейчас?   -  person Michael    schedule 24.08.2017