Node.jsでPassbookを発行してみる

node-passbookを使うと簡単に、NodeでPassbookを発行できました。

 

まずは、npmを使ってインストール 

$ npm install passbook


インストールが終わったら、以下のようにPassbookファイルを作成する処理を書きます。

var fs = require('fs')
  , createTemplate = require('passbook')
 
var template = createTemplate('coupon', {
  'teamIdentifier': '12345ABCDE',
  'passTypeIdentifier': 'pass.seeei.sample',
  'organizationName': 'Seeei Inc.'
});
 
template.keys('./etc/passbook/keys', '12345678'); 
 
var passbook = template.createPassbook({
  serialNumber: 'abcdefc',
  description: 'description!',
  logoText: 'Logo!',
  backgroundColor: '#ffffff'
});
 
passbook.images.icon = './public/images/icon.png';
passbook.images.logo = './public/images/logo.png';
passbook.generate(function(err, buffer) {
  if (err) throw err; 
 
  fs.writeFile('./public/passes/sample.pkpass', buffer, function(err) {
    console.log('Yeah!');
  });
}); 


このライブラリには、TemplateクラスとPassbookクラスが用意されていて、createTemplateには共通で使いたい値を、createPassbookにはPassごとに設定したい値を引数に渡してあげます。

 

ここでは、createTempleteにTeam IDやPass Type IDなどをハッシュで渡して、templateを作成しています。

 つぎに、そのtemplateに、証明書+秘密鍵のpemファイルが置いてあるパスと、設定したパスワードをもたせます。

 

この辺で必要になるIDやpemファイルの作り方は以下のサイトを参考にしました。

http://www.atotok.com/labo/ios_dev/20110404220418.html

http://www.ianlewis.org/jp/python-passbook 

 

あとは、createPassbookに適当な値を渡して、画像とかを設定して、".pkpass"という拡張子をつけたファイルに保存すれば準備完了。

Expressなら以下のような感じにして、iPhoneから落とせます。

exports.download = function(req, res){  var file = './public/passes/sample.pkpass'
    , filestream = fs.createReadStream(file)
    , filename = path.basename(file)
    , mimetype = 'application/vnd.apple.pkpass';
 
  res.setHeader('Content-disposition', 'attachment; filename=' + filename);
  res.setHeader('Content-type', mimetype); 
 
  filestream.on('data', function(chunk) {
    res.write(chunk);
  }); 
 
  filestream.on('end', function() {
    res.end();
  });
}