2016-08-05 2 views
0

Я использую эту библиотеку passgenerator для создания .pkpass, который предполагается установить на кошелек Apple на iPhone. Файл .pkpass сгенерирован успешно, но его нельзя было добавить в «кошелек» на iPhone, даже если он не обнаружил ошибки, когда я пытаюсь открыть этот файл из приложения электронной почты. Когда я открываю его с помощью «Пропускающего просмотра» на mac, он показывает некоторую ошибку в области штрих-кода. Вот скриншот;PHP сгенерированный проход не устанавливается в кошельке на iPhone

coupon

Я не знаю, где я делаю что-то неправильно. Я использую laravel 5.1, и я требую этот пакет правильно, а также в документации, требуемой для установки переменных среды для установки путей сертификатов.

CERTIFICATE_PATH= './assets/certificates/PassCertificate.p12' 
CERTIFICATE_PASS= "mypassword" 
WWDR_CERTIFICATE='./assets/certificates/WWDRCA.pem' 

Вот мой код контроллера, где я устанавливаю его конфигурации в формате json.

public function index(PassGenerator $pass) 
    { 
     $pass_identifier = 'testPkPass'; // This, if set, it would allow for retrieval later on of the created Pass 
     $pkpass = $pass->getPass($pass_identifier); 
     if (!$pkpass) { 
      $pkpass = $this->createWalletPass($pass_identifier); 
     } 
     $path = storage_path().'/app/passgenerator/'.$pass_identifier.'.pkpass'; 
     return Response::download($path, $pass_identifier.'.pkpass', [ 
      'Content-Transfer-Encoding' => 'binary', 
      'Content-Description' => 'File Transfer', 
      'Content-Disposition' => 'attachment; filename="myTestingPass.pkpass"', 
      'Content-length' => strlen($pkpass), 
      'Content-Type' => PassGenerator::getPassMimeType(), 
      'Pragma' => 'no-cache', 
     ]); 
    } 

    private function createWalletPass($pass_identifier) 
    { 

     $pass = new PassGenerator($pass_identifier); 

     $pass_definition = [ 
      "description"  => "description", 
      "formatVersion"  => 1, 
      "organizationName" => "Black Book", 
      "passTypeIdentifier"=> "pass.biz.myIdentifier.coupon", 
      "serialNumber"  => "123456", 
      "teamIdentifier" => "xyz", 
      "foregroundColor" => "rgb(255, 255, 255)", 
      "backgroundColor" => "rgb(44, 49, 51)", 
      "barcode" => [ 
       "message" => "encodedmessageonQR", 
       "format" => "PKBarcodeFormatQR", 
       "altText" => "altextfortheQR", 
       "messageEncoding"=> "utf-8", 
      ], 
      "coupon" => [ 
       "headerFields" => [ 
        [ 
         "key" => "header", 
         "label" => "Value", 
         "value" => "30%" 
        ] 
       ], 
       "secondaryFields" => [ 
        [ 
         "key" => "welcome", 
         "label" => "", 
         "value" => "Welcome valued customer!" 
        ], 
        [ 
         "key" => "date", 
         "label" => "EXPIRES", 
         "value" => "2016/06/29" 
        ] 
       ], 
       "backFields" => [ 
        [ 
         "key" => "terms", 
         "label" => "Terms & Conditions", 
         "value" => "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 
        ], [ 
         "key" => "contact", 
         "label" => "Contact Us", 
         "value" => "[Contact-us] Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco." 
        ], 
       ], 
      ], 
     ]; 

     $pass->setPassDefinition($pass_definition); 

     // Add assets to the PKPass package 
     $pass->addAsset(base_path('public/assets/wallet/background.png')); 
     $pass->addAsset(base_path('public/assets/wallet/thumbnail.png')); 
     $pass->addAsset(base_path('public/assets/wallet/icon.png')); 
     $pass->addAsset(base_path('public/assets/wallet/logo.png')); 

     $pkpass = $pass->create(); 
     return $pkpass; 
    } 

Любая помощь была бы действительно оценена. Пожалуйста, дайте мне знать, если я что-то не так с конфигурацией или где-то еще.

+0

Что говорят ваши журналы Xcode? Если у вас нет Mac или Xcode, можете ли вы отправить ссылку на пакет .pkapss. У вас нет даты истечения срока действия, установленной в вашем JSON, поэтому я подозреваю, что штрих-код неактивен, потому что ваш сертификат идентификатора Pass Type истек или был отменен. – PassKit

+0

Также у вас есть пустая строка на вашей вторичной этикетке. Удалите этот ключ или добавьте пробел. Пустая строка вызовет ошибку. – PassKit

+0

@PassKit Я изменил свое вторичное поле, но это не влияет. Можете ли вы предоставить мне свой адрес электронной почты, чтобы я мог отправить вам электронное письмо с пакетом. –

ответ

1

У вас возникли проблемы с вашей подписью.

Aug 5 16:38:36 pfr MobileSafari(PassKitCore)[2017] <Notice>: Error evaluating trust: <private> 
Aug 5 16:38:36 pfr MobileSafari(PassKitCore)[2017] <Notice>: Signature validation: *** FAILED *** 
Aug 5 16:38:36 pfr MobileSafari(PassKitCore)[2017] <Fault>: Invalid data error reading pass <private>. <private> 
Aug 5 16:38:36 pfr MobileSafari(PassKitCore)[2017] <Notice>: Invalid data error reading pass <private>. <private> 
Aug 5 16:38:36 pfr MobileSafari[2017] <Notice>: PassBook Pass download failed: The pass cannot be read because it isn't valid. 

Вы pass.json имеет идентификатор КОМАНДА "teamIdentifier":"5w2h"

Согласно вашей подписи файла, ваш идентификатор команда WY92JHSJ83. Исправьте идентификатор вашей команды и повторите попытку.

Также вы можете отказаться от своих background.png и thumbnail.png, поскольку они являются недопустимыми для получения формата купона.

+0

Спасибо @PassKit. Вы - спасатель жизни. Можете рассказать мне, как я могу проверить эти журналы так же, как и для отладки. –

+1

Вам нужен iPhone, Mac и Xcode. Подключите iPhone к Mac, затем в Xcode выберите Window-> Devices, затем выберите свое устройство. Журналы выводятся в нижней панели. – PassKit