Обычно я пытаюсь добавить обработку заказов Google Checkout (интеграция уровня 2) в приложение CakePHP, используя пример кода PHP Google Checkout.
Я могу успешно создавать корзины и получать уведомления, отправленные из 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, но это не имеет значения.
Если я удаляю первый <
из строки, функция правильно отображает остальную часть кода, оставляет его и тормозит (очевидно, это также относится к символу ?
и закрывающему символу >
, просто не могу иметь их всех сразу!).
Мне удалось воспроизвести это сам, пытаясь удалить все невидимые вещи, которые делаются в коде 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 ) дает такой вывод:
<?xml version="1.0" encoding="UTF-8" ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number="119963104284921-00001-7" />
Источник .
Вызов его с любым другим значением ( $ tags! = Null ) дает такой вывод:
<?xml version=1.0 encoding=UTF-8 ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number=119963104284921-00001-7 />
Источник .
Мой вопрос (наконец-то!): Почему это происходит? и как я могу получить правильный вывод XML?
Извините, если я пропустил что-то действительно очевидное, но я бы предпочел, чтобы это было указано здесь, а не находить что-либо еще на один день!