Rack::Passbook

Passbook manages boarding passes, movie tickets, retail coupons, & loyalty cards. Using the PassKit API, developers can register web services to automatically update content on the pass, such as gate changes on a boarding pass or adding credit to a loyalty card.

Apple provides a specification for a REST-style web service protocol to communicate with Passbook, with endpoints to get the latest version of a pass, register / unregister devices to receive push notifications for a pass, and query for passes registered for a device.

Rack::Passbook provides those specified endpoints.

Requirements

  • Ruby 1.9 or higher
  • PostgreSQL 9.1 or higher

Installation

Gemfile

gem 'rack-passbook', require: 'rack/passbook'

Example Usage

Rack::Passbook can be run as Rack middleware or as a single web application. All that's required is a connection to a Postgres database.

An example application can be found in the /example directory of this repository.

config.ru

require 'bundler'
Bundler.require

run Rack::Passbook

Specification

What follows is a summary of the specification. The complete specification can be found in the Passbook Web Service Reference.

Getting the Latest Version of a Pass

GET https://example.com/v1/passes/:passTypeIdentifier/:serialNumber
  • passTypeIdentifier The pass’s type, as specified in the pass.
  • serialNumber The unique pass identifier, as specified in the pass.

Response

  • If request is authorized, return HTTP status 200 with a payload of the pass data.
  • If the request is not authorized, return HTTP status 401.
  • Otherwise, return the appropriate standard HTTP status.

Getting the Serial Numbers for Passes Associated with a Device

GET https://example.com/v1/devices/:deviceLibraryIdentifier/registrations/:passTypeIdentifier[?passesUpdatedSince=tag]
  • deviceLibraryIdentifier A unique identifier that is used to identify and authenticate the device.
  • passTypeIdentifier The pass’s type, as specified in the pass.
  • serialNumber The unique pass identifier, as specified in the pass.
  • passesUpdatedSince Optional A tag from a previous request.

Response

If the passesUpdatedSince parameter is present, return only the passes that have been updated since the time indicated by tag. Otherwise, return all passes.

  • If there are matching passes, return HTTP status 200 with a JSON dictionary with the following keys and values:
    • lastUpdated (string) The current modification tag.
    • serialNumbers (array of strings) The serial numbers of the matching passes.
  • If there are no matching passes, return HTTP status 204.
  • Otherwise, return the appropriate standard HTTP status.

Registering a Device to Receive Push Notifications for a Pass

POST https://example.com/v1/devices/:deviceLibraryIdentifier/registrations/:passTypeIdentifier/:serialNumber
  • deviceLibraryIdentifier A unique identifier that is used to identify and authenticate the device.
  • passTypeIdentifier The pass’s type, as specified in the pass.
  • serialNumber The unique pass identifier, as specified in the pass.

The POST payload is a JSON dictionary, containing a single key and value:

  • pushToken The push token that the server can use to send push notifications to this device.

Response

  • If the serial number is already registered for this device, return HTTP status 200.
  • If registration succeeds, return HTTP status 201.
  • If the request is not authorized, return HTTP status 401.
  • Otherwise, return the appropriate standard HTTP status.

Unregistering a Device

DELETE https://example.com/v1/devices/:deviceLibraryIdentifier/registrations/:passTypeIdentifier/:serialNumber
  • deviceLibraryIdentifier A unique identifier that is used to identify and authenticate the device.
  • passTypeIdentifier The pass’s type, as specified in the pass.
  • serialNumber The unique pass identifier, as specified in the pass.

Response

  • If disassociation succeeds, return HTTP status 200.
  • If the request is not authorized, return HTTP status 401.
  • Otherwise, return the appropriate standard HTTP status.

Contact

Mattt

License

Rack::Passbook is available under the MIT license. See the LICENSE file for more info.