TransWikia.com

Ошибка при отправке JSON на API методом POST

Stack Overflow на русском Asked by Master Wenom on November 15, 2021

Python только начал изучать, по этому сильно не критикуйте.
Имеется скрипт отправки данных в API:

import requests
import json

AUTHURL = 'https://<здесь мой логин>.amocrm.ru/private/api/auth.php'
TESTURL = 'https://<здесь мой логин>.amocrm.ru/api/v2/account?with=pipelines,groups,note_types,task_types'
FORMURL = 'https://<здесь мой логин>.amocrm.ru/api/v2/incoming_leads/form'
CONTACTURL = 'https://<здесь мой логин>.amocrm.ru/api/v2/contacts'
LEADS = 'https://<здесь мой логин>.amocrm.ru/api/v2/leads'
AUTHDATA = {'USER_HASH': '<здесь мой ключ API>', 'USER_LOGIN': '<здесь мой логин>'}
POSTPARAMS = {'api_key': '<здесь мой ключ API>', 'login': '<здесь мой логин>'}
headers = {'Content-type': 'application/json'}

JSONFORMDATA = {

"add": [
    {
        "source_name": "WEB сайт",
        "source_uid": "a1fee7c0fc436088e64ba2e8822ba2b3",
        "created_at": "1529007000",
        "incoming_entities": {
            "leads": [
                {
                    "name": "Покупка"
                }
            ],
            "contacts": [
                {
                    "name": "Федя",
                    "responsible_user_id": "1903006",
                    "custom_fields": [
                        {
                            "id": "382707",
                            "values": [
                                {
                                    "value": "+77777777777",
                                    "enum": "WORK"
                                }
                            ]
                        },
                        {
                            "id": "389993",
                            "values": [
                                {
                                    "value": "sfgh3gh233h3h3h3"
                                }
                            ]
                        },
                        {
                            "id": "389995",
                            "values": [
                                {
                                    "value": "Обратный звонок"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "incoming_lead_info": {
            "form_id": "329248",
            "form_page": "vdtest.ru",
            "ip": "127.0.0.1",
            "service_code": "QkKwSam8"
        }
    }
]

}

CONTACTDATA = {"add": [{"name": "Тест"}]}

LEADSDATA = {
"add": [{"name": "Тест", "custom_fields": [{"id": 385885, "values": [{"value": "web"}]}]}]}

# Инициализируем сессию
session = requests.Session()
response = session.get(url=AUTHURL)
# print('Инициализация сессии:')
# print(session.cookies.get_dict())
# print(response.status_code)

# Автроизация и проверка cookie
authorisation = session.post(url=AUTHURL, params=AUTHDATA)
# print('Авторизация и проверка сессии:')
# print(session.cookies.get_dict())
# print(authorisation.status_code)

# Выполняем тестовый запрос
getuserdata = session.get(url=TESTURL, params=POSTPARAMS)
# testdata = getuserdata.json()
# print('Тестовый запрос данных учётной записи:')
# print(testdata)
# print(getuserdata.status_code)

# Отправка формы
formpostdata = session.post(url=FORMURL, params=POSTPARAMS, json=JSONFORMDATA, headers=headers)

# print(formpostdata.status_code, formpostdata.reason)

# print('Дополнительная проверка сессии:')
# print(session.cookies.get_dict())

formpostdataj = formpostdata.json()
print('Ответ от API:')
print(formpostdataj)

contactsend = session.post(url=CONTACTURL, params=POSTPARAMS, json=CONTACTDATA, headers=headers)
formpostdatac = contactsend.json()
print(formpostdatac)

leadssend = session.post(url=LEADS, params=POSTPARAMS, json=LEADSDATA, headers=headers)
formpostdatal = leadssend.json()
print(formpostdatal)

JSON данные JSONFORMDATA не уходят, API возвращает ошибку 400. Грешил на саму API. НО проверил потом отправку других данных CONTACTDATA и LEADSDATA, API принимает. Попробовал отправку JSON данные JSONFORMDATA через PHP, API запрос принял и успешно обработал.

Вот никак не могу разобраться где у меня ошибка, массив JSONFORMDATA копирую из конструктора API, так же как и CONTACTDATA и LEADSDATA.

Думаю проблема в Python, может я что то не так делаю?

Вот ответы от API:

{'status': 'fail', 'error': 'Invalid data', 'error_code': 400, '_links': {'self': {'href': '/api/v2/incoming_leads/form?api_key=<здесь мой код API>&login=<здесь мой логин>', 'method': 'post'}}}
{'_links': {'self': {'href': '/api/v2/contacts', 'method': 'post'}}, '_embedded': {'items': [{'id': 12715121, 'request_id': 0, '_links': {'self': {'href': '/api/v2/contacts?id=12715121', 'method': 'get'}}}]}}
{'_links': {'self': {'href': '/api/v2/leads', 'method': 'post'}}, '_embedded': {'items': [{'id': 4844053, 'request_id': 0, '_links': {'self': {'href': '/api/v2/leads?id=4844053', 'method': 'get'}}}]}}

One Answer

Ваше предположение о том что API не принимает JSON неверно:

requests.post(url, json=JSONFORMDATA)

Answered by chip on November 15, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP