Я использую API учета Xero с PHP (OAuth2), в частности функцию updateOrCreateInvoices в API Xero для синхронизации транзакций. Однако я заметил, что каждый раз, когда я запускаю эту функцию, некоторые контактные данные обновляются или перезаписываются, особенно поле «дополнительные лица». Это поле очищается после процесса синхронизации.
Я был бы признателен за любые идеи или разъяснения о поведении функции updateOrCreateInvoices. Существует ли особый способ структурирования запроса для обеспечения целостности контактной информации? Любая помощь или предложения будут очень признательны.
Используемая функция: updateOrCreateInvoices
Проблема: контактные данные, в частности поле «дополнительные лица», перезаписываются или удаляются.
Вот фрагмент кода, который я использую для синхронизации счетов.
public function create_or_update_invoice($xero_tenant_id, $api_instance, $invoice_list = array()){
$arr_invoices = array();
foreach ($invoice_list as $invoice) {
//Retrieve Existing Contact Details (using the getContacts function):
$contact = $this->get_contact_by_id($xero_tenant_id, $api_instance, $xero_contact_id, $contact_name);
//Prepare Invoice Data with Existing Contact & Invoice Details:
$new_invoice = new XeroAPI\XeroPHP\Models\Accounting\Invoice;
$new_invoice->setType(XeroAPI\XeroPHP\Models\Accounting\Invoice::TYPE_ACCREC)
->setContact($contact)
...
...
->setStatus(XeroAPI\XeroPHP\Models\Accounting\Invoice::STATUS_AUTHORISED);
$arr_invoices[] = $new_invoice;
}
$invoices = new XeroAPI\XeroPHP\Models\Accounting\Invoices;
$invoices->setInvoices($arr_invoices);
try{
//Update or Create Invoice:
$result = $api_instance->updateOrCreateInvoices($xero_tenant_id, $invoices);
return $result;
}catch(Exception $e){
return $e;
}
}
После вышеописанных действий поле «дополнительные лица» в контактных данных очищается или перезаписывается.
Как ответил sallyhornet, я проверил и подтвердил, что, отмечая только ContactID в счете, я могу синхронизировать счета с Xero, не перезаписывая контактные данные.
Обновленный фрагмент примера:
...
//Retrieve Existing Contact Details (using the getContacts function):
//original
//$contact = $this->get_contact_by_id($xero_tenant_id, $api_instance, $xero_contact_id, $contact_name);
//new
$contact = new XeroAPI\XeroPHP\Models\Accounting\Contact;
$contact->setContactID($xero_contact_id);
//Prepare Invoice Data with Existing Contact & Invoice Details:
$new_invoice = new XeroAPI\XeroPHP\Models\Accounting\Invoice;
$new_invoice->setType(XeroAPI\XeroPHP\Models\Accounting\Invoice::TYPE_ACCREC)
->setContact($contact)
...
Если вы включаете поле контактных лиц, вам необходимо включить всех дополнительных людей, поскольку сведения о контактных лицах в Xero обновляются в соответствии с тем, что вы отправляете в это поле.
В счете-фактуре требуется только идентификатор контакта, а не полные контактные данные, поэтому, если вы не хотите обновлять контакт, вы можете просто указать идентификатор, а не полные контактные данные.
Я проверил и кажется, что это работает, я бы не подумал, что перезапись произошла из-за дополнительных контактных данных, включенных в счет! Спасибо!