Описание API 2.1

Запрос
Ответ
Реализация

Запрос

Примеры запросов

Вы можете щелкнуть по ссылкам и посмотреть ответ сервера в читабельном виде.
Внимание! Обратите внимание, что ссылки должны иметь в начале протокол http://. Некоторые веб-браузеры принудительно подменяют http на https. В этом случае вы получите ошибку 403, т.к. API по https не работает. Создание шифрованного канала для API не имеет смысла, так как только существенно замедляет обмен данными и создаёт бесполезную нагрузку как на сервер, так и на клиента.
Пример 1. Минимальный запрос, указаны индексы почтовых отделений
Указаны почтовый индекс отправителя и получателя, вес - 1000 г, ценность - 0 рублей. Остальные параметры будут установлены по умолчанию.
http://api.postcalc.ru/?f=101000&t=190000&w=1000&v=0&key=test

Исчерпывающий список почтовых индексов, используемых Postcalc.RU в данный момент, можно: Примечание 1. В данном примере отсутствует переменная запроса p= (виды почтовых отправлений). Были подставленны значения по умолчанию - в текущей версии API это следующие 5 отправлений: ценная бандероль, ценная бандероль 1 класса, ценная посылка, ценная посылка 1 класса, курьерская доставка EMS. Настоятельно рекомендуется задавать список отправлений в явном виде, так как в последующих выпусках API переменная p= станет строго обязательной.

Примечание 2. Обратите внимание, что ценная бандероль и ценная бандероль 1 класса вернут ошибку расчета, так как их оценка не может быть менее 1 рубля.
Пример 2. Минимальный запрос, указаны ключи населенных пунктов
Минимальный запрос, вместо почтового индекса указаны ключи населенных пунктов на русском или английском языках, вес - 1000 г, ценность - 1000 рублей.
http://api.postcalc.ru/?f=Москва&t=Санкт-Петербург&w=1000&v=1000&key=test
http://api.postcalc.ru/?f=Сергиев_Посад,_50&t=Новокузнецк,_42&w=1000&v=1000&key=test
http://api.postcalc.ru/?f=Sergiyev_Posad,_50&t=Novokuznetsk,_42&w=1000&v=1000&key=test

Ключи населенных пунктов:
  • Для центров регионов состоят из названия населенного пункта: Москва, Самара, Благовещенск.
  • Для прочих населенных пунктов состоят из его названия и номера региона через запятую: Сергиев Посад, 50; Благовещенск, 2 (город в Башкортостане), Самара, 38 (село в Иркутской области); Самара, 79 (село в Еврейской АО).
  • Если в пределах одного региона находятся несколько населенных пунктов с одним названием, то через запятую добавляется район: Михайловка, 2, Абзелиловский; Михайловка, 2, Архангельский; Михайловка, 2, Бакалинский.
В ключе населенного пункта вместо номера региона можно указать его название (старый формат запроса), например: Сургут, Ханты-Мансийский-Югра автономный округ; Сергиев Посад, Московская область. Однако так делать не рекомендуется, так как это ухудшает читаемость и удлиняет строку запроса, кроме того, у регионов имеются альтернативные названия и они могут меняться.

Исчерпывающий список ключей населенных пунктов, используемых Postcalc.RU в данный момент, можно:
  • Посмотреть онлайн.
  • Скачать в формате дампа таблицы MySQL.
  • Скачать упрощенную версию в "старом" формате (вместо номера региона указано название) в виде текста или дампа MySQL для Postcalc Light (таблица postcalc_light_cities). "Старый" формат будет поддерживаться в течение 2021 года, далее поддержка не гарантируется.
