Как прочитать содержимое файла pass.pkpass и отправить в текстовом / xml restfull ответ веб-службы

Я реализовал https://github.com/tschoffelen/php-pkpass сгенерировать pkpass.

Я интегрировал в поддерживаемый API restfull, который отправляет ответ в текстовом / xml типе содержимого.

Я пытаюсь прочитать файл .pkpass в резервной копии и отправить ответ API, как показано ниже, который может быть декодирован приложением ios и использовать этот pkpass.

но используя file-get-content, мы не получаем корректный контент, который можно отправить в виде строки. это работает нормально, если мы используем это для загрузки файла из веб-браузера.

Есть ли что-то, что мне не хватает, чтобы прочитать содержимое файла .pkpass.

public function create($output = false)
{
$paths = $this->getTempPaths();
// Creates and saves the json manifest
if(!($manifest = $this->createManifest())) {
$this->clean();

return false;
}

// Create signature
if($this->createSignature($manifest) == false) {
$this->clean();

return false;
}

if($this->createZip($manifest) == false) {
$this->clean();

return false;
}

// Check if pass is created and valid
if(!file_exists($paths['pkpass']) || filesize($paths['pkpass']) < 1) {
$this->sError = 'Error while creating pass.pkpass. Check your ZIP extension.';
$this->clean();

return false;
}

// Get contents of generated file
$file = file_get_contents($paths['pkpass']);
$size = filesize($paths['pkpass']);
$name = basename($paths['pkpass']);

// Cleanup
//$this->clean();

// Output pass
if($output == true) {
$fileName = $this->getName() ? $this->getName() : $name;
if(!strstr($fileName, '.')) {
$fileName .= '.pkpass';
}
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.apple.pkpass');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s T'));
header('Pragma: public');
header('Content-Length: ' . $size);
@ob_end_flush();
set_time_limit(0);
echo $file;

return true;
}
return $file;
}

вызов метода

$pk_pass =  $pass->create('false');

$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= '<root>';
$xml .= '<pass>'.$pk_pass.'</pass>';
$xml .= '</root>';

Ответ я получаю как ниже

<?xml version="1.0" encoding="UTF-8"?>
<root>
<pass>PKX��L����l   &
signature͖{8�[�����0��F�J�=.!G�%��k:��1���L��R��"�NT��J���)���t��n_�')Gw���P�������1����Z{�{��~{)���$�3�-R�eR���4a"kF-"�b��0���?B2))��A
�`X��e�������nSv�2�&)$�5*�т��Z`�\�j`W��lыK#����R]�dR���b�Atcla�y|����`SD,WHv.rk����aMteD�HM!Wn1y�(��Ñ큭�ؐ��Dt�&I%��1X�\ӝy��!Hc�"�h<��`��<W��QYl�G�Pd[`=�a�~�!10����m�;nS!Q���

���
$���8i��{{��z����xy��ݾ�)�B��Î�J
i*!z,,� �+7��W���=�1�ì���N��Ч�!>��~{�����p�����������[ޥ)����\����(������U��E�[���,jM_�+��ZU��wV��
5ϰ�.Ģ�s�V�jh�}������W<�Q�x�nB��J�O&܏��9�����������v����t`��qC�Gb_]8��pb_�9|ۗ[Zb�����?r)���ك�c��+/��]��%ZTt2��ò��l{�[�t��E������!,b�i&����J��Lh� %�T
�)�\8�J�P>4A��n����zjU
��́gg�x�^�,mNU3��*�&K`�QP�S$�/���ф|E���;V�b1]��Д�@DK!�V H&���FW��d,�� ������S�hK i�d�,Ԡ!9�$9�¥1�Hb��,!��)�Dj�CrO BFB�fCH��h�h�'�a�\�|ċ����St��!� \:����Y�ń8m2̿؈�C|�&-��5��B�h�5E�+��
<y@�����Ӡ�O1A�@>o�^�2�Q��TTh����L��% �=f�u�ڑ���.4�N��(4mTJ���p��D�Q�J2���Nm�A�h�����&~�ƿ�J^^�ݔ����`���
����

</pass>
</root>

1

Решение

@Praveen Я сделал это раньше, несколько дней назад, но не с XML.
Я просто говорю, что вы предоставляете URL-адрес содержимого .pkpass.
лайк http://example.com/pass/xx где xx — это идентификатор / серийный номер этого прохода.
это процесс в php и подготовить проход с соответствующим содержанием. когда кто-то нажмет на этот URL-адрес, создайте .pkpass.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]