生成ios钱包pkpass文件
文章目录
- 一、什么是PKPass文件?
- 二、制作PKPass文件
- 1. 服务器端制作是比较通用的做法
- 2. 本地制作
- 1. 申请Pass Type id
- 2. 生成对应证书
- 3. 制作pass.json
- 4. 创建manifest.json文件
- 5. 生成signature文件
- 三、
一、什么是PKPass文件?
PKPass 是Apple定义的一套针对商家消费券、优惠券、火车机票等票据格式类文件。包含:图标icon、缩略图thumbnail和logo外最重要的就是pass.json、manifest.json和signature等文件的一个压缩包
二、制作PKPass文件
1. 服务器端制作是比较通用的做法
Java写的开源库:
Java版本制作PKPass的web service
2. 本地制作
1. 申请Pass Type id
去苹果开发者网站生气PassType id

2. 生成对应证书

生成证书后下载到本地
3. 制作pass.json
a. 准备icon、logo和strip三类图片
b. 配置pass.json,这里还是强调一下passTypeIdentifier和teamIdentifier,前者就是上面在开发者中心创建的Pass Type ID(”pass.com.passcard.NFCdemo“),后者是对应的团队标识,申请苹果开发者账号时会分配一个唯一的团队标识(可以在苹果开发者中心–查看账户信息中查看”Team ID“)。,其他信息根据实际情况配置。
{"formatVersion": 1,"passTypeIdentifier": "pass.com.passcard.NFCdemo","serialNumber": "nmyuxofgna","teamIdentifier": "V3939UCPFC","authenticationToken": "bc83dde3304d766d5b1aea631827f84c","barcode": {"message": "userName TestName","altText": "会员详情","format": "PKBarcodeFormatQR","messageEncoding": "iso-8859-1"},"locations": [{"longitude": -122.3748889,"latitude": 37.6189722},{"longitude": -122.03118,"latitude": 37.33182}],"organizationName": "CardMee","logoText": "CardMee","description": "","foregroundColor": "rgb(2,2,4)","backgroundColor": "rgb(244,244,254)","storeCard": {"headerFields": [{"key": "date","label": "余额","value": "¥888"}],"secondaryFields": [{"key": "more","label": "VIP会员","value": "test user"}],"backFields": [{"key": "records","label": "消费记录(最近10次)","value": " test descript"},{"key": "phone","label": "联系方式","value": "4000-000-00"},{"key": "terms","label": "会员规则","value": "Test Descript"},{"key": "support","label": "技术支持","value": "http://xxx.xxx/xxxx/"}]},"labelColor": "rgb(87,88,93)"
}
4. 创建manifest.json文件
可以通过”openssl sha1 [文件路径]“分别计算出所有文件的哈希值:
调用服务器脚本生成
{"icon.png" : "e0f0bcd503f6117bce6a1a3ff8a68e36d26ae47f","logo.png" : "f2befb9e95da56f26a11ee02d15818d031ea19dd","icon@2x.png" : "784a9bb170809c607ecc73a6ab183a1e65bf82a0","background.png" : "dabfbcc61890ef2aa02943c49859a4ba8465a00e","logo@2x.png" : "5d1ea85567258fbae37caca20b3232e8069d8dcf","pass.json" : "f2d852941ad3d19dbeba45ccca56a2eb852309ca","background@2x.png" : "0d5f7f8fec8cf1e45e5bda4542023d394dcc4e6f","thumbnail.png" : "dabfbcc61890ef2aa02943c49859a4ba8465a00e","thumbnail@2x.png" : "0d5f7f8fec8cf1e45e5bda4542023d394dcc4e6f"
}
5. 生成signature文件
a.通过前面导入的Pass Type证书(Pass Type ID:pass.com.taokatao.mywallet)导出个人信息交换(.p12)文件并指定密码(假设密码为123),保存成”wallet.p12“(注意是导出证书而不是导出证书下的专用秘钥)。
b.在钥匙串中找到"Apple Worldwide Developer Relations Certification Authority"证书导出增强保密邮件(.pem),保存成”AWDRCA.pem“。
c.将.p12证书转化为.pem证书wallet.pem(需要输入导出时设置的密码123),输入如下命令:
openssl pkcs12 -in wallet.p12 -clcerts -nokeys -out wallet.pem -passin pass:123 -legacy
d.从.p12导出秘钥文件walletkey.pem(这里设置密码为123)
openssl pkcs12 -in wallet.p12 -nocerts -out walletkey.pem -passin pass:123 -passout pass:123 -legacy
e.根据AWDRCA.pem、wallet.pem、walletkey.pem、manifest.json生成signature文件(按照提示输入walletkey.pem导出时设置的密码123):
openssl smime -binary -sign -certfile AWDRCA.pem -signer wallet.pem -inkey walletkey.pem -in manifest.json -out signature -outform DER
