You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

xero-node调用createContacts创建联系人无法写入brandingTheme等字段

问题原因
  • xero-node SDK的Contact类型定义没有区分字段的操作权限,把「只读返回字段」「创建可写字段」「更新可写字段」做了合并,你传入的brandingTheme、salesDefaultLineAmountType两个字段不属于createContacts接口的入参白名单,Xero API对不在白名单的入参字段默认做静默丢弃处理,不会抛错,所以最终只保存了创建接口支持的name和accountNumber。
  • 额外注意:brandingTheme关联本身要求品牌主题ID必须归属于当前传入的租户ID,如果ID无效、跨租户或者已被删除,哪怕走更新接口传入也会被静默忽略。
处理方案
  1. 拆分创建和配置两步操作,创建联系人时只传createContacts接口支持的基础字段,拿到创建成功后返回的contactID,示例代码:
const create_contact: Contact = {
  accountNumber: '******',
  name: '*******',
};
const createRes = await xero.accountingApi.createContacts('myTenantId', {
  contacts: [create_contact]
});
const savedContact = createRes.body.contacts?.[0];
if (!savedContact?.contactID) {
  throw new Error('联系人创建失败,未返回有效contactID');
}
  1. 提前校验品牌主题ID有效性,调用xero.accountingApi.getBrandingThemes('myTenantId')拉取当前租户下的所有有效品牌主题,确认你要绑定的brandingThemeID在返回列表中。
  2. 调用单联系人更新接口,传入contactID和需要补充的两个配置字段完成设置,示例代码:
const update_contact: Contact = {
  contactID: savedContact.contactID,
  brandingTheme: {
    brandingThemeID: '********-****-****-****-************',
  },
  salesDefaultLineAmountType: SalesDefaultLineAmountTypeEnum.EXCLUSIVE
};
await xero.accountingApi.updateContact(
  'myTenantId',
  savedContact.contactID,
  update_contact
);
  1. 更新完成后可以调用getContact接口拉取最新联系人信息,确认两个字段已经正常保存。

内容的提问来源于stack exchange,提问作者KillReal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:42:40