尝试在XERO中执行POST以更新联系人时出现重复错误



每当我试图使用POST请求更新系统中已经存在的Xero联系人时,我都会收到以下错误

"ValidationErrors":
[{
"Message": "The contact name Test Contact is already assigned to another contact. 
The contact name must be unique across all active contacts."
}]

然而,这直接来自他们的文档。他们说,如果你使用PUT来推送更新,你会得到一个错误,而使用POST应该可以成功工作。我做错了什么?

POST联系人使用此方法创建或更新一个或多个联系人记录

当您更新联系人时,不需要指定要素如果排除元素,则现有值将为保留

PUT联系人使用此方法创建一个或多个联系人记录。此方法的工作原理与POST Contacts非常相似,但如果联系人与您的ContactName或ContactNumber匹配,则您将接收错误。

我的代码制作请求

//req options
let options =
{
method: 'POST',
headers:
{
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token,
'xero-tenant-id': tenant_id,
'Accept': 'application/json'
},
data: { "Contacts": contacts }
}
//send request
let res = await axios(url, options)

这里有一个解决方法,它通过传递任何创建功能(例如联系人、发票(的SDK来解决问题。

如果您使用的是自定义连接,第一步,请使用SDK初始化客户端并正常获得tokenSet,这意味着access_token; xero-tenant-id必须是自定义连接的空字符串。如果您使用的是OAuth2方法,请相应地替换。

然后,使用Axios对您的数据进行PUT或POST,例如

const axios = require("axios")
const tokenSet = {} // use applicable SDK to get access_token
let contacts = [{
ContactID: contact_dot_uuid,
Name:name,
EmailAddress:email
}]
let config = {
url: "https://api.xero.com/api.xro/2.0/Contacts",
method: 'PUT',
headers: {
'Authorization': 'Bearer ' + tokenSet.access_token,
'xero-tenant-id': "",
'Accept': 'application/json',
'Content-Type': 'application/json',
},
params: { "summarizeErrors": true },
data: { Contacts: contacts }
}
axios(config).then((response) => {
// response.data out
}).catch((error)=>{
// error out
})

值得一提的是,SDK错误是由联系人/发票数据的序列化任务引起的,该任务每次都返回null。

相关内容

最新更新