Интеграция BIM360Docs и Adobe Acrobat через JS API

Автор Тема: Интеграция BIM360Docs и Adobe Acrobat через JS API  (Прочитано 23528 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн MaxАвтор темы

  • ADN OPEN
  • Сообщений: 8
  • Карма: 1
Господа, приветствую. На данный момент решаю следующую задачу: создать плагин для браузера, который автоматически проставляет штамп ВПР на проект и, рядом с ним, QR-код, который является ссылкой на папку в хранилище(нанести watermark на pdf). Как нанести штамп и QR на pdf файл я понял (AddWatermarkFromFile()), а вот как получить сам файл из хранилища пока что туплю. Подскажите, пожалуйста, какое API использовать для получения файла?..
UPD: пробую это, но не дает респонз нормальный(((
curl -v "https://developer.api.autodesk.com/oss/v2/buckets/apptestbucket/objects/test.txt"
  -X GET
  -H "Authorization: Bearer ShiAeQ67rdNSfmyEmtGW8Lnrcqto"

Хелп плз))

Отмечено как Решение Max 08-07-2019, 17:50:04

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Добро пожаловать на форум!

Посмотрите тему: https://forge.autodesk.com/en/docs/bim360/v1/tutorials/document-management/download-document/

UPD: пробую это, но не дает респонз нормальный(((

OSS это несколько иное хранилище, туда закачивают файлы, которые нужно обработать сервисами Model Derivative или Design Automation

Оффлайн MaxАвтор темы

  • ADN OPEN
  • Сообщений: 8
  • Карма: 1
Большое Вам спасибо. Разобрался. Все очень доступно написано. Если нужно для форума, могу скинуть решение как будет готово.

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Если нужно для форума, могу скинуть решение как будет готово.

не помешает, спасибо :-)

Оффлайн MaxАвтор темы

  • ADN OPEN
  • Сообщений: 8
  • Карма: 1
Еще раз здравствуйте. Сейчас пытаюсь получить access token через запрос curl. В результате выдает ошибку 400 неправильный запрос. Не подскажите, что делаю не так? Собственно сам запрос:
curl -v "https://developer.api.autodesk.com/authentication/v1/gettoken" -X "POST" -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=<client-id>&client_secret=<client-secret>&grant_type=authorization_code&code=T2HLv-X05tqRwfZrSwYsFwYMUTe73Udp-y2hGAId&redirect_uri=http://localhost/"

И вот ответ:

Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 35.164.54.50...
* TCP_NODELAY set
* Connected to developer.api.autodesk.com (35.164.54.50) port 443 (#0)
* schannel: SSL/TLS connection with developer.api.autodesk.com port 443 (step 1/3)
* schannel: checking server certificate revocation
* schannel: sending initial handshake data: sending 191 bytes...
* schannel: sent initial handshake data: sent 191 bytes
* schannel: SSL/TLS connection with developer.api.autodesk.com port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with developer.api.autodesk.com port 443 (step 2/3)
* schannel: encrypted data got 2600
* schannel: encrypted data buffer: offset 2600 length 4096
* schannel: encrypted data length: 2506
* schannel: encrypted data buffer: offset 2506 length 4096
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with developer.api.autodesk.com port 443 (step 2/3)
* schannel: encrypted data got 1590
* schannel: encrypted data buffer: offset 4096 length 4096
* schannel: encrypted data length: 122
* schannel: encrypted data buffer: offset 122 length 4096
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with developer.api.autodesk.com port 443 (step 2/3)
* schannel: encrypted data got 225
* schannel: encrypted data buffer: offset 347 length 4096
* schannel: sending next handshake data: sending 126 bytes...
* schannel: SSL/TLS connection with developer.api.autodesk.com port 443 (step 2/3)
* schannel: encrypted data got 51
* schannel: encrypted data buffer: offset 51 length 4096
* schannel: SSL/TLS handshake complete
* schannel: SSL/TLS connection with developer.api.autodesk.com port 443 (step 3/3)
* schannel: stored credential handle in session cache
> POST /authentication/v1/gettoken HTTP/1.1
> Host: developer.api.autodesk.com
> User-Agent: curl/7.55.1
> Accept: */*
> Content-Type: application/x-www-form-urlencoded
> Content-Length: 180
>
* upload completely sent off: 180 out of 180 bytes
* schannel: client wants to read 102400 bytes
* schannel: encdata_buffer resized 103424
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: encrypted data got 444
* schannel: encrypted data buffer: offset 444 length 103424
* schannel: decrypted data length: 415
* schannel: decrypted data added: 415
* schannel: decrypted data cached: offset 415 length 102400
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: decrypted data buffer: offset 415 length 102400
* schannel: schannel_recv cleanup
* schannel: decrypted data returned 415
* schannel: decrypted data buffer: offset 0 length 102400
< HTTP/1.1 400 Bad Request
< Content-Type: application/json
< Date: Tue, 09 Jul 2019 11:18:47 GMT
< Content-Length: 273
< Connection: keep-alive
<
{"developerMessage":"The authorization code/refresh token is expired or invalid/redirect_uri must have the same value as in the authorization request.","userMessage":"","errorCode":"AUTH-004","more info":"http://developer.api.autodesk.com/documentation/v1/errors/AUTH-004"}* Connection #0 to host developer.api.autodesk.com left intact


Хелп плз)))
« Последнее редактирование: 09-07-2019, 14:39:43 от Александр Игнатович »

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Ну, во-первых, никогда не оставляйте нигде client_id и client-secret. Я отредактировал Ваше сообщение

Оффлайн MaxАвтор темы

  • ADN OPEN
  • Сообщений: 8
  • Карма: 1
Спасибо, чой-то я и правда опростоволосился))

Оффлайн MaxАвтор темы

  • ADN OPEN
  • Сообщений: 8
  • Карма: 1
Извините за флуд, разобрался. Просто у access code истекает срок действия и его надо постоянно обновлять перед каждым запросом.

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Ну ладно, client id ещё можно.

Во-вторых, собственно, как должно работать. У Вас для пользователя есть ссылка, что-то вроде:
https://developer.api.autodesk.com/authentication/v1/authorize?response_type=code&client_id=<client-id>&redirect_uri=http%3A%2F%2Fsampleapp.com%2Foauth%2Fcallback%3Ffoo%3Dbar&scope=data:read

После авторизации перекидывает на http://sampleapp.com/oauth/callback?code=<код>

Дальше вызываете -

Цитировать
curl -v 'https://developer.api.autodesk.com/authentication/v1/gettoken'
  -X 'POST'
  -H 'Content-Type: application/x-www-form-urlencoded'
  -d '
    client_id=<id>&
    client_secret=<secret>&
    grant_type=authorization_code&
    code=<код>&
    redirect_uri=http://sampleapp.com/oauth/callback
  '

Все верно?

redirect_uri совпадают в обоих случаях?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Просто у access code истекает срок действия и его надо постоянно обновлять перед каждым запросом

Окей

Оффлайн MaxАвтор темы

  • ADN OPEN
  • Сообщений: 8
  • Карма: 1
Что-то никак не пойму: почему в документации access token имеет длину 28 символов ("access_token": "Ff387cyQXw1elOT3nldiFIKBqDOs", это пример), а у меня получается ооочень длинная строка вроде этой "access_token": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imp3dF9zeW1tZXRyaWNfa2V5X2RldiJ9.eyJ1c2VyaWQiOiI1TUhETFlQM1hTRksiLCJleHAiOjE0ODc1NzM0MjEsInNjb3BlIjpbXSwiY2xpZW50X2lkIjoiY1kxanJta0F4T0labW5zbDlYWDdKblVEbVRFRExjRngiLCJncmFudF9pZCI6InZPSk9BcElkZVQyekdkWlViMWZvb0psSmVMSHl0NldyIiwiYXVkIjoiaHR0cHM6Ly9hdXRvZGVzay5jb20vYXVkL2p3dGV4cDMwIiwianRpIjoiY0Q5UmNUM3ZZRG5tODdud2praTN2U2JOQlZPMTl1emxjc28wZWlRMjdZUXExcXpaaUlvZzVyQ3NDV0xqVXRjUSJ9.j0HbmjfujNqBUaOzaAFvDHVUpoiCZmeXVTZrBjT1la0"

В чем может быть дело? заранее спасибо

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
В примерах на сайте он просто обрезанный, где-то это упомянуто, где-то нет. Длинная строка - правильная. Вроде бы есть зависимость длины строки от того, что передано в scope при авторизации, но это не точно. Ну и токенами тоже светить не очень хорошо, кстати говоря, пусть у них и время жизни ограниченное

Оффлайн MaxАвтор темы

  • ADN OPEN
  • Сообщений: 8
  • Карма: 1
Скачал файл с хранилища по этому гайду https://forge.autodesk.com/en/docs/bim360/v1/tutorials/document-management/download-document/ . Все получилось отлично. Затем в Acrobat добавляю печать на файл используя addWatermarkFromFile() , все получается. а вот при попытке загрузить файл обратно в хранилище выдает ошибку "developerMessage":"ACM check failed, user or calling service does not have access to perform this operation","userMessage":"","errorCode":"AUTH-012","more info":"http://developer.api.autodesk.com/documentation/v1/errors/AUTH-012"
Для upload'а использую
curl -X PUT -H "Authorization: Bearer nFRJxzCD8OOUr7hzBwbr06D76zAT" --data-binary @D:\My First File.jpg "https://developer.api.autodesk.com/oss/v2/buckets/wip.dm.prod/objects/2a6d61f2-49df-4d7b.jpg"
При этом для upload получил access token с параметром scope=data:write
В чем может быть проблема? Может сталкивались?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
У меня есть к Вам просьба на каждый независимый вопрос создавать отдельные темы здесь на форуме.

По сути: как-то подозрительно похоже, что Вы просто взяли и скопировали из гайда - только, наверное, всё-таки, не download-document, а upload-document.

Если глянете, то там на 5 шаге создается storage object, а в его ответе уже есть id-шка и bucket, которые нужно использовать на шаге 6 непосредственно при загрузке файла в облако

Оффлайн MaxАвтор темы

  • ADN OPEN
  • Сообщений: 8
  • Карма: 1
Услышал Вас, впредь буду создавать отдельные темы. То есть я Вас правильно понял, что даже если я хочу просто перезаписать файл, мне все равно необходимо создавать Storage Object? Ведь у меня уже есть ID и bucket, полученные до этого при скачивании, поэтому  я и хотел просто перезаписать тот же самый файл...