как получить authenticationToken для ввода pass.json

Теперь я могу добавить передачу по ссылке из моего веб-сервиса. Затем я хочу иметь возможность обновить этот проход. Таким образом, мне нужно добавить webserviceURL и authenticationToken, но как получить этот токен?


person malinchhan    schedule 14.03.2013    source источник


Ответы (1)


Вы делаете это. Единственное требование состоит в том, что он должен быть не менее 16 символов.

Этот токен используется устройством в сочетании с serialNumber и passTypeIdentifier для аутентификации в вашей веб-службе и информирования устройства о том, что устройство авторизовано для получения определенного прохода.

В PHP вы можете сделать что-то вроде:

$authToken = generateAuthToken();

function generateAuthToken($length = 16) {
    return substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}
person PassKit    schedule 14.03.2013
comment
Благодарю вас! и еще одна вещь о webserviceURL, могу ли я использовать это: webServiceURL: 192.168.1.202:8888/passesWebservice ? Я помещаю файл php, pass.pkpass и т. д. в /application/MAMP/htdocs/passesWebservice/ - person malinchhan; 14.03.2013
comment
Возможно... но вы можете столкнуться с проблемами брандмауэра на своем Mac (попробуйте проверить, есть ли у вас доступ к 192.168.1.202:8888 из Safari на устройстве iOS, подключенном к той же сети). Вам также нужно будет настроить тестовое устройство на использование http (в меню «Настройки» -> «Разработчик») и убедиться, что ваш ключ webServiceURL содержит начальный http — например, "webServiceURL" : "http://192.168.1.202:8888/passesWebservice" - person PassKit; 14.03.2013
comment
Кроме того, вам потребуется создать полноценную веб-службу в /application/MAMP/htdocs/passesWebservice/ и, вероятно, потребуется использовать базу данных для хранения идентификаторов устройств, токенов устройств и серийных номеров. Просто сброс файлов .pkpass в это место не сработает. - person PassKit; 14.03.2013
comment
да, я уже протестировал его на устройстве, оно работает, но я еще не зарегистрировал это устройство в своей базе данных! - person malinchhan; 14.03.2013
comment
при регистрации ваше устройство вызовет http://192.168.1.202:8888/passesWebservice/v1/devices/{deviceID}/registrations/{passTypeIdentifier}/{serialNumber}, где элементы в { } будут уникальными для каждого прохода. Ваша служба также должна убедиться, что заголовок запроса содержит ApplePass {authenticationToken}. - person PassKit; 14.03.2013
comment
Это authToken, который я получаю: FcAXwHyKSnVPaxOd, по вашему коду, поэтому я ставлю так: authenticationToken:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ - person malinchhan; 14.03.2013
comment
Вы имеете в виду, что после добавления прохода мне нужно использовать метод POST для отправки 192.168.1.202:8888/ passWebservice/v1/devices{deviceID}/registrations/‌​{passTypeIdentifier}/{serialNumber} . - person malinchhan; 14.03.2013
comment
когда я сгенерирую AuthToken? - person malinchhan; 14.03.2013
comment
давайте продолжим это обсуждение в чате - person PassKit; 14.03.2013
comment
почему появляется ошибка: [24-Apr-2013 10:10:25 Europe/Berlin] Журнал ошибок Passbook: [2013-04-24 15:08:13 +0700] Отмена регистрации задачи (для устройства c3f8344497e8f53f446c16622209eda1, тип прохода pass.cam- mob.passbookpasstest, серийный номер 0001; обнаружен URL-адрес веб-службы 192.168.1.202:8888/passesWebserver) ошибка: Ошибка аутентификации - person malinchhan; 24.04.2013
comment
Потому что вы не внедрили метод отмены регистрации? - person PassKit; 24.04.2013
comment
да, потому что в таблице регистрации нет идентификатора устройства. При регистрации вставляется только устройство, а при регистрации запрос на обновление не работает. Когда я тестирую в SQL MAMP, он работает. Это мой запрос: обновить регистрационный набор deviceID = '$deviceID', passTypeID = '$passTypeID', serialNo = '$serial', где deviceID = ' ' и passTypeID = ' ' и serialNo = ' ' - person malinchhan; 24.04.2013
comment
Это никогда не будет обновляться, потому что критерии `deviceID = ' ' и passTypeID = ' ' и serialNo = ' ' ` никогда не будут соответствовать каким-либо записям. Вы уверены, что не должны использовать для этого insert, а не update? - person PassKit; 24.04.2013
comment
когда я вставляю в таблицу пользователей, я вставляю в таблицу регистрации: mysql_query (INSERT INTO Registration (deviceID, passTypeID, serialNo, userID) VALUES ('','','','$newUserID')); - person malinchhan; 24.04.2013
comment
или я вставляю 'null' вместо ''? - person malinchhan; 24.04.2013
comment
Вы идете об этом неправильно. Подумайте, что произойдет, если вы добавите в БД более одного пользователя до того, как их пропуск зарегистрируется? Первый будет соответствовать обновлению и будет обновлять все пустые записи своими данными, тогда второй не будет соответствовать вообще. Лучшее место для идентификатора пользователя — в таблице пропусков, напротив серийного номера и идентификатора пропуска, который они зарегистрировали. Затем, когда вы получите запрос на регистрацию, просто используйте вставку для вставки, чтобы создать новую запись в таблице устройств. Вы также можете сохранить запись пользователя там, если хотите, но не раньше, чем устройство зарегистрируется. - person PassKit; 24.04.2013