Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Отправка предложения об аннулировании возвращает Код ответа 400 - MessagePatchToPost.RevocationRequests[0]: Data at the root level is invalid. Line 1, position 1. #1092

Open
yu-pankova opened this issue Aug 29, 2024 · 9 comments

Comments

@yu-pankova
Copy link

Метод /V2/GenerateRevocationRequestXml вернул мне сгенерированный файл. Я его подписала.
Теперь я отправляю /V3/PostMessagePatch запрос для отправки предложения

Тело выглядит так
{"BoxId":"b1d40265-a64f-4eb6-a7f4-f9976baf6b10","MessageId":"a59afd35-f95f-43ff-9a4e-d1f28e785ad8","RevocationRequests":[{"ParentEntityId":"ec444088-3cf3-4af0-be01-a74b1cce7c44","SignedContent":{"Content":"***V3AYJKoZIhvcNAQcCoIIVzTCCFckCAQExDjAMBggqhQMHAQECAgUAMAsGCSqG\r\nSIb3DQEHAaCCEcgwggfsMIIHmaADAgECAgpCaMV6AAAAAAgzMAoGCCqFAwcBAQMC\r\nMIIBOzEhMB8GCSqGSIb3DQEJARYSZGl0QGRpZ2l0YWwuZ292LnJ1MQswCQYDVQQG\r\nEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQ\r\nvtGB0LrQstCwMVMwUQYDVQQJDErQn9GA0LXRgdC90LXQvdGB0LrQsNGPINC90LDQ\r\nsdC10YDQtdC20L3QsNGPLCDQtNC+0LwgMTAsINGB0YLRgNC+0LXQvdC40LUgMjEm\r\nMCQGA1UECgwd0JzQuNC90YbQuNGE0YDRiyDQoNC+0YHRgdC40LgxGDAWBgUqhQNk\r\nARINMTA0NzcwMjAyNjcwMTEVMBMGBSqFA2QEEgo3NzEwNDc0Mzc1MSYwJAYDVQQD\r\nDB3QnNC40L3RhtC40YTRgNGLINCg0L7RgdGB0LjQuDAeFw0yMzA3MjExMzEyNDRa\r\nFw0zODA3MjExMzEyNDRaMIIBPjEVMBMGBSqFA2QEEgo3NzA3MzI5MTUyMRwwGgYJ\r\nKoZIhvcNAQkBFg11Y0B0YXguZ292LnJ1MRgwFgYFKoUDZAESDTEwNDc3MDcwMzA1\r\nMTMxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNV\r\nBAcMENCzLiDQnNC+0YHQutCy0LAxKTAnBgNVBAkMINGD0LsuINCd0LXQs9C70LjQ\r\nvdC90LDRjywg0LQuIDIzMT8wPQYDVQQKDDbQpNC10LTQtdGA0LDQu9GM0L3QsNGP\r\nINC90LDQu9C+0LPQvtCy0LDRjyDRgdC70YPQttCx0LAxPzA9BgNVBAMMNtCk0LXQ\r\ntNC10YDQsNC70YzQvdCw0Y8g0L3QsNC70L7Qs9C+0LLQsNGPINGB0LvRg9C20LHQ\r\nsDBmMB8GCCqFAwcBAQEBMBMGByqFAwICIwEGCCqFAwcBAQICA0MABEAIfwIw8yrk\r\n0cK1WTAx5kVJQSt39rXxGbqNhE7VcVsFJPWzeLDjogZ6+av7chTCmF2pxkyefABT\r\nQEwG3YPUNgAro4IEbzCCBGswCwYDVR0PBAQDAgGGMB0GA1UdDgQWBBTRVvs4LExV\r\nrX6zrgrGZ0lXf4fhFjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdIAQoMCYwCAYG\r\nKoUDZHEBMAgGBiqFA2RxAjAGBgRVHSAAMAgGBiqFA2RxAzBzBgUqhQNkbwRqDGjQ\r\nn9CQ0JrQnCAi0JrRgNC40L/RgtC+0J/RgNC+IEhTTSIg0LLQtdGA0YHQuNC4IDIu\r\nMCAo0LrQvtC80L/Qu9C10LrRgtCw0YbQuNGPIDEpICjQuNGB0L/QvtC70L3QtdC9\r\n0LjQtSAxKTAUBgkrBgEEAYI3FAIEBwwFU3ViQ0EwEgYJKwYBBAGCNxUBBAUCAwIA\r\nAjCCAX0GA1UdIwSCAXQwggFwgBTJE1ixTKdiOn7SPzym5xR8nXCjhqGCAUOkggE/\r\nMIIBOzEhMB8GCSqGSIb3DQEJARYSZGl0QGRpZ2l0YWwuZ292LnJ1MQswCQYDVQQG\r\nEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQ\r\nvtGB0LrQstCwMVMwUQYDVQQJDErQn9GA0LXRgdC90LXQvdGB0LrQsNGPINC90LDQ\r\nsdC10YDQtdC20L3QsNGPLCDQtNC+0LwgMTAsINGB0YLRgNC+0LXQvdC40LUgMjEm\r\nMCQGA1UECgwd0JzQuNC90YbQuNGE0YDRiyDQoNC+0YHRgdC40LgxGDAWBgUqhQNk\r\nARINMTA0NzcwMjAyNjcwMTEVMBMGBSqFA2QEEgo3NzEwNDc0Mzc1MSYwJAYDVQQD\r\nDB3QnNC40L3RhtC40YTRgNGLINCg0L7RgdGB0LjQuIIRAJUfo0d8YQQ6rfqFhieC\r\nNEIwgY8GA1UdHwSBhzCBhDAqoCigJoYkaHR0cDovL3JlZXN0ci1wa2kucnUvY2Rw\r\nL2d1YzIwMjIuY3JsMCqgKKAmhiRodHRwOi8vY29tcGFueS5ydC5ydS9jZHAvZ3Vj\r\nMjAyMi5jcmwwKqAooCaGJGh0dHA6Ly9yb3N0ZWxlY29tLnJ1L2NkcC9ndWMyMDIy\r\nLmNybDBABggrBgEFBQcBAQQ0MDIwMAYIKwYBBQUHMAKGJGh0dHA6Ly9yZWVzdHIt\r\ncGtpLnJ1L2NkcC9ndWMyMDIyLmNydDCB9QYFKoUDZHAEgeswgegMNNCf0JDQmtCc\r\nIMKr0JrRgNC40L/RgtC+0J/RgNC+IEhTTcK7INCy0LXRgNGB0LjQuCAyLjAMQ9Cf\r\n0JDQmiDCq9CT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ\r\n0LjQuSDRhtC10L3RgtGAwrsMNdCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxNDkv\r\nMy8yLzIvMjMg0L7RgiAwMi4wMy4yMDE4DDTQl9Cw0LrQu9GO0YfQtdC90LjQtSDi\r\nhJYgMTQ5LzcvNi00NDkg0L7RgiAzMC4xMi4yMDIxMAwGBSqFA2RyBAMCAQEwCgYI\r\nKoUDBwEBAwIDQQAETFxxXoexBECXu39ZhwRnWF68CyDluMga/43xA2zBNootoweu\r\nLkSLJCwjxf7XNF+fq64prZSHaU8/bKrb5h6RMIIJ1DCCCYGgAwIBAgIRAsRypwDQ\r\nsMuaR5WPgn3gkkYwCgYIKoUDBwEBAwIwggE+MRUwEwYFKoUDZAQSCjc3MDczMjkx\r\nNTIxHDAaBgkqhkiG9w0BCQEWDXVjQHRheC5nb3YucnUxGDAWBgUqhQNkARINMTA0\r\nNzcwNzAzMDUxMzELMAkGA1UEBhMCUlUxGDAWBgNVBAgMDzc3INCc0L7RgdC60LLQ\r\nsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDEpMCcGA1UECQwg0YPQuy4g0J3Q\r\ntdCz0LvQuNC90L3QsNGPLCDQtC4gMjMxPzA9BgNVBAoMNtCk0LXQtNC10YDQsNC7\r\n0YzQvdCw0Y8g0L3QsNC70L7Qs9C+0LLQsNGPINGB0LvRg9C20LHQsDE/MD0GA1UE\r\nAww20KTQtdC00LXRgNCw0LvRjNC90LDRjyDQvdCw0LvQvtCz0L7QstCw0Y8g0YHQ\r\nu9GD0LbQsdCwMB4XDTIzMTIwNjA5NTk0MFoXDTI1MDMwNjEwMDk0MFowggIRMRUw\r\nEwYFKoUDZAQSCjU0MDgwMjQyODYxFjAUBgUqhQNkAxILMDYzMzE5MTc4NTIxGDAW\r\nBgUqhQNkARINMTE5NTQ3NjA1MjkwMzEaMBgGCCqFAwOBAwEBEgw1NTA3MDU4OTgw\r\nMDQxJzAlBgkqhkiG9w0BCQEWGGFmYW5hc2V2YUBncmVlbndheS5ncm91cDELMAkG\r\nA1UEBhMCUlUxNTAzBgNVBAgMLDU0INCd0L7QstC+0YHQuNCx0LjRgNGB0LrQsNGP\r\nINC+0LHQu9Cw0YHRgtGMMSowKAYDVQQHDCHQk9Ce0KDQntCUINCd0J7QktCe0KHQ\r\nmNCR0JjQoNCh0JoxOjA4BgNVBAkMMdCY0J3QltCV0J3QldCg0J3QkNCvINCj0Jss\r\n0JTQntCcIDTQkCzQntCk0JjQoSA0MTIxLTArBgNVBAoMJNCe0J7QniAi0JzQkNCZ\r\n0JPQoNCY0J0g0JzQkNCg0JrQldCiIjEtMCsGA1UEAwwk0J7QntCeICLQnNCQ0JnQ\r\nk9Cg0JjQnSDQnNCQ0KDQmtCV0KIiMTAwLgYDVQQMDCfQk9CV0J3QldCg0JDQm9Cs\r\n0J3Qq9CZINCU0JjQoNCV0JrQotCe0KAxKjAoBgNVBCoMIdCh0JLQldCi0JvQkNCd\r\n0JAg0J/QldCi0KDQntCS0J3QkDEZMBcGA1UEBAwQ0KHQldCc0JXQndCe0JLQkDBm\r\nMB8GCCqFAwcBAQEBMBMGByqFAwICJAAGCCqFAwcBAQICA0MABEALw3fsp5czO+dy\r\nTS2CXhQoiV7Jhck4egQ2BCg9pJ+GIPkqrIrYLea/wJYxtf46yJhqWtz6Yp0//RwK\r\nY64eDLByo4IFejCCBXYwDgYDVR0PAQH/BAQDAgTwMAwGBSqFA2RyBAMCAQEwHQYD\r\nVR0OBBYEFBlGXCK3hs+u8QK92hE6oVmAr1JoMCoGA1UdJQQjMCEGCCsGAQUFBwMC\r\nBggrBgEFBQcDBAYLKoUDAgIiIgEDvGEwggEBBggrBgEFBQcBAQSB9DCB8TAxBggr\r\nBgEFBQcwAYYlaHR0cDovL3BraS50YXguZ292LnJ1L29jc3AwMy9vY3NwLnNyZjA/\r\nBggrBgEFBQcwAoYzaHR0cDovL3BraS50YXguZ292LnJ1L2NydC9jYV9mbnNfcnVz\r\nc2lhXzIwMjNfMDEuY3J0MD0GCCsGAQUFBzAChjFodHRwOi8vYzAwMDAtYXBwMDA1\r\nL2NydC9jYV9mbnNfcnVzc2lhXzIwMjNfMDEuY3J0MDwGCCsGAQUFBzAChjBodHRw\r\nOi8vdWMubmFsb2cucnUvY3J0L2NhX2Zuc19ydXNzaWFfMjAyM18wMS5jcnQwJwYD\r\nVR0gBCAwHjAIBgYqhQNkcQEwCAYGKoUDZHECMAgGBiqFA2RxAzArBgNVHRAEJDAi\r\ngA8yMDIzMTIwNjA5NTkzOVqBDzIwMjUwMzA2MDk1OTM5WjCCAQAGBSqFA2RwBIH2\r\nMIHzDDLQn9CQ0JrQnCAi0JrRgNC40L/RgtC+0J/RgNC+IEhTTSIg0LLQtdGA0YHQ\r\nuNC4IDIuMAwz0J/QkNCaICLQmtGA0LjQv9GC0L7Qn9GA0L4g0KPQpiIgKNCy0LXR\r\ngNGB0LjQuCAyLjApDDbQl9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzMvMi8x\r\nLTUzMCDQvtGCIDA3LjAzLjIwMjMMUNCh0LXRgNGC0LjRhNC40LrQsNGCINGB0L7Q\r\nvtGC0LLQtdGC0YHRgtCy0LjRjyDihJYg0KHQpC8xMjgtNDI3MyDQvtGCIDEzLjA3\r\nLjIwMjIgMD8GBSqFA2RvBDYMNNCh0JrQl9CYICLQmtGA0LjQv9GC0L7Qn9GA0L4g\r\nQ1NQIiAo0LLQtdGA0YHQuNGPIDUuMCkwgfAGA1UdHwSB6DCB5TBMoEqgSIZGaHR0\r\ncDovL3BraS50YXguZ292LnJ1L2NkcC9kMTU2ZmIzODJjNGM1NWFkN2ViM2FlMGFj\r\nNjY3NDk1NzdmODdlMTE2LmNybDBKoEigRoZEaHR0cDovL2MwMDAwLWFwcDAwNS9j\r\nZHAvZDE1NmZiMzgyYzRjNTVhZDdlYjNhZTBhYzY2NzQ5NTc3Zjg3ZTExNi5jcmww\r\nSaBHoEWGQ2h0dHA6Ly91Yy5uYWxvZy5ydS9jZHAvZDE1NmZiMzgyYzRjNTVhZDdl\r\nYjNhZTBhYzY2NzQ5NTc3Zjg3ZTExNi5jcmwwggF2BgNVHSMEggFtMIIBaYAU0Vb7\r\nOCxMVa1+s64KxmdJV3+H4RahggFDpIIBPzCCATsxITAfBgkqhkiG9w0BCQEWEmRp\r\ndEBkaWdpdGFsLmdvdi5ydTELMAkGA1UEBhMCUlUxGDAWBgNVBAgMDzc3INCc0L7R\r\ngdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDFTMFEGA1UECQxK0J/R\r\ngNC10YHQvdC10L3RgdC60LDRjyDQvdCw0LHQtdGA0LXQttC90LDRjywg0LTQvtC8\r\nIDEwLCDRgdGC0YDQvtC10L3QuNC1IDIxJjAkBgNVBAoMHdCc0LjQvdGG0LjRhNGA\r\n0Ysg0KDQvtGB0YHQuNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExFTATBgUq\r\nhQNkBBIKNzcxMDQ3NDM3NTEmMCQGA1UEAwwd0JzQuNC90YbQuNGE0YDRiyDQoNC+\r\n0YHRgdC40LiCCkJoxXoAAAAACDMwCgYIKoUDBwEBAwIDQQDRV55qHS7r9eo4gRw6\r\n/WoaeR13Ps3PyMhSt8ZazNf5W9dBbtzeliuqmtzF83n2MbEjzuACn5o2tmoQZHuo\r\nQPemMYID2TCCA9UCAQEwggFVMIIBPjEVMBMGBSqFA2QEEgo3NzA3MzI5MTUyMRww\r\nGgYJKoZIhvcNAQkBFg11Y0B0YXguZ292LnJ1MRgwFgYFKoUDZAESDTEwNDc3MDcw\r\nMzA1MTMxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAX\r\nBgNVBAcMENCzLiDQnNC+0YHQutCy0LAxKTAnBgNVBAkMINGD0LsuINCd0LXQs9C7\r\n0LjQvdC90LDRjywg0LQuIDIzMT8wPQYDVQQKDDbQpNC10LTQtdGA0LDQu9GM0L3Q\r\nsNGPINC90LDQu9C+0LPQvtCy0LDRjyDRgdC70YPQttCx0LAxPzA9BgNVBAMMNtCk\r\n0LXQtNC10YDQsNC70YzQvdCw0Y8g0L3QsNC70L7Qs9C+0LLQsNGPINGB0LvRg9C2\r\n0LHQsAIRAsRypwDQsMuaR5WPgn3gkkYwDAYIKoUDBwEBAgIFAKCCAhkwGAYJKoZI\r\nhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjQwODI5MDkxMzU3\r\nWjAvBgkqhkiG9w0BCQQxIgQgwvCZA9kR5Vm9QgCvImCOogfj/0Zqn3RkKzUnwf3G\r\nQcwwggGsBgsqhkiG9w0BCRACLzGCAZswggGXMIIBkzCCAY8wCgYIKoUDBwEBAgIE\r\nIA3c7stnXCLEQUMck6Ur+zP/oK5AexITLFbaqSEh1XVHMIIBXTCCAUakggFCMIIB\r\nPjEVMBMGBSqFA2QEEgo3NzA3MzI5MTUyMRwwGgYJKoZIhvcNAQkBFg11Y0B0YXgu\r\nZ292LnJ1MRgwFgYFKoUDZAESDTEwNDc3MDcwMzA1MTMxCzAJBgNVBAYTAlJVMRgw\r\nFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQutCy\r\n0LAxKTAnBgNVBAkMINGD0LsuINCd0LXQs9C70LjQvdC90LDRjywg0LQuIDIzMT8w\r\nPQYDVQQKDDbQpNC10LTQtdGA0LDQu9GM0L3QsNGPINC90LDQu9C+0LPQvtCy0LDR\r\njyDRgdC70YPQttCx0LAxPzA9BgNVBAMMNtCk0LXQtNC10YDQsNC70YzQvdCw0Y8g\r\n0L3QsNC70L7Qs9C+0LLQsNGPINGB0LvRg9C20LHQsAIRAsRypwDQsMuaR5WPgn3g\r\nkkYwCgYIKoUDBwEBAQEEQF3u1dQSGO0VCXagPEmAiukAS1AvCYC0OocBQst/CaS+\r\nDZuU7dF3oJuXcVC6Du2WPglyfUODUftE1hOnVrvFOfM="},"Labels":""}]}

