Перейти к содержанию

API PassKit для Apple Wallet

API PassKit Designer позволяет программно создавать, обновлять, загружать и управлять картами Apple Wallet. Он поддерживает те же операции, что и конструктор карт в Control Panel. Используйте его для выпуска карт лояльности, купонов, билетов на мероприятия, посадочных талонов и карт магазинов, а также для отправки обновлений в реальном времени на карты, уже установленные на устройствах ваших пользователей.

Базовый URL

Anchor link to
https://apple-passkit.svc-nue.pushwoosh.com

Все эндпоинты обслуживаются по HTTPS. Запросы и ответы используют application/json, если не указано иное.

Аутентификация

Anchor link to

Каждый запрос должен включать заголовок Authorization с вашим токеном доступа к API Pushwoosh:

Authorization: Token <api-token>

Аккаунт, которому принадлежит токен, должен владеть приложением, на которое ссылается applicationCode. Запрос для приложения, принадлежащего другому аккаунту, вернет 403 Forbidden.

Соглашения

Anchor link to
  • Именование полей: Поля JSON используют lowerCamelCase (например, passTypeIdentifier, serialNumber, backgroundColor).
  • Незаполненные поля: ответы включают все поля, даже если они пустые или имеют нулевое значение.
  • Бинарные данные: поля типа bytes, такие как pkpassData и data изображений, являются строками в формате Base64 в JSON.
  • Серийные номера: serialNumber всегда присваивается сервером при создании карты. Любое значение, которое вы отправляете при создании, игнорируется; он идентифицирует карту для всех последующих операций.

Ответы об ошибках

Anchor link to

API сопоставляет внутренние коды состояния с кодами состояния HTTP:

Код состояния HTTPЗначение
400 Bad RequestНеверный аргумент — обязательное поле отсутствует или имеет неверный формат.
401 UnauthorizedОтсутствует или недействителен заголовок Authorization.
403 ForbiddenПриложение не принадлежит аккаунту вызывающей стороны.
404 Not FoundКарта, шаблон или приложение не найдены.
503 Service UnavailableСервис перегружен или временно недоступен.

Эндпоинты

Anchor link to
МетодПутьОписание
POST/api/pass/validateПроверить конфигурацию карты
POST/api/pass/createСоздать новый .pkpass
POST/api/pass/update/{serialNumber}Обновить существующую карту и уведомить устройства
GET/api/passesПолучить список всех карт для приложения
GET/api/pass/{applicationCode}/{serialNumber}Получить одну карту
GET/api/pass/{applicationCode}/{serialNumber}/downloadЗагрузить .pkpass существующей карты
DELETE/api/pass/{applicationCode}/{serialNumber}Удалить карту
GET/api/pass/{serialNumber}/registrationsПолучить список устройств, зарегистрированных для карты
GET/api/configПолучить конфигурацию PassKit для приложения
GET/api/templatesПолучить список доступных шаблонов карт
GET/api/templates/{filename}Получить один шаблон

Создать карту

Anchor link to

Генерирует, подписывает и сохраняет новую карту, а затем возвращает присвоенный сервером серийный номер.

POST /api/pass/create

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
passobjectДаОбъект карты, описывающий карту.
imagesarray of objectsНетИзображения карты (icon, logo и т.д.). icon и logo обязательны для действительной карты.
userIdstringДаUser ID в Pushwoosh, которому выдана карта.
applicationCodestringДаКод приложения Pushwoosh.
Пример запроса
Anchor link to
{
"applicationCode": "XXXXX-XXXXX",
"userId": "user-123",
"pass": {
"description": "Acme loyalty card",
"logoText": "Acme",
"backgroundColor": "rgb(60, 65, 76)",
"foregroundColor": "rgb(255, 255, 255)",
"labelColor": "rgb(255, 255, 255)",
"storeCard": {
"primaryFields": [
{ "key": "balance", "label": "BALANCE", "value": "1200 pts" }
],
"secondaryFields": [
{ "key": "member", "label": "MEMBER", "value": "Jane Doe" }
]
},
"barcodes": [
{
"format": "PKBarcodeFormatQR",
"message": "1234567890",
"messageEncoding": "iso-8859-1"
}
]
},
"images": [
{ "imageType": "icon", "data": "<base64>", "contentType": "image/png" },
{ "imageType": "logo", "data": "<base64>", "contentType": "image/png" }
]
}