Примечание. Если в переменной f= (или t=) указан не конкретный почтовый индекс, а населенный пункт, API самостоятельно ищет почтовые отделения, из которых/в которые можно отправить данный вид посылок. Это прежде всего относится к отправлениям для корпоративных клиентов, поскольку они принимаются и выдаются не во всех отделениях связи.
Например, если вы отправляете из московского отделения 105005 в отделение 190000 Посылку Онлайн, то запрос
http://api.postcalc.ru/?f=105005&t=190000&w=1000&v=1000&p=po&key=test
- вернет ошибку, так как в отделении 105005 приема Посылки Онлайн нет.
В то же время запрос
http://api.postcalc.ru/?f=Москва&t=190000&w=1000v=1000&p=po&key=test
- вернет корректный расчет, так как API самостоятельно найдет в пределах Москвы отделение связи, откуда можно отправить Посылку Онлайн.
Аналогично, запрос на доставку ЕКОМ в 190000 вернет ошибку, так как в 190000 ЕКОМ не выдается:
http://api.postcalc.ru/?f=105005&t=190000&w=1000&v=1000&p=ek&key=test
А запрос на доставку в Санкт-Петербург вернет правильный расчет:
http://api.postcalc.ru/?f=101000&t=Санкт-Петербург&w=1000v=1000&p=ek&key=test
Пример 3. Минимальный запрос на международную отправку
В параметре t= в этом случае задается название страны или код из 2 букв.
http://api.postcalc.ru/?f=Москва&t=DE&w=1000&v=0&key=test
http://api.postcalc.ru/?f=Москва&t=Германия&w=1000&v=0&key=test
Исчерпывающий список кодов и названий стран, используемых Postcalc.RU в данный момент, можно: Примечание. В предыдущих версиях API название страны задавалось в отдельной переменной c= в виде кода страны из 2 букв. Совместимость будет поддерживаться в течение 2021 года.
Пример 4. Расчет для физического лица без договора с Почтой России
http://api.postcalc.ru/?f=101000&t=190000&w=1000&v=1000&key=test&p=bv,pv,b1v,p1,em&co=0&d=now&ib=p&sv=fr,sm
Будут рассчитаны:
1. Отправления - ценная бандероль, посылка, ценная бандероль 1 класса, посылка 1 класса, EMS (p=bv,pv,b1v,p1,em).
2. Тарификация - для физического лица без договора с Почтой России (co=0). Это значит, что отправления для корпоративных клиентов не рассчитываются, даже если будут запрошены, а тарифы для ценной посылки, ценной посылки 1 класса и EMS Оптимальное будут несколько выше.
3. Расчет на сегодняшний день (d=now, по умолчанию, можно опустить).
4. База страховки - только объявленная ценность товарного вложения (ib=p, по умолчанию, можно опустить).
5. Дополнительные опции - хрупкое вложение и SMS получателю (sv=fr,sm).
Пример 5. Расчет для юридического лица или ИП, имеющего договор с Почтой России ("Корпоративный клиент").
http://api.postcalc.ru/?f=101000&t=191167&w=1000&v=1000&key=test&p=po,co,ek,emo,empt&co=1&d=10days&bo=m&sv=ko,op&pk=50&pr=25
Будут рассчитаны:
1. Отправления - Посылка Онлайн, Курьер Онлайн, ЕКОМ, EMS Оптимальное (p=po,co,ek,ekp,emo).
2. Тарификация - для юридического лица или ИП, имеющего договор с Почтой России ("Корпоративный клиент") (co=1). Доступны все тарифы, при этом тарифы для ценной посылки, посылки 1 класса и EMS Оптимальное несколько ниже, чем для физлиц.
3. Дата расчета: сегодня +10 дней (d=10days). Это полезная возможность для интернет-магазинов рассчитать тариф на предполагаемую дату отправки товара.
4. Дополнительные опции - проверка комплектности и опись вложения (sv=ko,op).
5. При расчете ЕКОМ и EMS использовать коробку размера "М" (bo=m).
6. Добавить на каждое отправление стоимость упаковки 50 рублей (pk=50).
7. Добавить 25 рублей на оформление заказа (pr=25).
Обратите внимание, что прием и выдача большинства отправлений для корпоративных клиентов возможен только в специальных отделениях связи. Список этих отделений можно посмотреть по ссылке.

Обязательные переменные запроса

