Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Perl) Sign Manifest File to Generate a Passbook .pkpass fileDemonstrates how to create a Passbook .pkpass archive by creating a signature of a manifest file and then zipping to a .pkpass archive.
use chilkat(); # Note: Requires Chilkat v9.5.0.75 or greater. # This requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. # --------------------------------------------------------------------------------------------- # Note: Chilkat also has the capability to do everything in-memory (no files would be involved). # See this example: Sign Manifest File to Generate a Passbook .pkpass in Memory # --------------------------------------------------------------------------------------------- # First create the manifest.json $manifest = chilkat::CkJsonObject->new(); $crypt = chilkat::CkCrypt2->new(); $zip = chilkat::CkZip->new(); $zip->NewZip("qa_data/p7s/pass-wallet/example.pkpass"); # Set the AppendFromDir property to prevent that relative paths from being stored in the .pkpass archive. $zip->put_AppendFromDir("qa_data/p7s/pass-wallet/"); $crypt->put_HashAlgorithm("sha1"); # Return hashes as lowercase hex. $crypt->put_EncodingMode("hexlower"); $filePath = "qa_data/p7s/pass-wallet/icon.png"; $fileHash = $crypt->hashFileENC($filePath); $zip->AppendOneFileOrDir("icon.png",0); $manifest->UpdateString("\"icon.png\"",$fileHash); $filePath = 'qa_data/p7s/pass-wallet/icon@2x.png'; $fileHash = $crypt->hashFileENC($filePath); $zip->AppendOneFileOrDir('icon@2x.png',0); $manifest->UpdateString('\'icon@2x.png\'',$fileHash); $filePath = "qa_data/p7s/pass-wallet/logo.png"; $fileHash = $crypt->hashFileENC($filePath); $zip->AppendOneFileOrDir("logo.png",0); $manifest->UpdateString("\"logo.png\"",$fileHash); $filePath = 'qa_data/p7s/pass-wallet/logo@2x.png'; $fileHash = $crypt->hashFileENC($filePath); $zip->AppendOneFileOrDir('logo@2x.png',0); $manifest->UpdateString('\'logo@2x.png\'',$fileHash); $filePath = "qa_data/p7s/pass-wallet/pass.json"; $fileHash = $crypt->hashFileENC($filePath); $zip->AppendOneFileOrDir("pass.json",0); $manifest->UpdateString("\"pass.json\"",$fileHash); $sbJson = chilkat::CkStringBuilder->new(); $manifest->EmitSb($sbJson); $manifestPath = "qa_data/p7s/pass-wallet/manifest.json"; $sbJson->WriteFile($manifestPath,"utf-8",0); $zip->AppendOneFileOrDir("manifest.json",0); # Make sure we have the Apple WWDR intermediate certificate available for # the cert chain in the signature. $certVault = chilkat::CkXmlCertVault->new(); $appleWwdrCert = chilkat::CkCert->new(); $success = $appleWwdrCert->LoadByCommonName("Apple Worldwide Developer Relations Certification Authority"); if ($success != 1) { print "The Apple WWDR intermediate certificate is not installed." . "\r\n"; print "It is available at https://developer.apple.com/certificationauthority/AppleWWDRCA.cer" . "\r\n"; print "You may alternatively load the .cer like this..." . "\r\n"; $success = $appleWwdrCert->LoadFromFile("qa_data/certs/AppleWWDRCA.cer"); if ($success != 1) { print $appleWwdrCert->lastErrorText() . "\r\n"; exit; } } $certVault->AddCert($appleWwdrCert); $crypt->UseCertVault($certVault); # Use a digital certificate and private key from a PFX file (.pfx or .p12). $pfxPath = "qa_data/pfx/cert_test123.pfx"; $pfxPassword = "test123"; $cert = chilkat::CkCert->new(); $success = $cert->LoadPfxFile($pfxPath,$pfxPassword); if ($success != 1) { print $cert->lastErrorText() . "\r\n"; exit; } # Provide the signing cert (with associated private key). $success = $crypt->SetSigningCert($cert); if ($success != 1) { print $crypt->lastErrorText() . "\r\n"; exit; } # Specify the signed attributes to be included. # (These attributes appear to not be necessary, but we're including # them just in case they become necessary in the future.) $jsonSignedAttrs = chilkat::CkJsonObject->new(); $jsonSignedAttrs->UpdateInt("contentType",1); $jsonSignedAttrs->UpdateInt("signingTime",1); $crypt->put_SigningAttributes($jsonSignedAttrs->emit()); # Sign the manifest JSON file to produce a file named "signature". $sigPath = "qa_data/p7s/pass-wallet/signature"; # Create the "signature" file. $success = $crypt->CreateP7S($manifestPath,$sigPath); if ($success == 0) { print $crypt->lastErrorText() . "\r\n"; exit; } $zip->AppendOneFileOrDir("signature",0); # --------------------------------------------------------------------------------------------- # Note: Chilkat also has the capability to do everything in-memory (no files would be involved). # If this is of interest, please send email to support@chilkatsoft.com # --------------------------------------------------------------------------------------------- # Create the .pkipass archive (which is a .zip archive containing the required files). $success = $zip->WriteZipAndClose(); if ($success != 1) { print $zip->lastErrorText() . "\r\n"; exit; } print "Success." . "\r\n"; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.