Ответ

Anchor link to
ПолеТипОписание
serialNumberstringПрисвоенный сервером уникальный идентификатор созданной карты. Используйте его для получения карты (Получить карту) или загрузки .pkpass (Загрузить карту).
messagestringСообщение о результате.
Пример ответа
Anchor link to
{
"serialNumber": "a1b2c3d4-1234-5678-9abc-def012345678",
"message": "Карта успешно создана"
}

Проверить карту

Anchor link to

Проверяет конфигурацию карты на соответствие спецификациям Apple без создания файла. Полезно вызывать перед созданием.

POST /api/pass/validate

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
passobjectДаОбъект карты для проверки.

Ответ

Anchor link to
ПолеТипОписание
validbooleanПроходит ли карта проверку.
errorsarray of stringsБлокирующие проблемы, которые необходимо исправить.
warningsarray of stringsНеблокирующие рекомендации.

Обновить карту

Anchor link to

Повторно генерирует карту с новым содержимым, переподписывает ее, увеличивает ее тег обновления и отправляет тихое push-уведомление на каждое устройство, зарегистрировавшее карту. Затем iOS извлекает и устанавливает обновленную версию в фоновом режиме.

POST /api/pass/update/{serialNumber}

Параметры пути

Anchor link to
ПараметрТипОписание
serialNumberstringСерийный номер, возвращенный при создании карты.

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
updatesobjectДаПолный объект карты с новым содержимым.
applicationCodestringДаКод приложения Pushwoosh.

serialNumber (из пути) и токен аутентификации карты сохраняются сервером независимо от того, что вы отправляете.

Ответ

Anchor link to
ПолеТипОписание
successbooleanУспешно ли прошло обновление.
updateTagintegerНовый тег обновления (временная метка Unix).
messagestringСообщение о результате.

Получить список карт

Anchor link to

Возвращает постраничный, отсортированный список карт, хранящихся для приложения.

GET /api/passes?applicationCode=XXXXX-XXXXX&page=0&perPage=20

Параметры запроса

Anchor link to
ПараметрТипОбязательныйОписание
applicationCodestringДаКод приложения Pushwoosh.
orderBystringНетПоле сортировки: UPDATED (по умолчанию) или CREATED.
orderDirectionstringНетНаправление сортировки: DESC (по умолчанию, сначала новые) или ASC.
pageintegerНетИндекс страницы, начиная с нуля. По умолчанию 0.
perPageintegerНетРазмер страницы. 0 или пропущенное значение использует значение по умолчанию сервера.

Ответ

Anchor link to
ПолеТипОписание
passesarray of objectsТекущая страница записей карт.
pageintegerВозвращенный индекс страницы.
perPageintegerРазмер страницы, использованный для этого ответа.
totalintegerОбщее количество карт для приложения на всех страницах.
Пример ответа
Anchor link to
{
"passes": [ /* pass records */ ],
"page": 0,
"perPage": 20,
"total": 137
}

Получить карту

Anchor link to

Возвращает одну сохраненную карту, включая ее полный объект карты.

GET /api/pass/{applicationCode}/{serialNumber}

Параметры пути

Anchor link to
ПараметрТипОписание
applicationCodestringКод приложения Pushwoosh.
serialNumberstringСерийный номер карты.

Ответ

Anchor link to

Возвращает { "pass": { ... } }, одну запись карты.

Загрузить карту

Anchor link to

Возвращает сохраненный файл .pkpass существующей карты.

GET /api/pass/{applicationCode}/{serialNumber}/download

Ответ