Эти переменные обязательно должны присутствовать в запросе. Если их нет, либо они не проходят проверку - возвращается глобальная ошибка. Переменные v= и p= по состоянию на декабрь 2020 года имеют умолчания для упрощения перехода с предыдущих версий API, однако в течение 2021 года они также станут строго обязательными.
Мнемоника
(упрощает запоминание)
Переменная Описание
Key key Ключ доступа. Ключ необходимо получить в Личном кабинете. Возможно использование тестового ключа key=test (не более 50 запросов в сутки по московскому времени с одного IP).
Обязательное поле с 25 декабря 2019 года.
From f 2 варианта (распознаются автоматически):
1. 6-значный индекс отправителя.
Исчерпывающий список почтовых индексов, используемых Postcalc.RU в данный момент, можно: 2. Ключ населенного пункта отправителя на русском или английском языке. Кодировка - cp1251 или utf8, регистр букв значения не имеет, однако должны присутствовать все пробелы, скобки и дефисы.
Исчерпывающий список ключей населенных пунктов, используемых Postcalc.RU в данный момент, можно:
  • Посмотреть онлайн.
  • Скачать в формате дампа таблицы MySQL.
  • Скачать упрощенную версию в "старом" формате (вместо номера региона указано название) в виде текста или дампа MySQL для Postcalc Light (таблица postcalc_light_cities). "Старый" формат будет поддерживаться в течение 2021 года, далее поддержка не гарантируется.
Пробелы в запросах можно заменить на подчеркивание: Сергиев_Посад,_50.

Обновление баз данных происходит один раз в месяц.
To t 3 варианта (распознаются автоматически):
1. 6-значный индекс отправителя.
Исчерпывающий список почтовых индексов, используемых Postcalc.RU в данный момент, можно: 2. Ключ населенного пункта отправителя на русском или английском языке. Кодировка - cp1251 или utf8, регистр букв значения не имеет, однако должны присутствовать все пробелы, скобки и дефисы.
Исчерпывающий список ключей населенных пунктов, используемых Postcalc.RU в данный момент, можно:
  • Посмотреть онлайн.
  • Скачать в формате дампа таблицы MySQL.
  • Скачать упрощенную версию в "старом" формате (вместо номера региона указано название) в виде текста или дампа MySQL для Postcalc Light (таблица postcalc_light_cities). "Старый" формат будет поддерживаться в течение 2021 года, далее поддержка не гарантируется.
Пробелы в запросах можно заменить на подчеркивание: Сергиев_Посад,_50.

3. Код из 2 букв или название страны на русском или английском языке.
Список стран и кодов можно: Примечание. В предыдущих версиях API название страны задавалось в отдельной переменной c= в виде кода страны из 2 букв. Совместимость будет поддерживаться в течение 2021 года.

Обновление баз данных происходит один раз в месяц.
Weight w Вес отправления - число полных и неполных граммов (неполный грамм округляется в верхнюю сторону). Число от 1 до 31500. Рекомендуется проверять выход за допустимые пределы по таблице отправлений.
Valuation v Ценность отправления в рублях. Число от 0 до 100 000 для физических лиц и до 3 000 000 для корпоративных клиентов. Рекомендуется проверять выход за допустимые пределы по таблице отправлений.
Parcels p Список кодов отправлений через запятую. Для бесплатного доступа - не более 5 внутренних отправлений и не более 5 международных, для платного не более 8 внутренних и 8 международных. Коды международных отправлений начинаются с i.

Опциональное поле с 16 марта 2020 года, с 01 июня 2020 года - обязательное.

Полный список кодов можно: Внимание! Если переменная p= не задана, то в настоящее время это не вызовет ошибки, а по умолчанию в ответе будут:
  • Для расчетов внутренних отправлений - ценная бандероль, посылка, ценная бандероль 1 класса, посылка 1 класса, EMS (bv,pv,b1v,p1,em);
  • Для международных - мелкий пакет заказной авиа/наземный, посылка, авиапосылка, EMS с товарным вложением (isr,isar,ip,ipa,iem).
Это временная мера для облегчения перехода с предыдущих версий API; настоятельно рекомендуется задавать p= в явном виде.

Другие переменные запроса

У этих переменных есть умолчания, поэтому их можно опустить в запросе. Умолчания следующие:
  1. Корпоративный клиент, имеющий договор с Почтой России (co=1).
  2. Формат выдачи HTML (o=html).
  3. Отправление нельзя разделить на несколько, при превышении веса выдается ошибка (pa=0).
  4. Набор символов UTF-8 (cs=utf-8).
  5. Дата расчета - сегодня (d=now).
  6. НДС включен (vt=1).
  7. Коробка для ЕКОМ и EMS - размер "S" (bo=s).
  8. Дополнительных услуг нет (sv - пустая строка).
  9. Наценка за обработку заказа - нет (pr=0).
  10. Наценка за упаковку - нет (pk=0).
  11. База страховки - только товарное вложение (ib=p).
  12. Ставка наложенного платежа для корп. клиентов - нет (cod=0).
  13. Минимальная сумма комиссии наложенного платежа для корп. клиентов - нет (codm=0).
  14. Язык ответа - русский (la=ru).
  15. Валюта ответа - рубли (cu=rub).
Мнемоника
(упрощает запоминание)
Переменная По умолчанию Описание
Output o html Формат выдачи данных. Поддерживаются следующие форматы: php, json, wddx, html, arr, plain. Регистр букв значения не имеет.
1. HTML. Страница html в читабельном виде, кодировка определяется переменной cs, удобно для просмотра ответа сервера прямо из браузера. По умолчанию - UTF-8.
2. PHP. Массив PHP, обработанный функцией serialize(). Кодировка определяется переменной cs, по умолчанию - UTF-8. Удобно для использования напрямую в скриптах PHP, для чего на стороне клиента следует использовать функцию unserialize() - см. пример в конце страницы.
3. ARR. Массив PHP, выведенный функцией var_export(). Кодировка определяется переменной cs, удобно для контроля ответов сервера из браузера. По умолчанию - UTF-8.
4. WDDX (разновидность xml) - массив PHP, обработанный функцией wddx_serialize_value(). Кодировка UTF-8.
5. JSON - массив PHP, обработанный функцией json_encode(). Кодировка UTF-8 + JavaScript Object Notation (JSON). Удобно для использования в JavaScript. Кодировка UTF-8.
Для выдачи в формате JSONP просто добавьте в запрос переменную callback=[Название_функции_обратного_вызова].
6. PLAIN - простой текст; это единственный вариант ответа, который не сжимается gzip. Каждая строчка имеет 3 поля, разделенных пробелом: код отправления, доставка, срок доставки. Формат экспериментальный, может измениться в любой момент.
Callback callback нет Название функции обратного вызова JavaScript, применяется в сочетании с форматом o=json.
Если сервер обнаруживает такую переменную, то возвращает ответ в формате JSONP с заголовком content-type: application/javascript.
В названии функции допускаются: латиница в любом регистре, цифры, знак подчеркивания.
Charset cs utf-8 Кодировка для выходных форматов php, arr, html. В данный момент распознаются utf-8 и windows-1251 (можно задавать как cp1251).
По умолчанию - utf-8.
Внимание! Для форматов json и wddx кодировка - всегда UTF-8! (ограничение функций php)
Date d now Дата, на которую нужно рассчитать отправку, в любом формате, который распознается функцией PHP strtotime(). В частности, распознаются такие варианты: 2021-01-30 (предпочтительный вариант), 30.01.2021, 30-01-2021, now, +10days. По умолчанию - текущий момент времени (now).
VAT vt 1 Если 1, НДС включен в тариф, если 0 - НДС вычитается из тарифа.
Внимание! Следует различать вычитание НДС для целей бухгалтерского учета (возможно для всех отправлений) и отправку по более низким тарифам без НДС (возможно только при оплате марками письменных отправлений).
Corporative co 1 Если 1, расчет идет по тарифам для клиентов, имеющих договор с Почтой России ("корпоративные клиенты").
Eсли 0 - расчет по тарифам для "обычных" клиентов: физических лиц и индивидуальных предпринимателей без договора, при этом не рассчитываются отправления для корпоративных клиентов: Посылка и Курьер Онлайн, ЕКОМ, Бизнес-Курьер, Бизнес-Курьер Экспресс, EMS PT .
По состоянию на февраль 2021 года касается:
  • Расчета ценных посылок.
  • Расчета "EMS Оптимальное".
  • Некоторых дополнительных услуг.
Для "корпоративных клиентов" тарифы несколько ниже.
С 23 марта 2020 года по умолчанию - 1, до этого - 0.
Box bo s Тип коробки, определяет т.н. объемный вес. Если объемный вес больше реального, то при расчете тарифа применяется именно он.
Касается только расчета ЕКОМ и внутренного отправления EMS.
Значения: s (коробка "S", 260*170*80 мм), m (коробка "M", 300*200*150 мм), l (коробка "L", 400*270*180 мм), xl (коробка "XL", 530*360*220 мм), ng (негабаритная коробка, сумма сторон не более 1400 мм, одна сторона не более 600 мм).
Services sv пустая строка Опции отправки и дополнительные услуги . Список кодов через запятую, например: sv=sm,ko,cod.
КодУслуга
frХрупкая
ngНегабаритная
opПроверка соответствия вложения описи
koПроверка комплектности
ppПредпочтовая подготовка
smSMS получателю
sm2SMS отправителю
codОплата в момент доставки (COD)
uvПростое уведомление о вручении
uvrЗаказное уведомление о вручении
uveЭлектронное уведомление о вручении
iuvМеждународное уведомление о вручении
Примечание 1. Уведомление о вручении может быть только одно - либо простое, либо заказное, либо электронное. Если в запросе заданы несколько кодов уведомлений (uv, uvr, uve), то рассчитывается первый код, а остальные коды игнорируются.
Примечание 2. Не все виды отправлений имеют все виды услуг и опций.
  • Хрупкая и негабаритная - только для внутренних и международных посылок.
  • Проверка соответствия вложения описи - только для ценных внутренних отправлений: ценные письма, ценные бандероли, ценные письма и бандероли 1 класса, посылки, ЕMS, EMS Оптимальное, Бизнес-Курьер, Бизнес-Курьер Экспресс.
  • Проверка комплектности - ценная посылка, EMS Оптимальное, Посылка и Курьер Онлайн
  • Оплата в момент доставки - ценная посылка, EMS, EMS Оптимальное, ценная бандероль и посылка 1 класса, Посылка и Курьер Онлайн.