@yu-pankova
Copy link
Author

На что ругается?
Я уже не знаю, в какую сторону смотреть.. Может чего-то не хватает? Или дело в сгенерированном файле?

@death-mouse
Copy link

death-mouse commented Sep 4, 2024

А у вас в Content, что лежит подпись? или сама xml? Судя по ошибке вы передали в Content не xml, а саму подпись. По этому и ругается, на то что он не может xml распарсить.
У вас должно быть как то так.

  "MessageId": "a59afd35-f95f-43ff-9a4e-d1f28e785ad8",
  "RevocationRequests": [
    {
      "ParentEntityId": "ec444088-3cf3-4af0-be01-a74b1cce7c44",
      "SignedContent": {
        "Content": "Полученная xml из метода /V2/GenerateRevocationRequestXml в формате base64",
        "Signature": "тут подпись в формате base64"
      },
      "Labels": ""
    }
  ]
}

@yu-pankova
Copy link
Author

А у вас в Content, что лежит подпись? или сама xml? Судя по ошибке вы передали в Content не xml, а саму подпись. По этому и ругается, на то что он не может xml распарсить. У вас должно быть как то так.

  "MessageId": "a59afd35-f95f-43ff-9a4e-d1f28e785ad8",
  "RevocationRequests": [
    {
      "ParentEntityId": "ec444088-3cf3-4af0-be01-a74b1cce7c44",
      "SignedContent": {
        "Content": "Полученная xml из метода /V2/GenerateRevocationRequestXml в формате base64",
        "Signature": "тут подпись в формате base64"
      },
      "Labels": ""
    }
  ]
}

