api — Создание бизнес-ноутбуков Evernote в переполнении стека

Я пытаюсь создать новый Business Notebook по PHP, но мне не повезло.

Я пытался следовать эта документация и адаптировать код к тому, что доступно для меня, используя Комиссионный модуль: NoteStore.

Из моего понимания того, каким должен быть поток, это; создайте новую записную книжку, используя возвращенную записную книжку, получите ее shareKey, shareID и businessId, используйте эту информацию для создания связанной записной книжки в хранилище деловых заметок.

Сначала я попытался создать новую записную книжку с помощью магазина не деловых заметок, однако возвращенная новая записная книжка не содержала shareKey или какую-либо другую информацию, необходимую для создания связанной записной книжки. Вместо этого я обнаружил, что создание новой записной книжки с использованием хранилища бизнес-заметок вернуло новую записную книжку с некоторой частью этой необходимой информации в поле «sharedNotebooks», однако параметр businessNotebook был нулевым, и в sharedNotebooks не было shareId. И хотя этот новый блокнот возвращен успешно, он не виден в моих личных или служебных учетных записях.

Возвращенный блокнот выглядит как

{
"guid": "d341cd12-9f98-XXX-XXX-XXX",
"name": "Hello World",
"updateSequenceNum": 35838,
"defaultNotebook": false,
"serviceCreated": 1478570056000,
"serviceUpdated": 1478570056000,
"publishing": null,
"published": null,
"stack": null,
"sharedNotebookIds": [603053],
"sharedNotebooks": [{
"id": 603053,
"userId": 40561553,
"notebookGuid": "d341cd12-9f98-XXX-XXX-XXX",
"email": "jack@businessEvernoteAccountEmail",
"notebookModifiable": true,
"requireLogin": null,
"serviceCreated": 1478570056000,
"serviceUpdated": 1478570056000,
"shareKey": "933ad-xxx",
"username": "xxx",
"privilege": 5,
"allowPreview": null,
"recipientSettings": {
"reminderNotifyEmail": null,
"reminderNotifyInApp": null
}
}],
"businessNotebook": null,
"contact": {
"id": 111858676,
"username": "XXX",
"email": "jack@personalEvernoteAccountEmail",
"name": "Jack XXXX",
"timezone": null,
"privilege": null,
"created": null,
"updated": null,
"deleted": null,
"active": true,
"shardId": null,
"attributes": null,
"accounting": null,
"premiumInfo": null,
"businessUserInfo": null
},
"restrictions": {
"noReadNotes": null,
"noCreateNotes": null,
"noUpdateNotes": null,
"noExpungeNotes": true,
"noShareNotes": null,
"noEmailNotes": true,
"noSendMessageToRecipients": null,
"noUpdateNotebook": null,
"noExpungeNotebook": true,
"noSetDefaultNotebook": true,
"noSetNotebookStack": true,
"noPublishToPublic": true,
"noPublishToBusinessLibrary": null,
"noCreateTags": null,
"noUpdateTags": true,
"noExpungeTags": true,
"noSetParentTag": true,
"noCreateSharedNotebooks": null,
"updateWhichSharedNotebookRestrictions": null,
"expungeWhichSharedNotebookRestrictions": null
}
}

Пока что мой поток кода выглядит следующим образом // Попробуем отловить для сортировки

//Check if business user
$ourUser = $this->userStore->getUser($authToken);
if(!isset($ourUser->accounting->businessId)){
$returnObject->status = 400;
$returnObject->message = 'Not a buisness user';
return $returnObject;
}

// authenticateToBusiness and get business token
$bAuthResult = $this->userStore->authenticateToBusiness($authToken);
$bAuthToken = $bAuthResult->authenticationToken;

//Create client and set up business note store
$client = new \Evernote\AdvancedClient($authToken, false);
$bNoteStore = $client->getBusinessNoteStore();

//Create a new notebook in business note store- example result is json above
$newNotebook = new Notebook();
$newNotebook->name = $title;
$newNotebook = $bNoteStore->createNotebook($bAuthToken, $newNotebook);

//Look at new notebook and get information needed to create linked notebook
$sharedNotebooks = $newNotebook->sharedNotebooks[0];

$newLinkedNotebook = new LinkedNotebook();
$newLinkedNotebook->shareName = $title;
$newLinkedNotebook->shareKey = $sharedNotebooks->shareKey;
$newLinkedNotebook->username = $sharedNotebooks->username;
//$newLinkedNotebook->shardId = $sharedNotebooks->shardId; //isnt there

//This is where I think the trouble is happening ???
$newLinkedNotebook = $bNoteStore->createLinkedNotebook($bAuthToken, $newLinkedNotebook);

//Trying with business token throws
//{"errorCode":3,"parameter":"authenticationToken"}
//Even though within Evernote itself, I can add notebooks to this business//Alternatively trying with the regular $authToken i receive
//{"errorCode":12,"message":"s570","rateLimitDuration":null}
// error code 12 being SHARD_UNAVAILABLE

//and trying on the regular noteStore
$newLinkedNotebook = $noteStore->createLinkedNotebook($authToken, $newLinkedNotebook);
//returns {"errorCode":5,"parameter":"LinkedNotebook.shardId"}

0

Решение

Хорошо, я смог заставить это работать. По сути, в вашем коде слишком много ошибок:

  • username и shardId — это свойства пользователя, а не общей записной книжки.
  • связанная записная книжка должна быть создана в пользовательском магазине, а не в деловой. По сути, связанный блокнот — это всего лишь «ссылка» на «настоящий» общий бизнес-блокнот, который вы создали. Это позволяет пользователю получить доступ к бизнес-блокноту.

Итак, вот код, который работает для меня:

$client = new \Evernote\AdvancedClient($authToken, false, null, null, false);

$userStore = $client->getUserStore();
$userNoteStore = $client->getNoteStore();

$ourUser = $userStore->getUser($authToken);
if(!isset($ourUser->accounting->businessId)){
$returnObject = new \stdClass();
$returnObject->status = 400;
$returnObject->message = 'Not a buisness user';
return $returnObject;
}

$bAuthResult = $userStore->authenticateToBusiness($authToken);
$bAuthToken = $bAuthResult->authenticationToken;

$bNoteStore = $client->getBusinessNoteStore();

$title = 'My title';

$newNotebook = new \EDAM\Types\Notebook();
$newNotebook->name = $title;
$newNotebook = $bNoteStore->createNotebook($bAuthToken, $newNotebook);

$sharedNotebook = $newNotebook->sharedNotebooks[0];

$newLinkedNotebook = new \EDAM\Types\LinkedNotebook();
$newLinkedNotebook->shareName = $newNotebook->name;
$newLinkedNotebook->shareKey = $sharedNotebook->shareKey;

$newLinkedNotebook->username = $bAuthResult->user->username;
$newLinkedNotebook->shardId = $bAuthResult->user->shardId;

$newLinkedNotebook = $userNoteStore->createLinkedNotebook($authToken, $newLinkedNotebook);
0

Другие решения

Я только что посмотрел, так что я могу ошибаться, но описание кода ошибки № 12: «Сервисный шард с данными учетной записи временно недоступен»

Может быть временная ошибка. Дайте мне знать, и я постараюсь занять некоторое время, чтобы проверить эту проблему, если это не так.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector