Здравствуйте, появилось время - решил еще повозится с кодом. Очень интересно, но Ваш код выдает такую-же информацию как у Вас в вопросе, хотя файл с кодировкой UTF-8 пробовал и UTF-8 c BOM - результат такой же. Точно в коде вопроса больше ничего не меняли? А все работает с вот таким кодом (переменные $companyID, $kassir и т.д. заданы):
$chek=array(
CURLOPT_URL => "https://api.sbis.ru/retail/sale/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_COOKIE => 'sid=0079a2fd-00f8b20c-eedb-4166bdb4075fbcc8',
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{
\"companyID\": \"$companyID\",
\"cashierFIO\": \"$kassir\",
\"operationType\": \"1\",
\"cashSum\": \"$summ\",
\"bankSum\": null,
\"internetSum\": null,
\"accountSum\": null,
\"postpaySum\": null,
\"prepaySum\": null,
\"vatNone\": null,
\"vatSum0\": \"$summ\",
\"vatSum10\": null,
\"vatSum20\": null,
\"vatSum110\": null,
\"vatSum120\": null,
\"allowRetailPayed\": \"1\",
\"nomenclatures\": [
{
\"nameNomenclature\": \"Хомут\",
\"barcodeNomenclature\": \"\",
\"priceNomenclature\": \"10\",
\"quantityNomenclature\": \"1\",
\"measureNomenclature\": \"ШТ\",
\"kindNomenclature\": \"Т\",
\"totalPriceNomenclature\": \"10\",
\"taxRateNomenclature\": \"0\",
\"totalVat\": \"0\" },
{
\"nameNomenclature\": \"Хомут 1\",
\"barcodeNomenclature\": \"\",
\"priceNomenclature\": \"1\",
\"quantityNomenclature\": \"1\",
\"measureNomenclature\": \"ШТ\",
\"kindNomenclature\": \"Т\",
\"totalPriceNomenclature\": \"1\",
\"taxRateNomenclature\": \"0\",
\"totalVat\": \"0\" }
],
\"customerEmail\": null,
\"customerINN\": null,
\"customerExtId\": null,
\"taxSystem\": \"8\",
\"sendEmail\": \"$email\",
\"sendPhone\": null,
\"propName\": null,
\"propVal\": null,
\"comment\": \"\",
\"payMethod\": \"4\"}",
CURLOPT_HTTPHEADER => array(
"X-SBISAccessToken: ***токен***"
)
);
curl_setopt_array($curl, $chek);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Но возникла другая проблема: не могу сгенерировать массив CURLOPT_POSTFIELDS с \" и [], а без них ошибки! Пробовал генерировать массив ($tovar) и потом его присваивать \"nomenclatures\": $tovar, но сразу ошибки сыпятся.
Ответили мне! Ваше предположение правильное! Как они сказали что companyID это ID кассы! То есть у нас их 4 - и ID дали 4 шт. Но все равно не работает пишет ошибку:
"{"jsonrpc":"2.0","error":{"code":-32000,"message":"An internal server error occurred.\nPlease try again later.","details":"Возникла ошибка при обработке запроса \r\nПодробная информация: Внутренняя ошибка сервера.\nПопробуйте выполнить операцию позднее. [-1] (ОПИСАНИЕ: Ошибка при вызове обработчика \"RetailImport.CreateSale\" события \"capi.sale.create\": Не правильный формат параметров.)","type":"warning","data":{"classid":"{afd28339-dc44-4ad9-96dc-55a9789c743a}","error_code":-1,"addinfo":null}},"id":null}"
Я так понимаю, что от них вразумительного ответа не получу почему ошибка, похоже придется методом научного тыка ошибку искать... У Вас такой ошибки не было?
Спасибо что отвечаете... Я тоже так думал, что товар, который числиться на остатке в СБИС с маркировкой при продаже автоматом маркировку подтягивает (задавал им этот вопрос, но в ответ одни обещания что разберутся и ответят - создали запрос от моего имени, вот жду теперь официального ответа!), но вроде должно быть обязательное подтверждение маркировки товара, и к сожалению эту систему скоро планируют поэтапно ввести для всех видов товара... Еще им один ребус задал, где в чеке я указываю на какую кассу отправить чек и какой кассе изменить ФН (у меня их 4 шт.!)! Зависли, по имени кассира - ответ "НЕ ЗНАЮ"? Опять мы вам перезвоним...
СПАСИБО сразу не заменил Вашего ответа! Получилось sid и token, но теперь следующий вопрос...
externalId String, обязательный Уникальный идентификатор платежа 4b3d1874-b47c-11ea
это написано на странице СБИВ в табличке , но в примере его нет, и у Вас его нет! А параметр написан обязательный! Позвонил в СБИС, ответить не смогли - разбираются обещали перезвонить, и еще по моему запросу разбираются с регистрацией маркированного товара, почему нет данных в этом запросе... Будит информация - отпишусь! У Вас работает без externalId? Или вы его где-то получили...
А понять что это Ваша организация они отвечали что за это как раз отвечает "sid" и "token". А у Вас companyID случайно нет такой? Если нет в понедельник буду их пытать заново...
Я сам их долбил целый час что это не так, но они все где-то консультировались и тыкали мне что цитирую:
"Чтобы выполнить аутентификацию, используйте логин и пароль от личного кабинета СБИС и параметр «app_client_id». Параметр всегда имеет постоянное значение:
«1025293145607151» — id организации;
«2248309793600149» — id арендодателя/франшизы."
Это указано на странице Аутентификация (https://sbis.ru/help/ofd/api/auth)!
Но я пока застрял на "Аутентификация веб-сервиса в СБИС через API" и до чека не дошел. Не получается запрос на получение «sid» и «token» сделать! Все варианты с ошибками.... Скиньте, пожалуйста, свой php код на Аутентификация...
Я их ДОБИЛ! но самое интересное что они мне про id ответили: эта константа и для всех клиентов она одинаковая, типа это ID СБИСА и она 1025293145607151 для ВСЕХ!
Извините за нескромность, но php код можете скинуть для получения "sid" и "token". С Curl сильно не знаком, не знаю куда втыкнуть Content-Type: application/json
А POST запрос для получения «sid» и «token» создавался 1 раз, а потом во все остальные запросы вставлялся результат, или в каждой сессии надо этот запрос создавать?
Здравствуйте, подскажите ответ на 2 вопроса:
1. - Окончательный рабочий код все таки как в вопросе?
2. - при регистрации чека печать этого чека происходит? Касса сейчас печатает из Сбис программы.
Цель хочу попробовать к 1С 7.7 привинтить... Не могу пока понять может ли 1С7.7 POST запрос отправлять. Но если не может, то придется отправлять на свой сайт GET запрос (1С7.7 это умеет), там формировать POST запрос и отправлять его уже в Сбис.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
$chek=array(
CURLOPT_URL => "https://api.sbis.ru/retail/sale/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_COOKIE => 'sid=0079a2fd-00f8b20c-eedb-4166bdb4075fbcc8',
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{
\"companyID\": \"$companyID\",
\"cashierFIO\": \"$kassir\",
\"operationType\": \"1\",
\"cashSum\": \"$summ\",
\"bankSum\": null,
\"internetSum\": null,
\"accountSum\": null,
\"postpaySum\": null,
\"prepaySum\": null,
\"vatNone\": null,
\"vatSum0\": \"$summ\",
\"vatSum10\": null,
\"vatSum20\": null,
\"vatSum110\": null,
\"vatSum120\": null,
\"allowRetailPayed\": \"1\",
\"nomenclatures\": [
{
\"nameNomenclature\": \"Хомут\",
\"barcodeNomenclature\": \"\",
\"priceNomenclature\": \"10\",
\"quantityNomenclature\": \"1\",
\"measureNomenclature\": \"ШТ\",
\"kindNomenclature\": \"Т\",
\"totalPriceNomenclature\": \"10\",
\"taxRateNomenclature\": \"0\",
\"totalVat\": \"0\" },
{
\"nameNomenclature\": \"Хомут 1\",
\"barcodeNomenclature\": \"\",
\"priceNomenclature\": \"1\",
\"quantityNomenclature\": \"1\",
\"measureNomenclature\": \"ШТ\",
\"kindNomenclature\": \"Т\",
\"totalPriceNomenclature\": \"1\",
\"taxRateNomenclature\": \"0\",
\"totalVat\": \"0\" }
],
\"customerEmail\": null,
\"customerINN\": null,
\"customerExtId\": null,
\"taxSystem\": \"8\",
\"sendEmail\": \"$email\",
\"sendPhone\": null,
\"propName\": null,
\"propVal\": null,
\"comment\": \"\",
\"payMethod\": \"4\"}",
CURLOPT_HTTPHEADER => array(
"X-SBISAccessToken: ***токен***"
)
);
curl_setopt_array($curl, $chek);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Но возникла другая проблема: не могу сгенерировать массив CURLOPT_POSTFIELDS с \" и [], а без них ошибки! Пробовал генерировать массив ($tovar) и потом его присваивать \"nomenclatures\": $tovar, но сразу ошибки сыпятся.