我正在尝试为我的应用创建动态优惠券。我有一个PHP服务器来创建它们。但我不知道他们为什么不在存折上工作。
如果我从终端创建传球,它可以正常工作。但在PHP中使用PHP-PKPass。
我将代码留在PHP下面,它在我的计算机中出现了通行证,但它没有添加到存折中(如果我通过电子邮件发送)
我100%确定passTypeIdentifier,teamIdentifier,证书和WWDR 100%正确
注意:所有图像都存在
<?php
include ("conexion.php");
require('passpk/PKPass.php');
if (isset($_GET['cupon']) and $_GET['cupon'] != '' and $_GET['cupon'] > 0) {
$cuponID = $_GET['cupon'];
$pass = new PKPass\PKPass();
$pass->setCertificate('./Certificate.p12'); // 2. Set the path to your Pass Certificate (.p12 file)
$pass->setCertificatePassword('*******'); // 2. Set password for certificate
$pass->setWWDRcertPath('./WWDR.pem'); // 3. Set the path to your WWDR Intermediate certificate (.pem file)
// Top-Level Keys http://developer.apple.com/library/ios/#documentation/userexperience/Reference/PassKit_Bundle/Chapters/TopLevel.html
$standardKeys = array(
'description' => 'Store',
'formatVersion' => 1,
'organizationName' => 'Store',
'passTypeIdentifier' => 'pass.store.store', // 4. Set to yours
'serialNumber' => $cupon['id'],
'teamIdentifier' => '********' // 4. Set to yours
);
$associatedAppKeys = array();
$relevanceKeys = array();
$styleKeys = array(
'coupon' => array(
'primaryFields' => array(
array(
'key' => 'key',
'label' => "Label"
)
),
'secondaryFields' => array(
array(
'key' => 'name',
'label' => 'Tienda',
'value' => "Name"
),
array(
'key' => 'date',
'label' => 'Válido hasta',
'value' => "Vigencia"
)
),
'backFields' => array(
array(
'key' => 'tienda',
'label' => 'Tienda',
'value' => "tienda"
),
array(
'key' => 'sucursales',
'label' => 'Sucursales',
'value' => 'Valido en las sucursales y sus horarios'
),
array(
'key' => 'description',
'label' => 'Descripción',
'value' => "descr"
),
array(
'key' => 'terms',
'label' => 'Términos y Condiciones',
'value' => "cupon"
)
)
)
);
$visualAppearanceKeys = array(
'barcode' => array(
'format' => 'PKBarcodeFormatPDF417',
'message' => "cupon",
'messageEncoding' => 'iso-8859-1'
),
'foregroundColor' => 'rgb(255, 255, 255)',
'backgroundColor' => 'rgb(4, 148, 203)',
'logoText' => 'cupon'
);
$webServiceKeys = array();
// Merge all pass data and set JSON for $pass object
$passData = array_merge(
$standardKeys,
$associatedAppKeys,
$relevanceKeys,
$styleKeys,
$visualAppearanceKeys,
$webServiceKeys
);
$pass->setJSON(json_encode($passData));
//creating a temp file called strip.png
//generamos un directorio temporal y creamos el strip
$uniqID = uniqid('', true);
$dir = './tempDir/'.$uniqID;
mkdir($dir, 0777);
//copiamos el archvio al nuevo directorio
copy('../'.$img, './tempDir/'.$uniqID.'/strip.png');
// Add files to the PKPass package
$pass->addFile($dir.'/strip.png');
$pass->addFile('images/icon.png');
$pass->addFile('images/icon@2x.png');
$pass->addFile('images/logo.png');
$pass->addFile('images/logo@2x.png');
if(!$pass->create(true)) { // Create and output the PKPass
echo 'Error: '.$pass->getError();
}
//borramos el folder temp
unlink($dir.'/strip.png');
rmdir($dir);
}
答案 0 :(得分:3)
在我尝试安装通行证时查看控制台输出,我看到以下警告。
Mar 25 10:45:40 iPhone MobileSafari[279] <Warning>: Invalid data error reading pass pass.cuponice.cuponice/9. Pass dictionary must contain key 'value'.
Mar 25 10:45:40 iPhone MobileSafari[279] <Warning>: PassBook Pass download failed: The pass cannot be read because it isn't valid.
深入了解你的pass.json,我发现你的primaryFields
字典不包含'value'键。
"primaryFields": [{
"key": "key",
"label": "30% de Descuento en Persianas"
}
],
要修复此问题,请更改您的PHP以将value
密钥添加到您的primaryFields
字典中。
$styleKeys = array(
'coupon' => array(
'primaryFields' => array(
array(
'key' => 'key',
'label' => "Label",
'value' => ""
)
), //...