Примечание 3. Стоимость SMS для клиентов - физических лиц рассчитывается, как стоимость при единичном приеме (10 рублей с НДС), а для корпоративных клиентов - как при партионном приеме (7 рублей с НДС). Стоимость SMS для отправлений 1 класса, EMS Оптимальное, Бизнес-Курьер уже включена в тариф, т.е. они бесплатны. Для писем и бандеролей код sm - это "СМС-уведомление о вручении", код sm2 - это "СМС-уведомление о прибытии в отделение".
Partible pa 0 Отправление является делимым (можно распределить на несколько).
Если 0 (по умолчанию), используется логика официальных калькуляторов Почты России: отправление может быть только одно, при превышении допустимого веса и/или ценности расчет не производится.
Если 1, используется логика Postcalc.RU: отправление делится на несколько, контроль ценности не производится.
Например, для веса 20 кг при pa=0 расчет бандероли не производится, при pa=1 возвращается расчет для 4-х бандеролей весом по 5 кг каждая.
Аналогично: для ценности 100 тыс. рублей при pa=0 расчет ценной бандероли и EMS не производится (ограничение 10 тыс. и 50 тыс. рублей соответственно), при pa=1 - производится
Внимание! Для внутренних писем ограничение по весу действует в любом случае (так было в расчетах Postcalc.RU с самого начала): простое, заказное, ценное письмо рассчитываются при весе не более 100 г, заказное и ценное письмо 1 класса - не более 500 г.
ProcessingFee pr 0 Пользовательская наценка за обработку заказа в рублях. Добавляется к ключу Доставка (Total) и к ключу ОценкаПолная (Valuation).
PackingFee pk 0 Пользовательская наценка за упаковку одного отправления в рублях. Добавляется к ключу Доставка (Total) и к ключу ОценкаПолная (Valuation) для каждой единицы отправления. Отправлений может быть несколько, если ключ pa=1.
IBase ib p База для расчета страховки (только при оценке товарного вложения больше 0!).
Если ib=p или Partial, то страхуется только товарное вложение. Например, посылка с оценкой 1000 рублей будет застрахована на 1000 * 4% = 40 рублей независимо от стоимости доставки.
В случае пропажи отправления почта возместит только стоимость товара, а расходы на доставку и страховку придется списать в убыток.
Кроме того, при отправке наложенным платежом возникает проблема расчета суммы, которую адресат должен выплатить при получении отправления: ведь эта сумма больше оценки товара и должна покрывать расходы интернет-магазина на доставку и страховку
Если ib=f или Full, базой страховки будет Оценка Товара + Тариф + Страховка, и в случае пропажи отправления почта полностью возместит ущерб. Это самый оптимальный вариант для отправки наложенным платежом, а конечная сумма, которую должен заплатить адресат - это столбец "Ценность" на веб-странице или поле ОценкаПолная в ответе по API.
Ценность вычисляется по формуле: Ценность = Тариф + Оценка вложения + Страховка
Размер страхового сбора вычисляется по формуле: Страховка = ( Тариф + Оценка ) * СтавкаСбора / (1 - СтавкаСбора)
С 01 июня 2020 года - p, до этого - f.
COD cod 0 Ставка комиссии наложенного платежа для корпоративных клиентов Почты России, подписавших договор на специальную комиссию (в процентах). От 0.2 до 2%.
CODMinimal codm 0 Минимальный размер комиссии наложенного платежа для корпоративных клиентов Почты России, подписавших договор на специальную комиссию (в рублях).
Language la ru Новый параметр, только в версии 2.1+.
Язык ответа. Если en, то в ответе применяется английский язык. Входные данные на английском языке (ключи населенных пунктов, названия стран) интерпретируются корректно в любом случае, вне зависимости от этого параметра.
Currency cu rub Новый параметр, только в версии 2.1+.
Валюта ответа. Если отличается от rub, то рубли в ответе пересчитываются в соответствующую валюту по курсу Центробанка России. Входные данные (ценность, переменная v=) в любом случае задаются в рублях, вне зависимости от этого параметра.
Software sw нет Необязательный идентификатор плагина. Произвольная строка латиницей (не более 30 символов), подчеркивание, номер версии (например, MyBestPlugin_1.01).
Позволяет разработчикам плагинов получить доступ к списку доменов, которые используют их плагин, статистике обращений, ошибкам и журналам запросов пользователей в реальном времени. При этом никакая личная информация пользователей (включая ключ домена) разработчикам недоступна.
Для доступа к этой информации разработчикам следует написать в произвольной форме в техподдержку Postcalc.RU.
нет size нет Размер отправления в сантиметрах. Указывается как три целых числа, разделенные знаком “x”, например, 100x50x25. По состоянию на апрель 2025 года, учитывается для всех видов посылок, кроме Бизнес-Курьер Экспресс и EMS Оптимальное: Ценная посылка, Посылка 1 класс, Курьерская доставка EMS, Посылка Онлайн, Курьер Онлайн, ЕКОМ Маркетплейс, Бизнес-Курьер, EMS PT. Не учитывается для писем и бандеролей.
Если указан объем (переменная volume) и это не ноль, размеры отправления (переменная size) игнорируются!
нет volume нет Объем отправления в кубических метрах (метрах!). Если указан объем (переменная volume) и это не ноль, размеры отправления (переменная size) игнорируются! Десятичная дробь, разделитель - точка. Например: 0.100, 0.341, 2.43. Не более 25.0 куб.метров. По состоянию на апрель 2025 года, учитывается для всех видов посылок, кроме Бизнес-Курьер Экспресс и EMS Оптимальное: Ценная посылка, Посылка 1 класс, Курьерская доставка EMS, Посылка Онлайн, Курьер Онлайн, ЕКОМ Маркетплейс, Бизнес-Курьер, EMS PT. Не учитывается для писем и бандеролей.

Отправления: коды, ограничения по весу и ценности

