Невозможно создать строку DueDate для вызова API Invoice.Python

Программы на Python
Ответить
Anonymous
 Невозможно создать строку DueDate для вызова API Invoice.

Сообщение Anonymous »

Я пытаюсь выполнить вызов API с помощью Python и httpx к API Xero Invoice. Я использую следующий метод API:

Код: Выделить всё

async def create_invoice(
invoice_detail: InvoiceCreateRequest,
token_manager=Depends(oauth_manager)
) -> InvoiceCreateResponse:
base_url = 'https://api.xero.com/api.xro/2.0/Invoices'
headers = {
'Xero-Tenant-Id': get_settings().TENANT_ID,
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': f'Bearer {await token_manager.access_token}'
}
data = invoice_request_to_dict(invoice_detail)

async with httpx.AsyncClient() as client:
response = await client.request(
method='POST',
url=base_url,
headers=headers,
data=data
)
Объект данных выглядит следующим образом:

Код: Выделить всё

{
"Type": "ACCREC",
"Contact": {
"ContactID": "3ed357da-0988-4ea1-b1b7-96829e0dde69"
},
"DueDate": r"\/Date(1518685950940+0000)\/",
"LineItems": [
{
"Description": "Services as agreed",
"Quantity": "4",
"UnitAmount": "100.00",
"AccountCode": "200"
}
],
"Status": "AUTHORISED"
}
В результате возникает следующая ошибка:

Код: Выделить всё

b'{\r\n  "ErrorNumber": 14,\r\n  "Type": "PostDataInvalidException",\r\n  "Message": "Invalid Json data"\r\n}'
Насколько я понимаю, это связано со способом передачи DueDate в API Xero. Они используют формат даты MS .NET, но Python добавляет escape-символы перед \, чтобы получить следующее:

Код: Выделить всё

'\\/Date(1518685950940+0000)\\/'
Я настроил собственный вызов API через Postman к той же конечной точке Xero с той же полезной нагрузкой, и он работает нормально. Изменение объекта DueDate, чтобы он выглядел так, как показано выше, приводит к ошибке того же типа:

Код: Выделить всё

JSON for post data was invalid,Could not convert string to DateTime: \/Date(1518685950940+0000)\/. Path 'DueDate', line 6, position 45.
Мне не удалось найти способ переформатировать строку, чтобы избавиться от дополнительных escape-символов. Есть ли какой-то конкретный способ это сделать? Мне не удалось найти ничего по этому поводу в документации разработчиков.


Подробнее здесь: https://stackoverflow.com/questions/793 ... e-api-call
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»