Anchor link to
ПолеТипОписание
pkpassDatastring (Base64)Файл .pkpass.
filenamestringПредлагаемое имя файла.

Удалить карту

Anchor link to

Удаляет запись карты и ее сохраненный файл .pkpass.

DELETE /api/pass/{applicationCode}/{serialNumber}

Ответ

Anchor link to
ПолеТипОписание
successbooleanБыла ли карта удалена.
messagestringСообщение о результате.

Получить регистрации карты

Anchor link to

Возвращает список устройств, которые добавили карту и зарегистрированы для получения обновлений.

GET /api/pass/{serialNumber}/registrations?applicationCode=XXXXX-XXXXX

Ответ

Anchor link to

Возвращает { "registrations": [ ... ] }, где каждый элемент имеет:

ПолеТипОписание
deviceLibraryIdentifierstringИдентификатор библиотеки устройств Apple.
pushTokenstringPush-токен карты для устройства.

Получить конфигурацию

Anchor link to

Возвращает конфигурацию PassKit, определенную для приложения из его сертификата.

GET /api/config?applicationCode=XXXXX-XXXXX

Ответ

Anchor link to
ПолеТипОписание
teamIdentifierstringApple Team ID из сертификата.
passTypeIdentifierstringPass Type ID из сертификата.
organizationNamestringНазвание организации из сертификата.
hasCertificatebooleanНастроен ли сертификат.
webServiceUrlstringБазовый URL веб-сервиса карт. Клиенты создают ссылку для установки, добавляя /v1/passes/{passType}/{serial}?token={authToken}.

Шаблоны

Anchor link to

Получите список доступных шаблонов карт или загрузите один из них как объект карты, который можно использовать в качестве отправной точки.

GET /api/templates — возвращает { "templates": [ { "filename", "name", "description", "style" } ] }.

GET /api/templates/{filename} — возвращает { "template": { ...объект карты... } }.

Поделиться картой с помощью QR-кода

Anchor link to

Чтобы пользователи могли добавить карту, отсканировав QR-код (или нажав на ссылку), закодируйте URL для установки карты в QR-код. URL-адрес создается из значений, которые вы уже получаете от API:

{webServiceUrl}/v1/passes/{passTypeIdentifier}/{serialNumber}?token={authenticationToken}
Часть URLГде получить
webServiceUrlGET /api/configwebServiceUrl
passTypeIdentifierзапись картыpass.passTypeIdentifier (из списка/получения)
serialNumberзапись картыserialNumber
authenticationTokenзапись картыpass.authenticationToken

Пример:

https://apple-passkit.svc-nue.pushwoosh.com/v1/passes/pass.com.acme.loyalty/a1b2c3d4-1234-5678-9abc-def012345678?token=AbC123XyZ

Преобразуйте этот URL в QR-код с помощью любой библиотеки для QR-кодов. Когда пользователь сканирует его, его устройство открывает ссылку, загружает последнюю версию .pkpass, и Wallet предлагает добавить его, что также регистрирует устройство для получения обновлений.

Справочник объектов

Anchor link to

Объект карты

Anchor link to
ПолеТипОписание
formatVersionintegerВерсия формата карты. По умолчанию 1.
passTypeIdentifierstringApple Pass Type ID (pass.com.yourcompany.passtype). По умолчанию берется из сертификата.
serialNumberstringПрисваивается сервером при создании; идентифицирует карту.
teamIdentifierstringApple Team ID. По умолчанию берется из сертификата.
organizationNamestringОрганизация, отображаемая на карте. По умолчанию берется из сертификата.
descriptionstringЧеловекочитаемое описание (требуется Apple).
boardingPass / coupon / eventTicket / storeCard / genericobjectСтиль карты. Должен быть установлен ровно один. См. группы полей.
backgroundColorstringЦвет фона, rgb(r, g, b).
foregroundColorstringЦвет переднего плана (текста), rgb(r, g, b).
labelColorstringЦвет метки поля, rgb(r, g, b).
logoTextstringТекст, отображаемый рядом с логотипом.
suppressStripShinebooleanОтключить эффект блеска на изображении-полосе.
barcodesarrayШтрих-коды, отображаемые на карте.
locationsarrayМестоположения, которые делают карту релевантной.
beaconsarrayМаячки, которые делают карту релевантной.
relevantDatestringДата в формате ISO 8601, когда карта становится релевантной.
maxDistanceintegerМаксимальное расстояние (в метрах) для релевантности по местоположению.
expirationDatestringДата истечения срока действия в формате ISO 8601.
voidedbooleanПомечает карту как недействительную.
groupingIdentifierstringГруппирует связанные карты (билеты на мероприятия/посадочные талоны).
userInfoobject (map)Произвольные данные приложения в формате ключ/значение.

