Эта функция должна создавать XML-файл, который в конечном итоге передается в запрос curl в контроллере, а в конечном итоге и до API учета. Запрос curl прекрасно работает, когда я передаю статический XML-файл.
Код здесь должен генерировать динамический XML-файл на основе создаваемого клиента.
По какой-либо причине он возвращает пустую строку.
Некоторые поля допускают нулевое значение.
Любые идеи очень приветствуются.
$writer = new XMLWriter($xmlString);
// Output directly to the user
$writer->openMemory();
$writer->openURI('php://output');
$writer->startDocument('1.0');
$writer->writeAttribute('encoding', 'utf-8');
$writer->startElement('request');
$writer->writeAttribute('method', 'client.create');
$writer->setIndent(true);
$writer->startElement('client');
//----------------------------------------------------
$writer->writeElement('first_name', $org->first_name);
$writer->writeElement('last_name', $org->last_name);
$writer->writeElement('organization', $org->name);
$writer->writeElement('email', $org->contact_email);
$writer->writeElement('username', $org->contact_name);
$writer->writeElement('password');
//----------------------------------------------------
$writer->startElement('contacts');
$writer->startElement('contact');
$writer->writeElement('username', $org->contact_name);
$writer->writeElement('first_name', $org->first_name);
$writer->writeElement('last_name', $org->last_name);
$writer->writeElement('email', $org->contact_email);
$writer->writeElement('phone1', $org->contact_phone);
$writer->writeElement('phone2');
// contact
$writer->endElement();
// End contacts
$writer->endElement();
//----------------------------------------------------
$writer->writeElement('work_phone', $org->contact_phone);
$writer->writeElement('home_phone', $org->contact_phone);
$writer->writeElement('mobile', $org->contact_phone);
$writer->writeElement('fax', $org->contact_phone);
$writer->writeElement('language', 'en');
$writer->writeElement('currency_code', 'USD');
$writer->writeElement('phone1', $org->contact_phone);
$writer->writeElement('notes');
// primary address
$writer->writeElement('p_street1');
$writer->writeElement('p_city');
$writer->writeElement('p_state');
$writer->writeElement('p_code');
// secondary address
$writer->writeElement('s_street1');
$writer->writeElement('s_city');
$writer->writeElement('s_state');
$writer->writeElement('s_code');
$writer->writeElement('vat_name');
$writer->writeElement('vat_number');// End channel
$writer->endElement();
// End request
$writer->endElement();
$writer->endDocument();
$currentMemory = $writer->outputMemory();
$writer->flush();
return $currentMemory;
}
Я удалил этот фрагмент кода:
$writer->openURI('php://output');
и оставил в этом фрагменте:
$writer->openMemory();
Так как я передавал XML в контроллер,
openURI()
был неправильный метод, так как он предназначен для вывода непосредственно пользователю.
openMemory()
сохраняет данные, а затем закрывается в нижней части функции, делая ее доступной в функции моего контроллера после включения этого файла.
Других решений пока нет …