Ответ

Декомпрессия ответа

Ответ сервера Postcalc.RU всегда архивируется в gzip (за исключением экспериментального формата plain). Для декомпрессии добавьте строчку:
$Request = 'http://api.postcalc.ru/?'.$QueryString;
$Response = file_get_contents($Request) or die('Can not connect!');
// Добавляем распаковку:
if ( substr($Response,0,3) == "\x1f\x8b\x08" ) $Response=gzinflate(substr($Response,10,-8));
Внимание! На платформе Битрикс наблюдается следующее нестандартное поведение: функция gzinflate не блокируется, однако после распаковки поток усекается на несколько байт.
Это связано с установкой PHP mbstring.func_overload. Поэтому проводите распаковку так:
if (substr($Response, 0, 3) ==  "\x1f\x8b\x08") {
  $funcOverload = ini_get("mbstring.func_overload");
  if (in_array($funcOverload, array(2, 3, 6, 7,))) {
    $Response = gzinflate( substr($Response, 10, -1) );
  } else {
    $Response = gzinflate( substr($Response, 10, -8) );
  }    
}
Если это не поможет, замените полностью вызов file_get_contents() с последующей декомпрессией функцией gzinflate() на аналогичный вызов fopen() с применением обработчиков компрессии:
$Request = 'http://api.postcalc.ru/?'.$QueryString;
$fp = fopen("compress.zlib://$Request", "rb");
$Response = stream_get_contents($fp);
fclose($fp);

