所以这就是我得到的:我创建了两个证书,一个 signerCertificate 和一个 signerKey 并将它们转换为 .pem 文件。它们工作,我可以在我的 Mac 终端上的控制台中签署通行证以创建 pkpass。所以证书有效,我需要将它添加到我的应用程序并编辑传递中的一些字段,所以我决定使用https://github.com/walletpass/pass-js来设置我的后端证书标牌。因此,我实施了所有必要的文档步骤,并且在您知道之前,我可以创建我认为是 pass bc 的内容,它会打印在我们的控制台日志中,如下面的代码所示。
所以这里是问题开始的地方。我正在尝试将传递数据返回到前端,如下所示。无论我从前端的文档返回什么变体,它都不会转换为 Data 或 NSData。那么我的目标是什么?我已经生成了通行证模板,它返回了某种通行证数据,但我坚持尝试将其转换为前端的数据,以使其成为可以在应用程序中为用户打开的 pkpass!我和我的同事已经尽我们所能来解决这个问题,但我们陷入了死胡同。
如果您有任何建议,请在下方留下。请参阅下面的所有附加屏幕截图和代码。
NODE JS Api 调用
const { Template } = require("@walletpass/pass-js");
exports.createTicket = functions.https.onCall(async (data, context) => {
const key = "-----BEGIN CERTIFICATE-----MIIF/jCCBOagaeYE=-----END CERTIFICATE-----"
const template = new Template("eventTicket", {
passTypeIdentifier: "pass.com.passllc.eventCard",
teamIdentifier: "ABCDEFGHI",
organizationName : "Scenes",
backgroundColor: "red",
sharingProhibited: true
});
await template.images.add("icon", "./models/icon.png");
await template.images.add("logo", "./models/logo.png");
template.setCertificate(key);
template.setPrivateKey("-----BEGIN ENCRYPTED PRIVATE KEY-----MIIFDj0I=-----END ENCRYPTED PRIVATE KEY-----", "passphrase");
const pass = template.createPass({
serialNumber: "123456",
description: "20% off"
});
console.log(pass);
return {
status: '200',
type: "application/vnd.apple.pkpass",
body: await pass.asBuffer(),
};
});
前端代码
functions.httpsCallable("createTicket").call(["test": "dummytext"]) { (result, error) in
if let data = result?.data as? [String: Any] {
let jsonData = try? JSONSerialization.data(withJSONObject: data)
do {
var passError: NSError?
var newPass = try PKPass(data: jsonData as! Data, error: &passError)
print("pkpassage: \(newPass)")
let addController = PKAddPassesViewController(pass: newPass)
addController.delegate = self
self.present(addController, animated: true)
} catch {
}
}
if (error as NSError?) != nil {
print("\(error?.localizedDescription) lower error")
}
}
当前正在输出什么
前端控制台 (Xcode) 错误输出
后端控制台(服务器日志)只是单个呼叫 控制台服务器日志开始的整个日志的一小部分; 控制台服务器日志结束
顺便说一句,我也尝试了这两种情况,但它们仍然无法转换为要转换为 pkpass 的东西: 为 api 创建文件
当我在前端 Xcode 控制台中将返回的通行证打印为字符串时,我还想添加:任何它都会打印类似 [234434, 45549, 3828] 的内容。正如您所看到的,它看起来像是在生成一个通行证,因为控制台正在记录它,只是我无法将它转换为可以转换为 pkpass 的数据。我真的很感激任何帮助,谢谢你们!