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(); }); }