Внимание! Для разархивации на платформе 1C можно применить вызов из командной строки внешней программы:
ПараметрыGET = "?f=101000&t=190000&w=1000&c=RU&o=wddx&key=test" + 
    "&w=" + Формат(Вес,"ЧГ=0") + 
    "&v=" + Формат(Окр(Ценность),"ЧГ=0") +
    "&t=" + Индекс;
 

    ИмяФайлаАрхива = КаталогВременныхФайлов() + "postcalc_new.zip";
    ХТМЛ = Новый HTTPСоединение("api.postcalc.ru");  
    ХТМЛ.Получить(ПараметрыGET,ИмяФайлаАрхива);
	СтрокаКоманды = """C:\Program Files\WinRar\winrar.exe"" e -y """ +  ИмяФайлаАрхива + """ """ +  КаталогВременныхФайлов() + """";
	Шелл=Новый COMОбъект("Wscript.Shell");
	Шелл.run(СтрокаКоманды,1,True);
	ИмяФайлаОтвета =  КаталогВременныхФайлов() + "postcalc_new";
А это полное решение другого программиста: 1c_postcalc_request.txt
Очень признателен авторам, которые поделились своими решениями для платформы 1С!

Глобальные ошибки и предупреждения

Ошибки и предупреждения при расчете отправления

Глобальные переменные ответа

Массив "Отправления" ("Shipments")

Реализация

Полный рабочий пример кода

Пример использует библиотеку php-curl, которую настоятельно рекомендуется использовать в разработке, так как функция PHP file_get_contents() имеет ряд архитектурных недостатков.

Полный текст примера можно скачать здесь .

В целом настоятельно рекомендуется использовать бесплатную библиотеку PostcalcLight, которая дополнительно проверяет аргументы на правильность и предлагает веб-интерфейс.

<?php
/*
Пример обращения к API сервиса расчета почтовых тарифов Postcalc.RU.
Реализовано кэширование ответов.
Кэшировать можно в любом каталоге, который доступен для записи веб-сервером.
Пример требует библиотеки php-curl.
*/

// === ИСХОДНЫЕ ДАННЫЕ
// = Данные запроса
$From      '101000';
$To        '190000';
$Weight    1000;
$Valuation 500;
$Country   'RU';
$Charset   'utf-8';    // Набор символов.
$Key       'test';     // Тестовый ключ, не более 50 запросов в сутки. Рабочий ключ необходимо получить в личном кабинете.
$Parcels   'bv,pv,p1'// Запросить расчеты по ценной бандероли, ценной посылке, ценной посылке 1-го класса.
$Corp      0;          // Расчеты для физ. лиц, не имеющих договора с Почтой России
$Services  'sm,uv';    // Опции: пакет SMS получателю и простое уведомление
$Partible  0;          // Неделимое отправление (товар нельзя отправить в нескольких посылках). 

// = Данные для подключения
$PostcalcServer 'api.postcalc.ru';  // Рабочий сервер Postcalc.RU
$Timeout 3// Таймаут соединения

// = Данные для кэширования
$CacheDir sys_get_temp_dir(); // Каталог для хранения кэшированных данных.
$CacheValid 600// Кэш действителен в течение 600 сек.

// === СОБСТВЕННО РАСЧЕТ 
header("Content-Type: text/html; charset=$Charset");

// Формируем строку запроса со всеми необходимыми переменными
// Функция rawurlencode обязательна, если в качестве $From и $To выступают названия населенных пунктов. 
$QueryString  'f='  .rawurlencode$From );
$QueryString .= '&t=' .rawurlencode$To );
$QueryString .= "&w=$Weight&v=$Valuation&c=RU&o=php&cs=$Charset&key=$Key";
$QueryString .= "&p=$Parcels&co=$Corp&sv=$Services&pa=$Partible";

// Очищаем кэш от устарелых данных - все файлы старше $CacheValid сек.
$TimestampNow time();
foreach ( 
glob("$CacheDir/postcalc_*.txt") as $CacheFile 
    if ( (
$TimestampNow filemtime($CacheFile) )  > $CacheValid unlink$CacheFile );

// Проверяем в кэше, не было ли уже такого запроса
$CacheFile $CacheDir'/postcalc_' .md5($QueryString) .'.txt';

if ( 
file_exists$CacheFile ) ) {
    echo 
"Найдено в кэше!<br>\n";
    
$arrResponse unserializefile_get_contents($CacheFile) );
} else {
    
// Инициализируем curl
    
if ( function_exists('curl_init') ) {
        
$curl curl_init();
        
curl_setopt_array($curl
            array( 
                
CURLOPT_RETURNTRANSFER => 1,
                
CURLOPT_CONNECTTIMEOUT => $Timeout,
                
CURLOPT_HTTPHEADER => array('Connection: close''Accept-Encoding: gzip'),
                
CURLOPT_USERAGENT => phpversion()
            )
        );
    } else {
        die(
"Не установлен пакет php-curl!");
    }
    
    
// Соединяемся с рабочим сервером
    
curl_setopt($curlCURLOPT_URL"http://$PostcalcServer/?$QueryString");
    if ( !
$Response curl_exec($curl) ) 
           die(
"Не удалось соединиться с $PostcalcServer в течение $Timeout сек.!");
       
    
    
curl_close($curl);
    
    
// Разархивируем ответ
    
if ( substr($Response,0,3) == "\x1f\x8b\x08" )  $Response=gzinflate(substr($Response,10,-8));
    
    
// Переводим ответ в массив PHP
    
$arrResponse unserialize($Response);
    
    
// Обработка ошибки
    
if ( $arrResponse['Status'] != 'OK' ) die("Сервер вернул ошибку: $arrResponse[Status]!");

    
// Если ошибки не было, сохраняем ответ в кэше
    
file_put_contents($CacheFile$Response);

}

// === ВЫВОД РЕЗУЛЬТАТОВ

// Выводим значение тарифа для ценной посылки
echo 'Тариф на ценную посылку: '$arrResponse['Отправления']['ЦеннаяПосылка']['Тариф'];
//  Выводим в цикле стоимость доставки для всех доступных отправлений:
echo "\n<pre>Полная стоимость доставки\n";
foreach  ( 
$arrResponse['Отправления'] as $parcel )
                          echo 
"$parcel[Название]\t$parcel[Доставка]\n";

echo 
"</pre>\n";

Библиотека Postcalc Light

Postcalc Light - это библиотека, простой веб-клиент на PHP с использованием jQuery и базы данных. Вы можете скачать их и опробовать в работе онлайн по ссылке.

Плагины

Список плагинов находится по ссылке. Также рекомендуется воспользоваться поисковиками.