pkpass / pkpass
PHP iOS钱包PKPass类
Requires
- php: >=7.0
- ext-json: *
- ext-openssl: *
- ext-zip: *
Requires (Dev)
- phpunit/phpunit: ^9.6
README
此类提供了在苹果iOS钱包中创建通用的功能。它根据苹果的文档创建、签名并打包通用于.pkpass
文件。
需求
- PHP 7.0或更高版本(可能也适用于旧版本)
- PHP ZIP扩展(通常默认安装)
- 访问文件系统以写入临时缓存文件
安装
在项目根目录中运行以下命令即可通过Composer进行安装
composer require pkpass/pkpass
或在composer.json中添加:"pkpass/pkpass": "^2.0.0"
用法
请参阅examples/example.php文件以获取示例用法。有关通用的JSON以及如何对其进行样式的更多信息,请参阅developer.apple.com上的文档。
包含的示例
添加文件的功能
addFile
: 添加不带地区设置的文件,如icon.png
addRemoteFile
: 从URL添加不带地区设置的文件,如https://xyz.io/icon.png
addLocaleFile
: 添加带地区设置的文件,如strip.png
addLocaleRemoteFile
: 从URL添加带地区设置的文件,如https://xyz.io/strip.png
请求通用的证书
- 访问iOS配置文件门户。
- 创建一个新的通用类型ID,并记下您选择的通用ID,您稍后需要它。
- 点击您刚刚创建的通用类型ID下的编辑按钮,并根据页面上的说明生成证书。请确保不要为证书选择名称,而是将其保留为空。
- 下载.cer文件,并将其拖入钥匙串访问。
- 找到您刚刚导入的证书,点击左侧的三角形以显示私钥。
- 选择证书及其私钥,然后在钥匙串访问中右键单击证书,选择
导出2项…
。 - 选择密码并将文件导出到文件夹。
OpenSSL错误
当您收到错误“无法读取证书文件。这可能与使用已弃用某些旧哈希的OpenSSL版本有关。更多信息请参阅:https://schof.link/2Et6z3m OpenSSL错误:错误:0308010C:数字信封例程:不受支持”时,这是由于osx使用旧版本的OpenSSL导出.p12文件。要解决这个问题,请使用以下命令
openssl pkcs12 -legacy -in key.p12 -nodes -out key_decrypted.tmp
(将key.p12替换为您的.p12文件名)。
openssl pkcs12 -in key_decrypted.tmp -export -out key_new.p12
(在下面的密码生成中使用新生成的 key_new.p12 文件)
使 example.php 示例工作
- 按照上述说明请求 Pass 证书(
.p12
)并将其上传到您的服务器。 - 在 第 22 行 设置正确的路径和密码。
- 在第 29 行和第 31 行更改
passTypeIdentifier
和teamIndentifier
到正确的值(teamIndentifier
可在 开发者门户 中找到)。
完成这些步骤后,您应该可以开始使用了。将所有文件上传到您的服务器,然后在您的 iPhone 上导航到 examples/example.php 文件的地址。
调试通行证
如果您无法在 iPhone 上打开通行证,请将 iPhone 连接到 Mac,并打开“控制台”应用程序。在左侧,您可以选择您的 iPhone。然后您将能够检查添加通行证时发生的任何错误。
信任评估失败:[leaf TemporalValidity]
:如果您看到此错误,则您的通行证是用过时的证书签名的。信任评估失败:[leaf LeafMarkerOid]
:在创建它时,您没有在开发者门户中留下证书的名称。
更新日志
版本 2.1.0 - 2023 年 4 月
- 添加提取 P12 内容的替代方法,以绕过 OpenSSL 最新版本中的问题。
版本 2.0.2 - 2022 年 10 月
- 由于 PHP 8 弃用,切换到打开 ZIP 的
ZipArchive::OVERWRITE
方法(#120)。
版本 2.0.1 - 2022 年 10 月
- 更新 WWDR 证书到 v6(#118)。
版本 2.0.0 - 2022 年 9 月
- 更改构造函数的签名,移除第三个
$json
参数。 - 删除已弃用的
setJSON()
方法。 - 用异常替换
checkError()
和getError()
方法。
支持和文档
请在提交工单或请求支持之前阅读上述说明并查阅 钱包文档。检查 Stackoverflow(其中包含许多有关此库的问题)也可能很有帮助。
提供定制咨询服务,以支持实施和功能开发。