Объект группы полей

Anchor link to

Каждый стиль карты (boardingPass, coupon, eventTicket, storeCard, generic) группирует поля по областям:

ПолеТипОписание
headerFieldsarrayОтображается в заголовке карты (видно, когда карты сложены в стопку в Wallet).
primaryFieldsarrayНаиболее заметные поля.
secondaryFieldsarrayПод основными полями.
auxiliaryFieldsarrayДополнительные поля под второстепенными.
backFieldsarrayОтображается на обратной стороне карты.

boardingPass дополнительно имеет transitType (PKTransitTypeAir, PKTransitTypeTrain, PKTransitTypeBus, PKTransitTypeBoat или PKTransitTypeGeneric).

Объект поля

Anchor link to
ПолеТипОписание
keystringУникальный ключ поля в пределах карты.
labelstringМетка поля.
valuestringЗначение поля (текст или число в виде строки).
changeMessagestringСообщение, отображаемое при изменении значения (используйте %@ в качестве заполнителя).
textAlignmentstringЗначение PKTextAlignment.
dateStyle / timeStylestringPKDateStyle для форматирования даты/времени.
isRelativebooleanПоказывать дату относительно текущего момента.
numberStylestringPKNumberStyle для форматирования чисел.
currencyCodestringКод валюты по ISO 4217.
dataDetectorTypesarray of stringsДетекторы данных для применения к значению.

Объект штрих-кода

Anchor link to
ПолеТипОписание
formatstringPKBarcodeFormatQR, PKBarcodeFormatPDF417, PKBarcodeFormatAztec или PKBarcodeFormatCode128.
messagestringДанные, закодированные в штрих-коде.
messageEncodingstringКодировка текста, обычно iso-8859-1.
altTextstringТекст, отображаемый под штрих-кодом.

Объект местоположения

Anchor link to
ПолеТипОписание
latitudenumberШирота.
longitudenumberДолгота.
altitudenumberВысота в метрах.
relevantTextstringТекст, отображаемый на экране блокировки рядом с этим местоположением.

Объект маячка

Anchor link to
ПолеТипОписание
proximityUuidstringUUID приближения iBeacon.
majorintegerОсновное значение (Major).
minorintegerДополнительное значение (Minor).
relevantTextstringТекст, отображаемый на экране блокировки рядом с этим маячком.

Объект изображения карты

Anchor link to
ПолеТипОписание
imageTypestringОдно из: icon, logo, strip, background, footer, thumbnail. icon и logo обязательны.
datastring (Base64)Байты изображения.
contentTypestringMIME-тип, например image/png.

Объект записи карты

Anchor link to

Возвращается эндпоинтами получения списка/одной записи.

ПолеТипОписание
serialNumberstringСерийный номер карты.
passTypeIdentifierstringPass Type ID.
organizationNamestringНазвание организации.
descriptionstringОписание карты.
createdAtstringВременная метка создания (RFC 3339).
updatedAtstringВременная метка последнего обновления (RFC 3339).
updateTagintegerТекущий тег обновления.
passobjectПолный объект карты для редактирования.
userIdstringUser ID в Pushwoosh, которому была выдана карта.