retailcrm / api-client-python

Python client for retailCRM API
http://www.retailcrm.ru
MIT License
10 stars 20 forks source link

Ошибка при обновлении данных платежа заказа. #14

Closed Alkalit closed 4 years ago

Alkalit commented 4 years ago

Ах, 10 часов вечера. Чем бы заняться? Посмотреть кино? Сходить с девушкой в ресторан? Нет, это для слабых духом. Для тех в ком, как было сказано в одном известном советском фильме, пропал дух авантюризма. Настоящие мужики выискивают баги в клиентах коммерчиских црм.

Короткий пример сессии из ipython:

client = retailcrm.v5(settings.RETAIL_CRM['crm_url'], settings.RETAIL_CRM['api_key']) 
data = {'externalId': '53184', 'status': 'paid'} 
resp = client.order_payment_edit(data) 
print(resp.get_response())   
# {'success': False, 'errorMsg': 'Payment not found'}

После примерно часа биения головой об стену и вдумчивого чтения доков этого "прекрасно спроектированного" апи, а именн строчки "Изменение payment[externalId] доступно только при обращении к платежу по id (by=id), в противном случае (by=externalId) переданное значение будет проигнорировано. "

решил заглянуть в исходники клиента. Годы опыта не подвели: https://github.com/retailcrm/api-client-python/blob/d4bed324d3efed4779b561cf823b36d0e32b227f/retailcrm/versions/v5.py#L491

client.parameters  # {'payment': '{"externalId": "53184", "status": "paid"}'}
client.parameters['by'] = 'externalId' 
resp = client.post('/orders/payments/' + str(order.pk) + '/edit') 
resp.get_response()  # {'success': True, 'id': 291}
gwinn commented 4 years ago

Да, действительно есть недочет. Только в данном случае "Изменение payment[externalId] доступно только при обращении к платежу по id (by=id), в противном случае (by=externalId) переданное значение будет проигнорировано." говорит о том, что есть возможность отредактировать поле externalId.

В самом клиенте не было учтено что для метода редактирования оплаты по дефолту ожидается id. Фикс выкатим в течение дня.