Да, у меня сразу подписанный XML. Мы так и УПД отправляем, сразу подписанным. Сделала по аналогии.

image

@death-mouse
Copy link

Очень странно так как по документации
Content — бинарное содержимое подписываемого документа. Значение должно быть пустым, если заполнено поле NameOnShelf.
Signature — электронная подпись (ЭП). Необязательный параметр. Если присутствует, должна быть представлена в формате CMS SignedData в DER-кодировке.

Лично мы всегда передаем в
Content саму xml
Signature подписанные данные.

Отсюда могу посоветовать Вам заполнить, как я написал и попробовать. Не говорю, что нужно делать 100% так и только так,, просто мы именно так делаем и все работает :)

@Ilnik19
Copy link

Ilnik19 commented Jan 27, 2025

Да, у меня сразу подписанный XML. Мы так и УПД отправляем, сразу подписанным. Сделала по аналогии.

У вас получилось отклонить УПД?

Можете выложить листинг процедур по формированию титула и отклонения?

@yu-pankova
Copy link
Author

У вас получилось отклонить УПД?

Да, УКД отправляется, всё работает

Можете выложить листинг процедур по формированию титула и отклонения?

Могу, но не очень понимаю какой именно кусок кода вас интересует.
Если формирование титула, то у меня вот так

