基本上我正在尝试使用Google Checkout PHP示例代码将Google Checkout订单处理(2级集成)添加到CakePHP应用中。
我可以成功创建购物车并接收从Google发送到我的应用的通知,但不能正确承认这些。
google的代码中执行此操作的函数就是:
<?xml version="1.0" encoding="UTF-8" ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number="119963104284921-00001-7" />
但Google Checkout会收到如下代码:
<?xml version=1.0 encoding=UTF-8 ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number=119963104284921-00001-7 />
我无法解决导致这种情况的原因,我不认为它与Cake有任何关系,我已禁用PHP短标记,因此我可以使用内联XML,但这没有任何区别。
如果我从字符串中删除第一个<
,则函数echo正确地执行其余代码,将其保留并且它会刹车(显然这也适用于?
并关闭{{1我也不能同时拥有所有这些!)。
我自己可以复制此内容,尝试使用以下功能删除Google代码中所做的任何看不见的内容。它完全相同,但包含在(Cake)控制器中并对变量进行硬编码。
>
public function blank($tags = null) {
$schema = 'http://checkout.google.com/schema/2';
$serial = '119963104284921-00001-7';
if ($tags != null) {
$acknowledgment = '<?xml version="1.0" encoding="UTF-8" ?'.'>'.'<notification-acknowledgment xmlns="'.$schema.' '.'serial-number="'.$serial.'" />';
} else {
$acknowledgment = '?xml version="1.0" encoding="UTF-8" ?>'.'<notification-acknowledgment xmlns="'.$schema.' '.'serial-number="'.$serial.'" />';
}
$this->set('_ack', $acknowledgment);
}
语句用于显示IF
符号的差异。
没有任何内容( $ tags == null )调用它会产生以下结果:
<
使用任何其他值( $ tags!= null )调用它会得到此输出:
<?xml version="1.0" encoding="UTF-8" ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number="119963104284921-00001-7" />
我的问题(终于!)是,为什么会发生这种情况?如何才能正确输出XML?
很抱歉,如果我错过了一些非常明显的东西,但是我宁愿在这里指出它,而不是在另一天无处可去!
答案 0 :(得分:0)
这个“问题”与PHP解释器有关。
有一些解决方案,但View中的所有内容都不在Controlled中。
//var
$questionmark = "?";
echo "<".$questionmark."xml version=\"1.0\" encoding=\"utf-8\"".$questionmark.">";
// separate
echo '<' . '?xml version="1.0" encoding="utf-8"?' . '>';
答案 1 :(得分:0)
您忘记关闭xmlns
属性上的引号,这可能是原因。试试这个:
$acknowledgment = '<?xml version="1.0" encoding="UTF-8" ?'.'>'.'<notification-acknowledgment xmlns="'.$schema.'" '.'serial-number="'.$serial.'" />';
答案 2 :(得分:0)
某些XML解析器不允许以大写字母指定编码(例如,UTF-8不正确)。
尝试将编码更改为“utf-8”以查看是否修复了它。