Получение Shippo::Exceptions::APIServerError: Невозможно прочитать данные, полученные обратно с сервера, при попытке новой отправки Shippo
В приложении Rails 4, использующем Shippo для доставки, я передаю следующий хеш в Shippo::Shipment.create(shippo_params) в соответствии с документами API:
{
:object_purpose => "PURCHASE",
:async => false,
:address_to => {
"object_purpose" => "PURCHASE",
"name" => "Test Guy",
"street1" => "5000 Test St",
"street2" => "",
"city" => "New Orleans",
"state" => "LA",
"zip" => "70115",
"country" => "US"
},
:address_from => {
"object_purpose" => "PURCHASE",
"company" => "MyCompany",
"street1" => "1305 Business Lane",
"street2" => "Suite O",
"city" => "New Orleans",
"state" => "LA",
"zip" => "70123",
"country" => "US",
"phone" => "+1 999 999 9999",
},
:parcel => {
"length" => 5,
"width" => 5,
"height" => 5,
"distance_unit" => :in,
"weight" => 1,
"mass_unit" => :lb
}
}
Я тогда получаю ошибку:
Shippo::Exceptions::APIServerError: Unable to read data received back from the server.
Если я использую следующий хэш params, как указано в API, он работает:
params = { object_purpose: 'PURCHASE',
async: false,
address_from: {
object_purpose: 'PURCHASE',
name: 'Mr Hippo',
company: 'Shippo',
street1: '215 Clayton St.',
street2: '',
city: 'San Francisco',
state: 'CA',
zip: '94117',
country: 'US',
phone: '+1 555 341 9393',
email: 'support@goshippo.com' },
address_to: {
object_purpose: 'PURCHASE',
name: 'Mrs Hippo"',
company: 'San Diego Zoo',
street1: '2920 Zoo Drive',
city: 'San Diego',
state: 'CA',
zip: '92101',
country: 'US',
phone: '+1 555 341 9393',
email: 'hippo@goshippo.com' },
parcel: {
length: 5,
width: 2,
height: 5,
distance_unit: :in,
weight: 2,
mass_unit: :lb }
}
Между ними есть тонкие различия: при вызове inspect у первого есть некоторые экранированные кавычки в ключах, а у другого нет, но я не знаю, почему это будет иметь значение (или почему это так).
Может кто-нибудь сказать мне, в чем разница и почему Shippo возвращает эту ошибку?
1 ответ
Решение
Есть две проблемы:
- В вашем запросе объекты Address не содержат все обязательные поля. Вот рабочий запрос с вашими данными - я добавил значения электронной почты для обоих адресов и значение имени для объекта address_from: https://gist.github.com/simonkreuz/2da33c20d4015b0bc64079078db62ddc
- Ruby-оболочка Shippo неправильно анализирует возвращенное сообщение об ошибке API. API фактически возвращает ошибку, указывающую, что объекты Address не содержат все обязательные поля. Я подал заявку в инженерную команду Shippo здесь https://github.com/goshippo/shippo-ruby-client/issues/22.