`Функция ПолучитьXMLТайтлУКД(ТокенАвторизации, Документ, SellerBoxID, SellerFnsParticipantId, BuyerFnsParticipantId) Экспорт

ИмяВремФайла = СформироватьXMLУКД(Документ, SellerBoxID, SellerFnsParticipantId, BuyerFnsParticipantId);

Хост = "diadoc-api.kontur.ru";
Ресурс = "GenerateTitleXml?boxId="+SellerBoxID+"&documentTypeNamedId=UniversalCorrectionDocument&documentFunction=КСЧФДИС&documentVersion=ucd736_05_01_02&titleIndex=0";
Авторизация = "DiadocAuth ddauth_api_client_id="+Константы.КлючРазработчикаДиадок.Получить()+",ddauth_token="+ТокенАвторизации;	

Заголовки   = Новый Соответствие;
Заголовки.Вставить("Authorization", Авторизация);
Заголовки.Вставить("Content-Type", "application/xml; charset=utf-8");

Запрос = Новый HTTPЗапрос(Ресурс, Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ИмяВремФайла));	
Соединение = Новый HTTPСоединение(Хост, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());

Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Результат = Неопределено;

Если Ответ.КодСостояния = 200 Тогда
	Результат = Ответ.ПолучитьТелоКакСтроку();   
Иначе
	ВызватьИсключение Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;


Возврат Результат;	

КонецФункции`

@Ilnik19
Copy link

Ilnik19 commented Jan 28, 2025

не очень понимаю какой именно кусок кода вас интересует

Вот, а как вы формируете XML? мне нужна функция сформироватьxmlукд()
Вы построчно заполняете конкретно под УКД или там как-то универсально написано?

@Ilnik19
Copy link

Ilnik19 commented Jan 28, 2025

Да, УКД отправляется, всё работает

можете прислать процедуру сформироватьxmlукд()?

@Ilnik19
Copy link

Ilnik19 commented Jan 30, 2025

у нас ошибка
MessagePatchToPost.RecipientTitles[0]: Формат титула покупателя должен соответствовать формату титула продавца (Data at the root level is invalid. Line 1, position 1.)
Что нужно сделать?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants